Search
Search tracks on Spotify or Deezer, as a normalized list or as the raw provider payload.
Search
Two search endpoints. /search queries the provider live and returns a small, normalized list keyed by ISRC, the shape you want for feeding straight into /download. /searchfull returns the raw upstream payload (full Spotify or Deezer metadata) for when you need every field, at a lower limit.
Normalized search
https://music.jakeypri.me/searchAuth requiredqlimit10typespotifyspotify or deezer.Response
200 with a JSON object. Each result carries the fields you need to download or stream it.
{
"query": "daft punk",
"count": 2,
"results": [
{
"isrc": "USQX91300108",
"name": "Get Lucky (feat. Pharrell Williams and Nile Rodgers)",
"artist": "Daft Punk, Pharrell Williams, Nile Rodgers",
"album": "Random Access Memories",
"durationMs": 369626,
"url": "https://open.spotify.com/track/69kOkLUCkxIZYexIgSG8rq"
}
]
}isrc/download, /stream/:isrc, or /artwork/:isrc.nameartistalbumdurationMsurlopen.spotify.com link, or Deezer link when type=deezer).Errors
400{ "error": "Query is required" }whenqis missing or empty after trimming.- Upstream
4xxfrom Spotify (for example a malformed query) is passed through with its original status and message. 500{ "error": "Search failed" }on any other failure.
Examples
curl "https://music.jakeypri.me/search?q=daft+punk&limit=5&key=YOUR_KEY"
# Deezer instead of Spotify
curl "https://music.jakeypri.me/search?q=daft+punk&type=deezer&key=YOUR_KEY"const params = new URLSearchParams({ q: "daft punk", limit: "5" });
const res = await fetch(`https://music.jakeypri.me/search?${params}`, {
headers: { "X-API-Key": "YOUR_KEY" },
});
const { results } = await res.json();
const firstIsrc = results[0]?.isrc;Raw search
https://music.jakeypri.me/searchfullAuth requiredReturns the provider's response untouched: the raw Spotify Search API body ({ tracks: { items: [...] } }) or the raw Deezer search body ({ data: [...] }), depending on type. The shape is whatever the provider returns, not the normalized shape of /search. This is heavier, so the default and maximum limits are lower. Reach for it only when you need fields /search does not surface.
qlimit3typespotifyspotify or deezer.Response
200 with the raw provider JSON. For type=spotify you get Spotify's tracks.items[...]; for type=deezer you get Deezer's { data: [...] }. Errors mirror /search: 400 when q is missing, upstream 4xx passed through, and 500 { "error": "Search failed" } otherwise.
curl "https://music.jakeypri.me/searchfull?q=get+lucky&limit=2&key=YOUR_KEY"const res = await fetch(
"https://music.jakeypri.me/searchfull?q=get+lucky&limit=2",
{ headers: { "X-API-Key": "YOUR_KEY" } }
);
const raw = await res.json(); // raw Spotify tracks.items payload