Genius song metadata
One song's metadata by Genius id or link (no lyrics): title, artists (primary, featured), album and other albums, release date, description, page views, annotation, comment, contributor and pyong counts, producers, writers and other credits, recording location, tags, samples/covers/remixes and other relationships, translations, media links (Spotify, YouTube, SoundCloud, Apple Music). With include=annotations: annotations, the song's annotations (explanation text, votes, comment count, verified, pinned and review state; the annotated lines themselves are not returned).
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
id | string | Genius song id, e.g. 3039923 (HUMBLE.). Example: 3039923 |
url | string | Or a genius.com song page link. |
include | annotations | annotations: also return the song's annotations. |
annotations_limit | integer | With include=annotations: how many annotated passages (1-50, default 20). |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/genius/v1/song?id=3039923" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/genius/v1/song",
params={"id": "3039923"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/genius/v1/song");
url.searchParams.set("id", "3039923");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).