SYNK

Changelog

Every meaningful change to the SYNK Radio API. Newest at the top.

v3.0.0

14 Sep 2026
  • addYou can pin a version now. Put it in front of any path, like /v2.5.0/search, and you get that version's code exactly as it was, frozen. Nothing we ship later can move it under you. Use /current to always follow the newest, or carry on with no prefix at all, which does the same thing.
  • addAsk for a version that does not exist and you get a clear 404 back listing the ones that do, rather than a confusing 404 from the router.
  • changeErrors have one shape across every endpoint now. You get ok: false and an error object holding a stable code and a human message. The code is the bit to branch on in your own code: bad_request, not_found, rate_limited, upstream_error and so on. Before this there were over fifty different error strings and no reliable way to tell them apart.
  • changeRate limit headers now follow the IETF standard, so RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. The old X-RateLimit-* headers still go out alongside them for this release, so nothing breaks while you move over.
  • changeSuccessful responses are untouched. Only errors changed shape. If you want the old error format back, pin to /v2.5.0 and it carries on exactly as before.
  • addThe AI assistant can read the changelog now. Ask it what changed between two versions, or what might break your integration if you jump from an old version to the current one, and it will pull the real notes instead of guessing. Handy for troubleshooting edge cases and planning migrations.
  • addNew /roadmap page. See what is being worked on right now, what is planned, and what has already shipped, so you know where the API is heading.
  • addNew AI-powered endpoints under /ai. /ai/track-insights gives you editorial background on a track. /ai/lyrics-explain breaks down what a song is about (or what a specific line means). /ai/artist-summary returns a short card-ready bio. /ai/similar-because explains why two tracks are musically similar. All four are grounded on real API data so they do not invent facts.
  • changeAI endpoints cache every generation for 30 days per unique query, so repeat requests are instant and free. Each endpoint is rate-limited to 10 fresh generations per hour per IP, but cached results do not count towards the limit.

v2.5.0

13 Sep 2026
  • addNew AI assistant. Ask it anything about the API in plain English at /assistant, or pop open the panel on any docs page with the button bottom-right (or hit ⌘J). It can call the read-only endpoints itself to pull real data, and answers in proper markdown.
  • addThe assistant has three modes. Fast is for quick questions, Thinking is for the ones that need a bit more working-out, and Auto just picks the right one for you. If Thinking is busy it quietly drops back to Fast instead of erroring out.
  • addNew POST /chat endpoint behind the assistant. It streams the reply back as it is generated. GET /chat tells you how many messages you have left. 50 an hour per IP.
  • addChats are saved in your browser now, up to 30 of them. Jump back into any past conversation from the history panel.
  • changeAssistant replies do full markdown now. Headings, tables, code blocks, lists, the lot, instead of flat text.

v2.4.0

12 Sep 2026
  • addNew /lyrics, rebuilt from the ground up. It now returns proper timed lyrics, not just plain text. By default you get the best match available: word-by-word (karaoke) timing where it exists, falling back to line-by-line sync, then plain text. Use ?richsync=true to demand word-level timing, ?synced=true for any timestamped lyrics, or ?synced=false for plain text only.
  • add/lyrics now pulls from several more sources on top of the old ones, so coverage and quality are far better. The response tells you which provider actually answered and lists everything it tried. Pin a single source with ?provider=primary|alt|backup|plain if you want.
  • add/lyrics can hand back a ready-to-use .lrc file or plain text instead of JSON with ?format=lrc or ?format=text. Pass ?isrc= and it resolves the artist, title and duration for you, and add ?background=true to include background-vocal lines.
  • addNew /search/lyrics. Find a track from a line of its lyrics. Candidates are checked against the actual words before they come back, so results are confirmed rather than guesses. Matching ignores case, punctuation and apostrophes.
  • addNew /search/all. One call across tracks, artists, albums and playlists, each ranked by relevance, with a topResult pointing at the single most likely thing you meant. Every track carries a preview URL and popularity rank.
  • addNew POST /batch. Run up to 20 GET endpoints in a single request. Responses come back keyed by id, each with its own status, so one failure never sinks the rest. Handy for filling a whole page from one round trip.
  • addNew /artist/wikidata. Structured facts straight from Wikidata: formation and split dates, the full member list, record labels, genres and instruments, plus the artist's ids on the major music platforms and every official link. Band-name disambiguation is handled, so Queen, Genesis and the like resolve to the band, not the place.
  • addNew /artist/discography. The complete catalogue grouped into albums, singles, EPs and compilations, newest first, paginated all the way through instead of stopping at the first page like /artist/albums does.
  • addNew /genre/chart. The real per-genre chart. Pass a genre name or an id from /editorial/genres and get the actual chart for it, for tracks, albums, artists or playlists.
  • addNew /editorial/selection and /editorial/charts. The hand-picked editors' album selection for a genre, and the combined editorial chart (tracks, albums, artists and playlists) in a single response.
  • change/artist/biography now takes ?sections=true to return the full article split into sections, and ?enrich=true to fold in the Wikidata facts and links. It also accepts ?artist= now, matching every other artist endpoint, with the old ?name= still working.
  • addSYNK Radio station is back on. The live MP3 stream is now at /live (old /listen.mp3 path still works), and /nowplaying and /nowplaying/socket are live again. All three are grouped under a new Radio section in the docs sidebar.
  • fixFixed /lyrics/search, which had been returning 404 for everything. It now works again, and returns more per result: the song id, artwork thumbnail, release date and pageview count on top of the title, artist and link. Added ?limit= (1-25, defaults to 10) and 24 hour caching.
  • fixFixed light mode across the docs. The sidebar, top bar, popovers and code blocks were still dark with dark text on them; the whole site now themes properly in light.

v2.3.1

1 Jun 2026
  • removeRemoved the /track/download endpoint. The API is for metadata, not full-track downloads.

v2.3.0

28 May 2026
  • changeRewrote the docs frontend from scratch. New layout, cleaner navigation, faster pages.
  • changeRedid llms.txt from the ground up. The old /llm.txt route now redirects to /llms.txt. Every endpoint also has its own llm file now, for example https://api.synkradio.co.uk/llms/album-info.txt.

v2.2.0

15 May 2026
  • changeExpanded the /cover art library and tightened up the search logic. No more random unrelated artwork sneaking through. Covers now match the track they belong to.
  • changeStripped Cloudflare Workers mentions from the docs. The API now runs on a permanent server because we kept hitting the Worker rate limits. Same endpoints, same behaviour, no platform CPU or memory caps.

v2.1.1

24 Apr 2026
  • changeShare-card layout tidied up. The writers / producers / label credits have moved out from between the cover and the 'Listen now on SYNK Music' line to their own block underneath synkmusic.com, shown as up to three small muted lines (Written by …, Produced by …, ℗ Label). Stops the credits from crowding the footer.
  • changeShare-card renderer now pulls credits from /track/credits so the JSON response and the image match.
  • change/track/credits now aggregates in parallel across multiple music metadata providers rather than a single source. Writers, producers, mixers and engineers are merged and deduped across everything that answers, so major-label releases get the richest credit data available.
  • add/track/credits now returns label, copyrightYear, copyrights (℗/© strings), releaseDate, selfReleased flag and a sources map alongside the existing writers, producers and contributors. Mixers and engineers are new fields.
  • changeRoute tidy-up: /hot-tracks is now /track/hot, and /share-card is now /share/card. The old hyphenated paths still work as aliases so nothing breaks. New integrations should prefer the slash form.

v2.1.0

23 Apr 2026
  • addNew /resolve endpoint. Paste any Spotify, Deezer, Apple Music, YouTube Music or SoundCloud URL and get back a canonical track, artist, album or playlist. Handles locale prefixes, oEmbed lookups, and ISRC-based cross-matching.
  • addNew /recommendations endpoint with multi-seed support. Combine up to 5 seeds from tracks, artists, genres or ISRCs, then narrow results by target energy, tempo, valence or danceability. Fills the gap between /track/related (single seed) and /playlist/generate (genres only).
  • addNew /track/isrc endpoint. Direct ISRC lookup returning the full track info payload in one call.
  • addNew /track/credits endpoint exposing contributors grouped by role: main, featured, writers, composers, producers.
  • addNew /artist/biography endpoint pulling long-form prose from Wikipedia with language support.
  • addNew /search/suggest endpoint. Lightweight autocomplete for search boxes. Returns up to N results per type in one call, short TTL, safe to hit on every keystroke.
  • addNew /healthz public status endpoint that probes all upstreams in parallel and reports latency. No auth required, safe for monitoring dashboards.
  • addNew /share-card endpoint generating PNG share images for tracks, artists or albums. Story (1080x1920) and square (1080x1080) sizes, dark and light themes. Layout is a big circular cover clipped by the top and sides, with a 'Listen now on SYNK Music' call to action and a synkmusic.com link at the bottom.
  • changeShare-card rendering moved to a dedicated Node + Satori service fronted by nginx at api-og.synkradio.co.uk. The API now proxies and caches. Fixes the Error 1102 CPU overruns we were hitting when Satori tried to render 1080x1920 PNGs inline.

v2.0.0

8 Apr 2026
  • changeCompletely redesigned the documentation site from scratch. New minimal layout inspired by Vercel and Linear docs with cleaner sidebar, slimmer topbar, constrained content width, and more whitespace.
  • changeRebuilt the sidebar navigation with icon links for Home, Examples, and Changelog, plus flat endpoint groups with method badges.
  • changeContent area is now max-width constrained and centered for improved readability on large screens.
  • addAdded a secondary fallback source for cover art resolution. If the primary source fails, an alternative provider is queried automatically.
  • removeRemoved nowplaying, nowplaying/socket, and listen.mp3 endpoints. The SYNK Radio station has been shut down.
  • removeRemoved the Radio section from the sidebar and all related documentation pages.
  • removeRemoved the AI chat assistant and all related features.

v1.9.0

20 Mar 2026
  • addAdded interactive API documentation via Scalar at /scalar for a modern, sleek interface.
  • addAdded Swagger UI at /swagger for users who prefer the classic OpenAPI experience.
  • changeUpdated OpenAPI schema descriptions and feedback documentation formatting.
  • changeRemoved 'KV' terminology from user-facing documentation and error messages to abstract internal caching mechanisms.

v1.8.1

20 Mar 2026
  • addAdded a resizable AI chat assistant pane across the site. Access it from the top navbar to ask questions about the API.
  • addThe AI now uses tool calling to fetch live API endpoint schemas dynamically. It reads the actual docs instead of making assumptions.
  • addAI chat now streams responses using Server-Sent Events with real-time Markdown parsing. Feels incredibly fast.
  • addDynamic code blocks generated by the AI automatically include one-click copy buttons and language headers, matching the official docs.
  • addThe Try It playground now injects an 'Ask AI why this failed' button whenever an API request returns a 400 or 500 error. It sends your payload and the error straight to the AI for instant debugging.
  • addThe AI now generates context-aware, clickable follow-up suggestion chips at the bottom of its messages to keep the conversation flowing.
  • addThe global search panel now features a 'Generate AI Overview' button. Type a query and the AI will stream a direct answer right into the search results without opening the chat drawer.
  • addAdded strict rate limiting for the AI chat. It is capped at 10 requests per minute and 100 per day. There is a live UI counter in the chat box so you know exactly how many requests you have left.
  • addThe AI is now fully context-aware. It knows exactly which endpoint page you are currently viewing and what your native interface language is set to.
  • fixFixed the language switcher button styling because it was looking absolutely horrid.
  • fixFixed custom tooltips getting clipped by the top of the table and code blocks. Adjusted z-index and overflow settings so they actually display correctly.
  • changeRestructured the top bar layout. The Ask AI button sits nicely next to the search bar now, and the language dropdown has been moved over to the right.
  • addAdded a subtle focus animation to the search input box inside the modal.

v2.0.0

16 Mar 2026
  • fixFixed code examples rendering as a single line. Turns out the code blocks were missing a <pre> wrapper so the browser was collapsing all the whitespace. Proper <pre><code> pattern now.
  • fixFixed incorrect internal indentation across roughly 20 code examples. Python dicts, if/else blocks, for loops, with blocks, and JavaScript snippets all had flat indentation inside the template literals.
  • addFeedback now has an edit button. If you have already submitted feedback on a page, you will see a pencil icon instead of yes/no. Click it to update your vote, email, or reason.
  • changeFeedback state is now persistent via localStorage. Previously it relied on a server-side the internal database lock that kept disappearing. Now your submission state survives page refreshes.
  • changeFeedback edits use PATCH instead of POST. The backend finds your existing entry by IP and path, and overwrites it rather than creating a duplicate.
  • changeRemoved all the server-side the internal database lock keys for feedback. No more feedback-lock: entries cluttering up the internal database. The client handles everything now.
  • changeOverhauled /llm.txt with proper sections for authentication, CORS, rate limiting, caching behaviour, and per-endpoint metadata. The old version was bare bones.
  • changeUpdated /openapi.json with rate limit and caching info in endpoint descriptions, plus 401 and 429 error responses on all endpoints.
  • addAdded PATCH to the CORS allowed methods so browsers can actually make edit requests.
  • addAdded copy-as buttons in the Try It panel. After sending a request, you can now copy the equivalent cURL, JavaScript fetch, or Python requests snippet to your clipboard.
  • addAdded a dedicated error reference page at /errors. Lists every HTTP status code the API can return, what causes it, and the JSON error shape. Styled like the changelog.

v1.9.0

15 Mar 2026
  • changeUh... So I may have fucked up the API badly this time but I think... I fixed it in this version? I had to do a lot to get it working again.
  • changeRealised the internal database has a somewhat shitty rate limit so I decided to add fallbacks incase I do hit those.. I already have like 3 times which broke the API... EVERY DAMN TIME.
  • fixFixed some broken imports I accidentally fucked up, as per usual :D
  • changeGave the routing a massive overhaul so it's actually readable and not a total mess to maintain.
  • changeBroke up those huge route files into smaller specific handlers grouped by category, just so I can fucking remember where shit is.
  • changeMoved the playlist generation handler out of the main entry point and into its own dedicated module.
  • changeCentralised common helpers for cover art and artist images into the main utility library so I stop repeating myself.
  • changeOptimised the docs logic by deduplicating the internationalisation data to keep things snappy.
  • changeYeeted all the old legacy route files to keep the codebase clean.
  • fixFixed that critical bug where the playlist generation endpoint was just returning 404s for no reason.
  • fixResolved a type mismatch that was breaking proxy endpoints like now playing and audio streams.

v1.8.1

15 Mar 2026
  • fixSquashed an Uncaught SyntaxError in the docs search logic that was somehow nuking the entire website. How did that even get through.
  • changeGave the UI theme some much needed love and redesigned the search interface so it doesn't look like trash and is actually readable by humans.
  • changePoked around in a bunch of internal files and made the caching and logic considerably less terrible.

v1.8.0

15 Mar 2026
  • addAdded strict User-Agent validation because apparently people can't behave. You now need a contact email or a valid bot identifier. Is that really so hard?
  • addSlapped in permanent IP bans and a strike system for repeat offenders. You've been warned.
  • addAdded a custom contact message on ban responses so the freshly banned can at least know why they got yeeted.
  • addShoved an alerts bar onto every endpoint page so you'll actually notice when something important is going on.
  • addRenamed Common Patterns to Examples and threw in six new practical code snippets. You're welcome.
  • addFull i18n support for all endpoint docs (DE, HI, ZH, RU). Took way too long but it's finally done.
  • addTranslated keys for the changelog and patterns pages too while I was at it. Consistency matters I guess.
  • fixhandleInfoRequest now actually applies INFO_DOCS_I18N overrides before rendering. Wild that it wasn't doing that before.
  • fixFixed the language switcher button styling because it looked absolutely horrid.
  • fixUpgraded flag icons to SVG because blurry pixelated flags were genuinely embarrassing me.
  • fixFixed the spacing between nav buttons. It was bothering me every single day.

v1.7.0

14 Mar 2026
  • changeDid some internal architectural stuff and fixed the internal database caching again because apparently that's just my life now.

v1.6.0

14 Mar 2026
  • addDropped a whole bunch of new endpoints: /album/new-releases, /editorial/genres, /track/audio-analysis, /search/playlists, /artist/radio, /lyrics/search. Busy day.
  • addAdded a /media/ generic image proxy because manually handling every image type was getting old real fast.
  • addUI got some nice upgrades :3 - Interactive parameter validation, skeleton loading, collapsible JSON, and anchors. Pretty fancy if I do say so myself.

v1.5.1

14 Mar 2026
  • changeSwitched /listen to proxy an external streaming server. The old approach was a pain in the ass and I should've done this ages ago.
  • fixFinally sorted out CORS preflight handling for OPTIONS requests. Only took forever.

v1.5.0

14 Mar 2026
  • addAdded /album/info endpoint. Metadata, release info, labels, genres, contributors, tracklists, the whole lot. Knocked it out of the park I think.
  • addAdded /album/tracks with ISRCs and disc numbers because apparently people actually care about that stuff. Fair enough.
  • addThrew in /track/chart for chart positions by country. Pretty cool to see where tracks are popping off.

v1.4.1

14 Mar 2026
  • addAdded /track/preview for 30s clips. Good enough to know if a track actually slaps before you commit to the full thing.
  • addAdded /artist/albums endpoint. Honestly this should've been there from day one, my bad.
  • addShoved a limit parameter into /search because returning every single result forever is absolutely not nice.