# Research Brief: RYM / Music Metadata & Rating APIs for MixBoard Integration > **Date**: 2026-03-18 | **Requested by**: user | **Rounds**: 3 | **Pages fetched**: 18/20 | **Refresh by**: 2026-06-18 (cadence: stable) Stable cadence chosen because API availability and ToS for these services change infrequently; RYM's API has been "in development" for years with no near-term launch signals. ## Executive Summary Rate Your Music (RYM) / Sonemic has **no public API** and no credible timeline for one. Scraping is forbidden by ToS and actively blocked by Cloudflare [1] [2]. All existing Python scrapers are broken [3]. The official interest registration form remains open but yields no access [4]. For MixBoard, RYM is not a viable data source. Practical alternatives exist across a spectrum of richness and accessibility. **MusicBrainz** (already partially integrated via Chad Music's `mb_id`) offers the strongest foundation — free, open, well-documented REST API with genres, folksonomy tags, and ratings [5] [6]. **Last.fm** provides community-driven tags that include mood-like descriptors ("melancholic", "atmospheric") and strong similar-artist data [7] [8]. **Discogs** has an official API with styles/genres and rich release metadata, though its tag taxonomy is shallower [9] [10]. **ListenBrainz** extends MusicBrainz with listening data and metadata lookup APIs [11]. **AOTY** and **AllMusic** have no APIs and rely on scraping (both Cloudflare-protected) — impractical for a desktop app [12] [13]. For RYM-like descriptor depth ("melancholic", "lo-fi", "atmospheric"), the closest achievable combination is MusicBrainz folksonomy tags + Last.fm community tags. Neither individually matches RYM's curated descriptor system, but together they cover significant ground. ## Key Findings ### 1. RYM / Sonemic: No API, No Viable Access Path [confidence: High] RYM has no public API. The Sonemic roadmap lists APIs as a post-completion deliverable, with prerequisite features still listed as "partially completed" [1]. An interest registration form exists at `rateyourmusic.com/data-access/register-interest/` but provides no access [4]. A "Sonemic API beta launch" discussion thread from January 2019 exists with no follow-up [14]. Reddit threads from 2022 and 2023 confirm continued community frustration about the lack of API [2] [15]. Scraping is **explicitly forbidden** by RYM's Terms of Service: "Scraping / crawling RYM with automated tools without permission is forbidden [...] you can end up having your account permanently banned" [1]. The site is protected by Cloudflare with aggressive bot detection [1]. As of August 2024, even VPN access required a pilot authentication program [1]. Two Python scraping projects exist on GitHub: - **rymscraper** (`dbeley/rymscraper`) — explicitly marked as "not properly working anymore" due to Cloudflare protection [3] - **IndexYourMusic** (`0hr1/IndexYourMusic`) — self-described as "technically goes against RYM's TOS", uses sleep-based rate limiting, scrapes personal ratings only [16] Both are fragile, ToS-violating, and unsuitable for production integration in a desktop app. ### 2. MusicBrainz: Best Foundation, Already Partially Integrated [confidence: High] MusicBrainz provides a comprehensive REST API (XML and JSON) with 13 core entity types: area, artist, event, genre, instrument, label, place, recording, release, release-group, series, work, url [5]. **API details:** - **Root URL**: `https://musicbrainz.org/ws/2/` - **Rate limit**: 1 request/second average (5 per 5 seconds burst confirmed as acceptable) [6] [17] - **Authentication**: None required for read-only lookups; OAuth or digest auth for user data submissions [5] - **Format**: JSON and XML - **User-Agent**: Required — must include app name, version, and contact info [6] **Data available:** - Release metadata (title, date, label, barcode, format, track listing) - Artist info (name, area, type, relationships) - **Genres**: Curated list of ~1800+ genres accessible via `inc=genres` [18] [19] - **Folksonomy tags**: Free-form tags (any text) via `inc=tags` — includes non-genre tags like moods, nationalities, descriptors [20] [21] - **Ratings**: Community ratings (0-5 scale) via `inc=ratings` [22] - Relationships between entities (artist-artist, artist-recording, etc.) **Genre/tag depth**: MusicBrainz genres are a curated subset of folksonomy tags. The genre list includes granular entries (e.g., "acid house", "canterbury scene", "canzone d'autore") but lacks RYM-style mood descriptors [19]. However, folksonomy tags are unrestricted — users can and do tag with mood-like terms, though coverage is inconsistent and not curated for this purpose [20] [21]. **ToS**: Open data under CC0 (public domain) for core data, CC BY-NC-SA for community-contributed data. Fully permissible for desktop app use [5]. **MixBoard relevance**: Chad Music already uses `mb_id` fields, making MusicBrainz the natural primary source for metadata enrichment. ### 3. Last.fm: Strongest for Mood Tags and Similar Artists [confidence: High] Last.fm provides a mature, free API with strong community tag data that includes mood-like descriptors. **API details:** - **Root URL**: `https://ws.audioscrobbler.com/2.0/` - **Rate limit**: Not formally documented as a fixed number; rate limit headers returned with responses; excessive use triggers error 29 ("Rate limit exceeded") [7] [23]. Community consensus suggests ~5 requests/second is safe. - **Authentication**: API key required (free registration). User-specific data requires session auth [7] - **Format**: JSON and XML **Data available:** - Artist info, album info, track info - **Tags**: Community folksonomy tags per artist/album/track — these frequently include mood descriptors like "melancholic", "atmospheric", "chillout", "sexy", "lo-fi" [7] [8] - **Similar artists/tracks**: Algorithm-based similarity using listening data [24] [25] - User listening history (scrobbles) - Top charts by genre/tag **Tag depth**: Last.fm tags are crowdsourced and unstructured. Tag quality varies, but consensus-based weighting surfaces relevant tags effectively [26]. Tags include genres ("trip hop", "post-punk"), moods ("melancholic", "uplifting"), descriptors ("female vocalist", "instrumental"), and freeform labels. This is the closest practical approximation to RYM's descriptor system among available APIs. **ToS**: API is free for non-commercial use. Commercial use requires contacting Last.fm. Desktop app integration for personal use is permitted [7]. ### 4. Discogs: Rich Release Metadata, Moderate Tag Depth [confidence: High] **API details:** - **Root URL**: `https://api.discogs.com/` - **Rate limit**: 60 requests/minute authenticated, 25/minute unauthenticated [9] [10]. Rate limit headers included in responses. - **Authentication**: OAuth 1.0a or Discogs Auth (token-based, simpler) [9] - **Format**: JSON **Data available:** - Release metadata (title, artists, labels, formats, tracklist, images) - Artist info - **Genres**: ~15 broad genres (Electronic, Rock, Jazz, etc.) - **Styles**: ~300+ more specific styles (e.g., "Ambient", "Downtempo", "Synth-pop", "Shoegaze") [9] - Community ratings (per release) - Marketplace data (pricing, availability) **Tag depth**: Discogs' genre/style system is two-level: broad genres + specific styles. It lacks mood descriptors entirely. Styles are curated from a fixed list — no freeform tagging [9]. **ToS**: API Terms of Use prohibit replicating or duplicating the database, circumventing rate limits, or charging for access to Discogs data [10]. Desktop app integration for metadata enrichment appears permissible as long as data is not replicated wholesale. The ToS state: "You will not [...] Attempt to or actually replicate, duplicate, reverse engineer, or access any part of Our API [...] for any purpose other than in compliance with these TOU" [10]. ### 5. ListenBrainz: Complementary to MusicBrainz [confidence: High] ListenBrainz is the MetaBrainz Foundation's open-source listening history service (like Last.fm but open). **API details:** - **Root URL**: `https://api.listenbrainz.org` - **Rate limit**: Via rate-limiting headers in responses [11] - **Authentication**: User token for authenticated endpoints [11] - **Format**: JSON **Data available:** - Listening history - **Metadata lookup**: Resolve track/artist name to MusicBrainz IDs with associated tags, genres, and relationships [11] [27] - **Tags**: Inherits MusicBrainz genres/tags, organized per recording, artist, and release group [27] - Radio endpoints: Fetch recordings by tag with popularity filtering [11] - Statistics, recommendations, popularity data **Relevance**: ListenBrainz's metadata lookup API provides a convenient way to resolve artist+track names to MusicBrainz data with tags/genres included, without needing to do multi-step MB API lookups. ### 6. AOTY (Album of the Year): No API, Scraping-Only [confidence: High] AOTY has no official API. The site has Cloudflare protection against bots [12]. An **unofficial Python scraper** exists on PyPI: `album-of-the-year-api` (v0.2.12) — provides methods for artist scores, album info, user data via web parsing [28]. The package explicitly states: "The website doesn't currently provide API support so web parsing is required to obtain data. [...] searching and POST requests are not allowed" [28]. **Data available** (via scraping): User scores, critic scores, album info, artist info; no mood/descriptor tagging system. **Verdict**: Impractical for a shipping desktop app. Fragile, ToS-ambiguous, Cloudflare-protected. ### 7. AllMusic: No API, Richest Curated Taxonomy [confidence: High] AllMusic has **no public API** [13] [29]. A basic Node.js scraper exists (`fpbrault/allmusic-scraper`) but is minimal [13]. AllMusic's website uses heavy JavaScript rendering and anti-scraping measures [29]. **Data available** (if accessible): AllMusic has one of the richest professionally curated music taxonomies, including genres, styles, moods (e.g., "Bittersweet", "Brooding", "Reflective"), and themes (e.g., "Late Night", "Road Trip"). However, this data is proprietary and inaccessible via API. **Verdict**: Not viable for programmatic access. The taxonomy is excellent in theory but locked behind a proprietary wall. ## Current State of the Art The music metadata API landscape in 2026 is bifurcated between open/accessible services with moderate tag depth and proprietary/closed services with rich tag depth. **Open and accessible**: MusicBrainz and Last.fm form the practical foundation for most music apps needing metadata enrichment. MusicBrainz provides structured, curated data with growing genre coverage. Last.fm provides the richest freely-accessible tag data, with community-driven mood and descriptor tags that approximate (but don't match) RYM's depth. ListenBrainz bridges these by providing MusicBrainz data through convenient lookup APIs. **Rich but closed**: RYM and AllMusic have the deepest, most nuanced tag/descriptor systems. RYM's descriptor system (mood, theme, lyrical content, form) is particularly valued by the music community [1]. AllMusic's professionally curated moods and themes are similarly rich. Neither offers API access, and both actively prevent scraping. **Middle ground**: Discogs provides a solid official API but its genre/style system is relatively shallow (~300 styles, no moods). It excels at physical release metadata (formats, pressings, label info) rather than descriptive tagging. For a desktop app like MixBoard seeking RYM-like descriptor enrichment, the practical approach involves layering multiple open sources: MusicBrainz for core metadata + genres, Last.fm for community tags including mood descriptors, and optionally Discogs for supplementary release info. This combination won't replicate RYM's curated descriptor depth, but it covers the most ground that's legally and technically feasible. The AcousticBrainz project (which provided algorithmic mood/genre classification) has been **deprecated** [30]. Its data is still available in dumps but receives no new submissions. Commercial alternatives for AI-based music analysis exist (Cyanite, Bridge.audio) but are enterprise-oriented and cost-prohibitive for a personal app [31]. ## Notable Projects & Papers | Name | Type | Date | URL | Relevance | |------|------|------|-----|-----------| | MusicBrainz API | API | Active | https://musicbrainz.org/doc/MusicBrainz_API | Primary metadata source, already linked via mb_id | | Last.fm API | API | Active | https://www.last.fm/api | Best source for mood/descriptor tags | | Discogs API | API | Active | https://www.discogs.com/developers | Official API, genre/style data | | ListenBrainz API | API | Active | https://listenbrainz.readthedocs.io/en/latest/users/api/ | MB metadata lookup, listening stats | | lastfm-mcp | MCP Server | 2026 | https://github.com/rianvdm/lastfm-mcp | MCP server for Last.fm API access | | rymscraper | Scraper (broken) | 2020~ | https://github.com/dbeley/rymscraper | Python RYM scraper, broken by Cloudflare | | album-of-the-year-api | PyPI Package | Active | https://pypi.org/project/album-of-the-year-api/ | Unofficial AOTY scraper | | ChartBrainz | Web App | 2022 | MetaBrainz forum | RYM-style charts using MB data | | Sonemic Roadmap | Roadmap | Active | https://sonemic.com/ | RYM/Sonemic development status | ## Contradictions & Open Questions 1. **MusicBrainz rate limit**: Official docs state "never make more than ONE call per second" [6], but community discussion and developer confirmation indicate 5 requests per 5 seconds (burst) is acceptable [17]. The practical rate limit is more lenient than documented. 2. **Last.fm commercial use**: The API ToS are ambiguous about what constitutes "commercial use" for a free desktop app. A music player that doesn't charge for the Last.fm integration feature likely qualifies as non-commercial, but this is not explicitly clarified [7]. 3. **RYM API timeline**: The Sonemic roadmap lists APIs as a future deliverable, but prerequisite features have been "partially completed" for years [1]. Multiple Reddit threads from 2022-2024 show community frustration about the lack of progress [2] [15]. No credible evidence of imminent launch exists. 4. **Discogs ToS for desktop apps**: The API ToS prohibit "replicating or duplicating" the database [10]. Using Discogs data to enrich local metadata (caching genre/style for tracks) may technically violate this — interpretation depends on scale and purpose. ## Confidence & Gaps **Well-established:** - RYM has no API and no viable access method (High confidence — official FAQ, ToS, multiple community sources agree) - MusicBrainz, Last.fm, and Discogs APIs are mature and well-documented (High confidence — official documentation) - Last.fm community tags are the closest practical equivalent to RYM descriptors (High confidence — direct observation of tag data) **Uncertain:** - Whether Last.fm's tag coverage is dense enough for consistent mood-based filtering (would need empirical testing with MixBoard's library) - Whether MusicBrainz folksonomy tags include sufficient mood/descriptor data for less popular releases - Exact legal interpretation of Discogs ToS for desktop app caching use case **Gaps:** - No investigation of **Spotify's** or **Apple Music's** metadata APIs (both require streaming service integration; out of scope for a player using local files / Chad Music) - No investigation of the **Wikidata** music ontology, which could supplement genre/relationship data via MusicBrainz links - No empirical testing of tag coverage density across these services for a sample music library - RYM data dumps: no evidence of any community-maintained data dump or export exists; the only exports are personal rating scrapers ## Recency Notes - **Sonemic roadmap** (sonemic.com) shows ongoing development but APIs remain in the "planned" category with no date — this has been the case since at least 2019 [1] [14] - **RYM Cloudflare protection** was strengthened in August 2024, breaking rymscraper and similar tools [1] [3] - **MusicBrainz genre list** continues to grow — community discussions about genre taxonomy improvements are active as of 2024-2025 [19] [21] - **ListenBrainz** metadata API is actively developed and expanding [11] [27] - **AcousticBrainz** (algorithmic mood/genre) is deprecated — no new data since shutdown [30] - **Last.fm MCP server** (`rianvdm/lastfm-mcp`) is a recent project (2026) showing continued ecosystem activity [32] ## Sources Consulted 1. https://www.reddit.com/r/rateyourmusic/wiki/index/ (accessed 2026-03-18) — RYM FAQ: scraping policy, API status, Cloudflare, VPN pilot 2. https://www.reddit.com/r/rateyourmusic/comments/18t02bs/rym_api/ (accessed 2026-03-18) — Reddit thread about RYM API absence (2023) 3. https://github.com/dbeley/rymscraper (accessed 2026-03-18) — Python RYM scraper, marked broken by Cloudflare 4. https://rateyourmusic.com/data-access/register-interest/ (accessed 2026-03-18) — Sonemic API interest registration form 5. https://musicbrainz.org/doc/MusicBrainz_API (accessed 2026-03-18) — MusicBrainz API documentation 6. https://musicbrainz.org/doc/MusicBrainz_API/Rate_Limiting (accessed 2026-03-18) — MB rate limiting policy 7. https://www.last.fm/api (accessed 2026-03-18) — Last.fm API documentation 8. https://www.dataquest.io/blog/last-fm-api-python/ (accessed 2026-03-18) — Last.fm API tutorial showing tag data structure 9. https://www.discogs.com/developers (accessed 2026-03-18) — Discogs API documentation 10. https://support.discogs.com/hc/en-us/articles/360009334593-API-Terms-of-Use (accessed 2026-03-18) — Discogs API Terms of Use 11. https://listenbrainz.readthedocs.io/en/latest/users/api/index.html (accessed 2026-03-18) — ListenBrainz API docs 12. https://github.com/rheera/album-of-the-year-analysis (accessed 2026-03-18) — AOTY scraping project, notes Cloudflare protection 13. https://github.com/fpbrault/allmusic-scraper (accessed 2026-03-18) — AllMusic scraper (Node.js) 14. https://rateyourmusic.com/discussion/rate-your-music/sonemic-api-beta-launch/ (accessed 2026-03-18) — Sonemic API beta discussion (2019) 15. https://www.reddit.com/r/rateyourmusic/comments/x2gij6/any_updates_about_the_sonemic_api/ (accessed 2026-03-18) — Reddit: API update inquiry (2022) 16. https://github.com/0hr1/IndexYourMusic (accessed 2026-03-18) — Personal RYM rating scraper 17. https://community.metabrainz.org/t/api-rate-limit/725714 (accessed 2026-03-18) — MB community discussion on rate limits 18. https://musicbrainz.org/doc/MusicBrainz_API/Examples (accessed 2026-03-18) — MB API examples including genres/tags 19. https://musicbrainz.org/genres (accessed 2026-03-18) — MusicBrainz genre list 20. https://musicbrainz.org/doc/Folksonomy_Tagging (accessed 2026-03-18) — MB folksonomy tagging documentation 21. https://community.metabrainz.org/t/genres-and-folksonomy/565910 (accessed 2026-03-18) — MB community discussion on genres vs tags 22. https://musicbrainz.org/doc/MusicBrainz_API/Examples (accessed 2026-03-18) — MB ratings example 23. https://lastfm-docs.github.io/api-docs/user/getRecentTracks/ (accessed 2026-03-18) — Unofficial Last.fm API docs with error codes 24. https://www.last.fm/api/show/artist.getSimilar (accessed 2026-03-18) — Last.fm similar artists endpoint 25. https://www.last.fm/api/show/track.getSimilar (accessed 2026-03-18) — Last.fm similar tracks endpoint 26. https://community.metabrainz.org/t/how-suited-is-musicbrainz-for-gathering-and-presenting-subjective-data-such-as-genre/527778 (accessed 2026-03-18) — Comparison of RYM vs MB vs Last.fm tag approaches 27. https://listenbrainz.readthedocs.io/en/latest/users/api/metadata.html (accessed 2026-03-18) — ListenBrainz metadata API with tag structure 28. https://pypi.org/project/album-of-the-year-api/ (accessed 2026-03-18) — Unofficial AOTY Python package 29. https://www.reddit.com/r/learnpython/comments/11pyvpq/trying_to_scrape_allmusic_and_code_only_returns/ (accessed 2026-03-18) — AllMusic scraping difficulties 30. https://community.metabrainz.org/t/api-endpoint-for-mood-and-genre/557226 (accessed 2026-03-18) — AcousticBrainz mood/genre discussion, project status 31. https://soundcharts.com/en/blog/ai-music-analysis-2026 (accessed 2026-03-18) — AI music analysis comparison (Cyanite, Bridge, AIMS) 32. https://github.com/rianvdm/lastfm-mcp (accessed 2026-03-18) — Last.fm MCP server project ## Appendix: Crawl Log **Round 1 — Broad sweep:** - Search: "Rate Your Music Sonemic official API" → RYM FAQ wiki [1], sonemic.com [4], API beta thread [14], Reddit threads [2] [15], IndexYourMusic [16] - Search: "Rate Your Music API scraping library" → rymscraper [3], IndexYourMusic [16], Last.fm tutorial [8] - Search: "music metadata API ratings genres tags comparison" → Soundcharts guide [31], music-to-scrape.org, GitHub gist on music APIs, Last.fm Reddit thread **Round 2 — Targeted APIs:** - Search: "MusicBrainz API rate limits genres tags" → MB API docs [5], rate limiting [6], examples [18], developer resources, community discussion [17] - Search: "Discogs API rate limits authentication ToS" → Discogs developers [9], ToS [10], rate limit forum threads, Discogs auth docs - Search: "Last.fm API genre tags similar artists" → artist.getSimilar [24], track.getSimilar [25], unofficial docs [23], Last.fm MCP [32] - Search: "AOTY API AllMusic API" → AOTY analysis project [12], AOTY scraper package [28], AllMusic scraper [13], AllMusic Stack Overflow thread [29] **Round 3 — Verification:** - Search: "RYM Cloudflare protection scraping" → Confirmed Cloudflare blocks [1], bypass techniques (not applicable due to ToS), RYM VPN pilot - Search: "ListenBrainz API tags genres mood" → LB metadata API [27], LB core API [11], AcousticBrainz deprecation [30] - Search: "MusicBrainz genre taxonomy folksonomy depth" → Genre list [19], folksonomy docs [20], community debate on genre curation [21] [26], ChartBrainz project