Universal Music Links API: One Endpoint for Every Platform
A universal music link solves a simple problem: you want to share a song, but your listeners are spread across Spotify, Apple Music, YouTube Music, Deezer, Tidal, and a dozen other platforms. Instead of sending a Spotify link that half your audience can't open, you send one URL — and each person taps the platform they already use.
MusicLink is a REST API that generates these universal links. Send it any platform URL or ISRC. Get back a shareable page URL and deep links for every supported platform.
#How It Works
Three steps:
- Input: A Spotify, Apple Music, Deezer, Tidal URL — or a bare ISRC — or anything the
?q=endpoint can detect - Lookup: MusicLink identifies the recording and finds it on every platform
- Output: A JSON response with all platform links + a permanent shareable page
curl "https://api.ml.jadquir.com/v1/v1/lookup?q=GBARL9300135" \
-H "Authorization: Bearer YOUR_API_KEY"{
"success": true,
"data": [{
"public_id": "huUKtw-D",
"url": "https://ml.jadquir.com/song/rick-astley/never-gonna-give-you-up",
"title": "Never Gonna Give You Up",
"artist": "Rick Astley",
"isrc": "GBARL9300135",
"image_url": "https://is4-ssl.mzstatic.com/image/thumb/...",
"links": {
"musiclink": "https://ml.jadquir.com/song/rick-astley/never-gonna-give-you-up",
"spotify": "https://open.spotify.com/track/4cOdK2wGLETKBW3PvgPWqT",
"apple_music": "https://music.apple.com/album/never-gonna-give-you-up/1559885420?i=1559885421",
"youtube": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"youtube_music":"https://music.youtube.com/watch?v=dQw4w9WgXcQ",
"deezer": "https://www.deezer.com/track/15646529",
"tidal": "https://listen.tidal.com/track/491206012",
"soundcloud": "https://soundcloud.com/...",
"amazon_music": "https://music.amazon.com/...",
"qobuz": "https://open.qobuz.com/...",
"pandora": "https://www.pandora.com/...",
"anghami": "https://play.anghami.com/...",
"audiomack": "https://audiomack.com/...",
"jiosaavn": "https://www.jiosaavn.com/..."
}
}]
}#How This Compares to Odesli
The Odesli API (song.link) used a deeply nested format with two lookup tables. Here's what the same request returned before it was deprecated:
{
"entityUniqueId": "SPOTIFY_SONG::4cOdK2wGLETKBW3PvgPWqT",
"userCountry": "US",
"pageUrl": "https://song.link/s/4cOdK2wGLETKBW3PvgPWqT",
"linksByPlatform": {
"spotify": { "url": "https://open.spotify.com/track/...", "entityUniqueId": "SPOTIFY_SONG::..." },
"appleMusic": { "url": "https://music.apple.com/...", "entityUniqueId": "ITUNES_SONG::..." },
"youtube": { "url": "https://www.youtube.com/watch?v=...", "entityUniqueId": "YOUTUBE_VIDEO::..." }
},
"entitiesByUniqueId": {
"SPOTIFY_SONG::...": { "title": "Never Gonna Give You Up", "artistName": "Rick Astley", "thumbnailUrl": "..." }
}
}To get the Apple Music URL you needed data.linksByPlatform.appleMusic.url. The title was at data.entitiesByUniqueId[data.entityUniqueId].title. MusicLink flattens this into data.data[0].links.apple_music and data.data[0].title.
Odesli also only accepted platform URLs as input — no bare ISRCs, no MusicLink IDs. The ?q= endpoint accepts all of them.
#Supported Inputs
| Input | Example | Via |
|---|---|---|
| Any platform URL | https://open.spotify.com/track/... | ?q=URL |
| ISRC | GBARL9300135 | ?q=ISRC or /v1/lookup/isrc/ISRC |
| Spotify track ID | 4cOdK2wGLETKBW3PvgPWqT | /v1/lookup/spotify/ID |
| Apple Music track ID | 1559885421 | /v1/lookup/apple/ID |
| Deezer track ID | 15646529 | /v1/lookup/deezer/ID |
| Tidal track ID | 491206012 | /v1/lookup/tidal/ID |
| MusicLink public ID | huUKtw-D | ?q=ID or /v1/lookup/musiclink/ID |
#Supported Output Platforms
MusicLink returns links for: Spotify, Apple Music, YouTube, YouTube Music, Deezer, Tidal, SoundCloud, Amazon Music, Qobuz, Pandora, Anghami, Audiomack, JioSaavn, Shazam, Boomplay.
Links are best-effort — regional availability varies by catalog.
#Reading the Response
All results are in data[0] (an array because some ISRCs have multiple versions — a single, an album cut, a remaster):
const res = await fetch(
`https://api.ml.jadquir.com/v1/v1/lookup?q=${encodeURIComponent(input)}`,
{ headers: { Authorization: `Bearer ${process.env.MUSICLINK_API_KEY}` } }
);
const { data } = await res.json();
const track = data[0];
// Metadata
console.log(track.title); // "Never Gonna Give You Up"
console.log(track.artist); // "Rick Astley"
console.log(track.isrc); // "GBARL9300135"
console.log(track.image_url); // album art URL
// Links
console.log(track.url); // shareable MusicLink page
console.log(track.links.spotify); // Spotify deep link
console.log(track.links.apple_music); // Apple Music deep link
console.log(track.links.youtube); // YouTube URL
console.log(track.links.youtube_music); // YouTube Music URL
console.log(track.links.deezer); // Deezer URL
console.log(track.links.tidal); // Tidal URL#Embed Widget
Every track in MusicLink gets an embeddable iframe widget — useful for music blogs, artist websites, and review sites:
<iframe
src="https://ml.jadquir.com/embed/ml/huUKtw-D"
width="100%"
height="180"
frameborder="0"
allow="autoplay"
></iframe>Supports compact and full mode, light and dark themes.
#Shareable Pages
The url field in every response is a permanent, SEO-indexed page:
https://ml.jadquir.com/song/rick-astley/never-gonna-give-you-up
These pages include all platform links, the track's album art, and the embed widget. They're generated automatically from your API lookups — no extra step needed.
#Compared to Alternatives
| MusicLink | Odesli (dead) | Manual scraping | |
|---|---|---|---|
| Status | Live | Deprecated 2026 | Brittle |
| ISRC support | Yes | No | No |
Auto-detect ?q= | Yes | No | No |
| Embed widget | Yes | No | No |
| Free tier | 300 req/mo | Was free | N/A |
| Shareable pages | Yes | Yes (song.link) | No |
#Pricing
| Plan | Requests/month | Price |
|---|---|---|
| Free | 300 | $0 |
| Hobby | 5,000 | $9/month |
| Pro | 50,000 | $49/month |
No credit card required for the free tier. Rate-limit responses include a Retry-After header.