Sync sources
One endpoint returns the best available sync, chosen by a documented hierarchy. The source field tells you which one answered, and that decides your attribution.
Every lyrics response names the source that produced it, in the source field.
There is one endpoint. Community syncs are not a separate call, a separate
key, or a separate payload to reconcile — they arrive inline, chosen by the
hierarchy below.
You cannot request a specific source, and you cannot exclude one. The hierarchy always decides and you branch on the result. That keeps the response shape constant: one shape, three documented outcomes, instead of six.
The hierarchy
Resolution order for a given track:
- Community sync, if one exists for the track. These are made by people, are usually the most precise, and are why this API exists in the shape it does.
- Apple Music, if it has a sync of the type requested and the track is available there.
- Spotify, otherwise.
Steps 2 and 3 are decided together by sync type and availability: a word-level sync from one commercial source is preferred over a line-level sync from the other, because the more precise sync is the more useful one.
Three worked examples
A track with a community sync
{
"Body": {
"Type": "Syllable",
"SongWriters": [
"Stefani Joanne Angelina Germanotta",
"Nādir Ḵayyāṭ"
],
"StartTime": 7.357,
"Content": [...],
"EndTime": 234.731,
"id": "1QV6tiMFM6fSOKOGLMHYYg",
"UploadAttribution": {
"Uploader": {
"id": "790942393255329803",
"username": "spikerko",
"avatar": "https://cdn.discordapp.com/avatars/790942393255329803/bb0b32161c04dc75bd06a39f13718a44.webp?size=256",
"hasProfileBanner": true,
"url": "https://spicylyrics.org/uid/790942393255329803"
},
"Maker": {
"id": "816650334255579137",
"username": "gc",
"avatar": "https://cdn.discordapp.com/avatars/816650334255579137/03ec15a143788b3ba3f2549982c2b0ab.webp?size=256",
"hasProfileBanner": false,
"url": "https://spicylyrics.org/uid/816650334255579137"
}
},
"source": "spicy_lyrics"
},
"Status": 200,
"Type": "object"
}The community sync wins outright. uploader and maker are present, and you
must display them — see Attribution.
A track with no community sync
{
"Body": {
"Type": "Syllable",
"SongWriters": [
"Amala Zandile Dlamini",
"Andrew Wells",
"Anthony Rossomando",
"Rachel Keen"
],
"StartTime": 1.358,
"Content": [...],
"EndTime": 228.888,
"id": "7KNmIjcmGJIBrhP2s5Vioe",
"source": "apple_music"
},
"Status": 200,
"Type": "object"
}No community sync exists, so a commercial source answers. uploader and
maker are absent — not null, absent. Rendering an empty "uploaded by" line
here is the bug this page exists to prevent.
What this means for your code
Branch on source, never on the track. The same track can be answered by a
different source tomorrow — a community sync gets uploaded, a catalogue changes
— and that is a feature, not a breaking change. Code that reads source keeps
working. Code that hardcodes an assumption about a given track does not.