Stream and artwork
Stream a track as 128kbps MP3 with metadata headers, and fetch cover art.
Stream and artwork
Stream a track inline for playback, with track metadata returned in response headers, and fetch its cover art. Both routes are keyed by ISRC (exactly 12 characters).
Stream a track
https://music.jakeypri.me/stream/:isrcAuth requiredStreaming is 128kbps only. The audio is returned inline (Content-Disposition: inline) so it plays in a browser or audio element rather than downloading. On the first request for an ISRC, Hep.gg fetches and caches the file, so subsequent streams are served from cache.
isrcResponse
200 with an audio/mpeg stream and these metadata response headers. A HEAD /stream/:isrc is also supported and returns just the headers.
X-Track-TitledecodeURIComponent.X-Track-ArtistX-Track-AlbumX-Track-DurationX-Track-Artworkhttps://music.jakeypri.me/artwork/<ISRC>. A plain URL, not encoded.Errors
400{ "error": "Invalid ISRC" }when the ISRC is not exactly 12 characters.404{ "error": "Track not found" }when no track matches the ISRC.500on a server-side failure.
Examples
# Read just the metadata headers
curl -I "https://music.jakeypri.me/stream/USRC17607839?key=YOUR_KEY"
# Stream the audio to a file
curl -L "https://music.jakeypri.me/stream/USRC17607839?key=YOUR_KEY" -o stream.mp3const res = await fetch("https://music.jakeypri.me/stream/USRC17607839", {
headers: { "X-API-Key": "YOUR_KEY" },
});
const meta = {
title: decodeURIComponent(res.headers.get("x-track-title") ?? ""),
artist: decodeURIComponent(res.headers.get("x-track-artist") ?? ""),
album: decodeURIComponent(res.headers.get("x-track-album") ?? ""),
durationSec: Number(res.headers.get("x-track-duration") ?? 0),
artwork: res.headers.get("x-track-artwork"),
};
// res.body is the 128kbps audio streamCover artwork
https://music.jakeypri.me/artwork/:isrcPublicThe cover art proxy returns a 500x500 JPEG (Deezer cover_medium) for an ISRC. Unlike every download and stream route, this endpoint requires no API key, so you can embed the URL directly in an <img> tag. The image is cached server-side and served with a one-year client cache.
isrcResponse
200 with Content-Type: image/jpeg and Cache-Control: public, max-age=31536000 (one year). Errors: 400 { "error": "Invalid ISRC" }, 404 { "error": "Artwork not found" }, 500 { "error": "Failed to fetch artwork" }.
curl -L "https://music.jakeypri.me/artwork/USRC17607839" -o cover.jpg<img
src="https://music.jakeypri.me/artwork/USRC17607839"
alt="cover art"
width="500"
height="500"
/>