GET
/lyricsLyrics for a track. Returns the best available match by default: word-level (karaoke) timing where it exists, falling back to line-level sync, then plain text. Ask for a specific quality with synced or richsync.
Rate limit
60 req/min
Caching
Hits cached 7 days, misses 1 hour, keyed on the exact combination of query params.
Notes
- Word-level timing (per-syllable) beats line-level sync, which beats plain text; the API picks the highest quality available across every source it has.
- The provider field tells you which source actually answered, and providersTried lists everything that was attempted.
- Each line has time and end in milliseconds. When wordTimed is true, every line also carries a words array with per-word timings.
- Coverage varies by track. Obscure releases may only have plain text, or nothing at all.
- format=text and format=lrc return text/plain rather than JSON.
Authentication
Send a
User-Agent header containing a contact email. See authentication.Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| artist | string | optional | Artist name. Required unless you pass an isrc. |
| title | string | optional | Track title. Required unless you pass an isrc. Anything in brackets is stripped before matching. |
| isrc | string | optional | ISRC. Resolves artist, title and duration for you, and improves match accuracy. |
| duration | integer | optional | Track length in seconds. Used to reject catalogue entries that are a different edit of the same song. |
| synced | boolean | optional | synced=true returns only timestamped lyrics, 404 if none exist. synced=false returns plain text and skips the timed providers entirely. |
| richsync | boolean | optional | richsync=true returns only word-level timing, 404 if unavailable. Implies synced. |
| provider | string | optional | Pin a single source: primary, alt, backup or plain. Omit to get the best match across all of them. |
| background | boolean | optional | Include background-vocal lines as a bgWords array on each line. Off by default. |
| format | string | optional | json (default), lrc for a standard .lrc file, or text for plain text. format=lrc returns 406 if the lyrics are not timestamped. |
Request
curl 'https://api.synkradio.co.uk/lyrics' \
-H 'User-Agent: [email protected]'Try it
GETTry it
Sends a real requesthttps://api.synkradio.co.uk/lyrics?artist=Cher&title=Believe&isrc=GBUM71505078&richsync=trueResponse
200 application/json
{
"artist": "Cher",
"title": "Believe",
"isrc": null,
"provider": "plain",
"synced": false,
"wordTimed": false,
"hasBackground": false,
"lineCount": 46,
"copyright": null,
"providersTried": [
"plain"
],
"lines": [
{
"text": "No matter how hard I try"
},
{
"text": "You keep pushing me aside"
},
"..."
]
}Response schema
| Field | Type | Example | Description |
|---|---|---|---|
| artist | string | "Cher" | Primary artist, either as a string or nested object. |
| title | string | "Believe" | Display title of the resource. |
| isrc | null | null | International Standard Recording Code. |
| provider | string | "plain" | |
| synced | boolean | false | True if the lyrics include timestamps. |
| wordTimed | boolean | false | |
| hasBackground | boolean | false | |
| lineCount | number | 46 | |
| copyright | null | null | |
| providersTried | array<string> | 1 item | |
| lines | array<object> | 3 items |