BYTETOOLS

LRCLIB API

Free lyrics API with no key: plain and time-synced LRC lyrics for millions of tracks, searchable by title, artist or exact track signature. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the LRCLIB API?

LRCLIB is a free, key-free lyrics API serving both plain text lyrics and time-synced LRC-format lyrics for millions of tracks. It can be searched by free text or queried for an exact match using track title, artist, album and duration together.

Lyrics APIs are a graveyard — most have been shut down by rights-holder pressure or moved behind expensive licensing. LRCLIB survives as a crowdsourced, open database and has become the lyrics backend for a good number of open source music players precisely because it asks for nothing: no key, no account, no attribution requirement.

The feature that sets it apart is `syncedLyrics`, returned in LRC format with a `[mm:ss.xx]` timestamp on each line. That is what makes karaoke-style scrolling possible, and very few free sources provide it. Two endpoints matter: `/api/search` for fuzzy lookup, and `/api/get` for an exact match using title, artist, album and duration together — use the latter in a player, because fuzzy search on a common song title returns many near-identical wrong results.

Quick facts

Base URL
https://lrclib.net/api
Authentication
No API key or account for reads. Contributing lyrics uses a lightweight proof-of-work challenge instead of authentication.
Rate limit
No hard published limit. LRCLIB asks that clients identify themselves with a descriptive User-Agent naming the app and version.
Pricing
Free. The database is crowdsourced and openly available.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the LRCLIB API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Search for lyrics by track name

GET https://lrclib.net/api/search?q=believer

curl
curl 'https://lrclib.net/api/search?q=believer'
JavaScript (fetch)
const res = await fetch("https://lrclib.net/api/search?q=believer");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://lrclib.net/api/search?q=believer", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "id": 6557398,
    "name": "Believer",
    "trackName": "Believer",
    "artistName": "Sound Of Believer",
    "albumName": "Believer",
    "duration": 201.0,
    "instrumental": false,
    "plainLyrics": "First things first\nI'ma say all the words inside my head\nI'm fired up and tired of the way that things have been, oh (ooh)\nThe way that things have been, oh (ooh)\nSecond thing\nSecond, don't you tell me what you think that I can be\nI'm the one at the sail, I'm the master of my sea, oh (ooh)\nThe master of my sea, oh (ooh)\n\nI was broken from a young age\nTaking my sulking to the masses\nWriting my poems for the few\nThat looked at me took to me, shook to me, feeling me\nSinging from heart ache from the pain\nTake up my message from the veins\nSpeaking my lesson from the brain\nSeeing the beauty through the\n\n(Pain)\nYou made me a, you made me a believer, believer\n(Pain)\nYou break me down, you build me up, believer, believer\n(Pain)\nI let the bullets fly, oh let them rain\nMy life, my love, my drive, it came from\n(Pain)\nYou made me a, you made me a believer, believer\n\nThird things third\nSend a prayer to the ones up above\nAll the hate that you've birthed has\nTurned your spirit to a dove, oh (ooh)\nYour spirit up above, oh (ooh)\n\nI was choking in the crowd\nLiving my brain up in the cloud\nFalling like ashes to the ground\nHoping my feelings, they would drown\nBut they never did, ever lived, ebbing and flowing\nInhibited, limited\n'Til it broke up and it rained down\nIt rained down, like\n\n(Pain)\nYou made me a, you made me a believer, believer\

Parameters

ParameterTypeRequiredDescription
qqueryOptionalFree-text search across track and artist names, on the `/search` endpoint. believer
track_namequeryOptionalExact track title, for the `/get` endpoint. Believer
artist_namequeryOptionalExact artist name, paired with `track_name`. Imagine Dragons
album_namequeryOptionalAlbum title, which disambiguates re-recordings and remasters. Evolve
durationqueryOptionalTrack length in seconds. LRCLIB matches within a small tolerance, and this is the strongest disambiguator. 204

Response fields

idinteger
LRCLIB record identifier.
trackName / artistName / albumNamestring
Track metadata as stored. Crowdsourced, so spelling varies between records for the same song.
durationfloat
Track length in seconds. Compare it against your own file's duration to confirm you matched the right recording.
instrumentalboolean
True when the track has no lyrics, which is a meaningful answer rather than a missing one.
plainLyricsstring
Lyrics as plain text with newline separators.
syncedLyricsstring
LRC-format lyrics with a `[mm:ss.xx]` timestamp per line. Null when nobody has contributed a synced version.

What you can build with the LRCLIB API

  • Add scrolling karaoke-style lyrics to a music player
  • Display lyrics alongside a now-playing widget
  • Build a lyrics search tool
  • Detect instrumental tracks reliably via the instrumental flag

Common errors and how to fix them

404

No lyrics found for the exact query.

Fix: The `/get` endpoint requires a close match on title, artist and duration. Fall back to `/search` and pick from the results rather than treating 404 as final.

Wrong song returned

Fuzzy search matched a different track with a similar name.

Fix: Use `/get` with `duration` in a player. A common title like "Believer" has many unrelated recordings, and duration is the strongest disambiguator.

syncedLyrics is null

Nobody has contributed a synced version for that track.

Fix: Fall back to `plainLyrics`. Synced coverage is much thinner than plain coverage.

LRCLIB API — frequently asked questions

Is the LRCLIB API free?

Yes, free with no API key or account for reading. LRCLIB asks only that your client sends a descriptive User-Agent naming the app and version so they can identify problem traffic.

What are synced lyrics?

Lyrics in LRC format, where each line carries a `[mm:ss.xx]` timestamp marking when it is sung. That is what enables karaoke-style scrolling, and it is rare among free lyrics sources.

How do I get the right song rather than a similar one?

Use the `/get` endpoint with track name, artist name, album and duration together rather than the fuzzy `/search`. Duration is the strongest disambiguator — a common song title matches many unrelated recordings.

Is it legal to use these lyrics?

The database is crowdsourced and LRCLIB imposes no restrictions of its own, but lyrics remain copyrighted works owned by publishers. Personal and open source player use is the normal context; commercial display generally requires a licence from the rights-holders.

Tools that pair with this API

LRCLIB is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.