Guide
Spotify lyrics API: line-synced lyrics as JSON, LRC or SRT
Spotify's own Web API has no lyrics endpoint — the reference has never listed one, and the lyrics in the client come from a licensing partner rather than the documented API. These three endpoints return them with timestamps, in four formats, behind one key.
By Eduardo Airaudo, maintainer of the API · Updated 3 September 2026
Why there is no official lyrics endpoint
Lyrics are licensed content. Spotify shows them in its own clients under an agreement with a lyrics provider, and the Web API reference lists no path that returns them — not under Tracks, not under Search. Nothing in the client-credentials flow unlocks one, because the endpoint does not exist to be unlocked.
What developers do instead is copy an sp_dc cookie out of a logged-in browser, exchange it for an access token, and call the internal color-lyrics path the web player uses. It works, and it breaks: the cookie is tied to one personal account, it expires, and the token exchange changes shape without notice.
This API does that work on its side. You send a track id and a key; you get back the same line-synced payload the player renders, as JSON — or as a subtitle file, which the player never gives you at all.
What comes back
Read off the recorded /track_lyrics response, captured 2025-06-07 — not from a schema. That recording is on the endpoint's own page, in full.
- lyrics.syncType
- How the lines are timed. The recorded response says LINE_SYNCED: one timestamp per line, which is what a karaoke view needs.
- lyrics.lines[]
- The lyric itself — 40 entries in the recording, each with startTimeMs, words, endTimeMs and a syllables array.
- lyrics.provider
- Who licensed the text. The recording names Musixmatch, with providerLyricsId and providerDisplayName beside it.
- lyrics.language
- Two-letter language of the transcription, plus isRtlLanguage for right-to-left scripts.
- lyrics.previewLines[]
- The short excerpt Spotify's own UI shows before the full sheet opens.
- colors
- background, text and highlightText as signed integers — the palette the player tints the lyric sheet with.
- hasVocalRemoval
- Whether an instrumental variant exists for the track. The vocalRemoval parameter is only meaningful when this is true.
Availability follows the provider's catalogue, not this API: a track with no licensed lyrics returns an empty result rather than an invented one.
Four formats, one parameter
format takes json, lrc, srt, raw and defaults to json. The subtitle formats are generated from the same timestamps, so a karaoke overlay or a video caption track is one request rather than a parsing job.
format=json
The full structured payload above: timestamps, provider, language and colours. The default.
format=lrc
An .lrc file — the format karaoke and music players read. Timestamps as [mm:ss.xx] before each line.
format=srt
A SubRip subtitle file, for burning lyrics into video or loading them into a player track.
format=raw
The plain text, no timings. What you want when you are indexing or running text analysis.
The three endpoints
- Track lyricsGET /track_lyrics
- Search & get lyricsGET /search_lyrics
- Track lyrics (batch)GET /track_lyrics_batch
Or try one against a real track on the lyrics demo, which calls the same endpoint this page documents.
Fetch a track's lyrics
| curl -X GET \ |
| "https://spotify-proxy.checkleaked.cc/track_lyrics?id=42UBPzRMh5yyz0EDPr6fr1&format=lrc" \ |
| -H "x-api-key: $SPOTIFY_API_KEY" |
Questions
Does the Spotify Web API return lyrics?
No. The Web API reference lists no lyrics endpoint under any resource, and no OAuth scope grants one. Lyrics reach Spotify's clients through a licensing partner, outside the documented API.
Are the lyrics time-synced?
Line-synced. The recorded response reports syncType LINE_SYNCED and each line carries a startTimeMs, so a lyric can be highlighted as the track plays. Word-level syllable timing is present as a field but empty in that recording.
Can I get an LRC or SRT file directly?
Yes — format=lrc and format=srt are generated from the same timestamps, so no parsing is needed on your side. format=raw gives the plain text and format=json the full payload.
Do all tracks have lyrics?
No. Coverage follows the licensing partner's catalogue. A track with none returns an empty result rather than fabricated text.
Why not just use the sp_dc cookie trick?
It ties every request to one personal Spotify session, the cookie expires, and the internal token exchange it depends on can change without notice. Here the credential is your own API key and failures come back as HTTP statuses.
Can I fetch lyrics for several tracks at once?
Yes. GET /track_lyrics_batch takes a comma-separated ids parameter and the same format parameter, so a playlist's worth of lyrics is one request instead of fifty.
What about searching by song name instead of id?
GET /search_lyrics takes a text query and returns the match together with its lyrics, so you do not need the Spotify id first.
Sources
- Spotify Web API reference — the full endpoint list — there is no lyrics resource in it.
- Changes to the Web API — Spotify for Developers, 27 Nov 2024 — what the official API stopped serving to new and development-mode apps.
- GET /track_lyrics on this site — the recorded response this page describes, in full, with its capture date.
Get a key and pull your first lyric
Same endpoints on all three, priced differently. RapidAPI's free tier is 1,000 requests a month.