EVERY SONG

API ACCESS: 246M RECORDINGS, BPM & KEY, CHARTS, SAMPLES, CREDITS, PUBLISHING, PRESS, MIXTAPES, BLOGS, RADIO AND ARCHIVES. 78 READ-ONLY GET ROUTES IN 11 SECTIONS.

GET YOUR API KEY

GET KEY
YOUR KEY IS EMAILED TO YOU, NEVER SHOWN HERE. LOST IT? ENTER THE SAME EMAIL AND IT IS SENT AGAIN.

AUTHENTICATION

EVERY CALL NEEDS A KEY, INCLUDING THE ROUTE LIST. PASS IT AS AN x-api-key HEADER OR AN api_key QUERY PARAMETER. NO KEY = 401.
curl -H "x-api-key: YOUR_KEY" "https://everysong.site/api/v2/spine/search?q=hotline%20bling&limit=10"
curl "https://everysong.site/api/v2/spine/search?q=hotline%20bling&limit=10&api_key=YOUR_KEY"

LIMITS AND ERRORS

60 REQUESTS PER MINUTE PER KEY AND 1,000 REQUESTS PER DAY. THE DAILY COUNT RESETS AT MIDNIGHT UTC. ALL ROUTES ARE READ-ONLY GET AND ANSWER JSON.
CODEMEANING
401NO KEY, OR AN UNKNOWN KEY
429OVER 60 REQUESTS THIS MINUTE, OR THE KEY'S 1,000 FOR THE DAY ARE USED UP
503THAT SECTION IS AT ITS CONCURRENCY CAP. RETRY SHORTLY
504THE DATA DID NOT ANSWER IN TIME. TIMEOUTS: 45 S FOR spine ROUTES (EXCEPT spine/track, spine/isrc, spine/registrant: 10 S) AND THE SPINE-BACKED graph/collaborators, graph/shared_songs, songs/spectrogram, songs/audio_features, credits/publishing, credits/person, press/article_urls; 10 S FOR art/album AND art/artist; 3 S FOR songs/by_key AND songs/pitch_match, COUNTED FROM WHEN THE CALL STARTS RUNNING (ONLY A STALLED DISK REACHES IT; THEIR PAGES ARE BOUNDED TO ABOUT 1 S); 30 S FOR mixtapes/tape WITH A NUMERIC id; 20 S FOR THE OTHER mixtapes CALLS, blogs, radio, independent AND press/search, press/latest, press/writers, press/writer, press/publications, press/publication; 30 S FOR EVERYTHING ELSE. SOME FIRST CALLS ARE SLOW AND FAST ONCE CACHED
502THAT SECTION IS UNAVAILABLE
404UNKNOWN SECTION OR ROUTE. THE BODY LISTS THE VALID ONES
405NON-GET METHOD
400A REFUSED OR MISSING PARAMETER. THE BODY SAYS WHICH
GET /api/key-info?api_key=YOUR_KEY
CHECK YOUR KEY STATUS AND TODAY'S USAGE. THE KEY MUST BE IN THE QUERY STRING HERE.
RETURNS email, api_key, created_at, requests_today (0 IF THE KEY HAS NOT BEEN USED TODAY, UTC), last_request_date (THE UTC DATE OF THE KEY'S LAST CALL, null IF NEVER USED), rate_limit, plan (free FOR NEW KEYS) AND active.
GET /api/stats
SITE-WIDE API USAGE. NEEDS A KEY.
RETURNS totalKeys (ACTIVE KEYS), todayRequests, totalRequests, last7 (REQUESTS PER DAY), topEndpoints (TODAY), pageviewsToday, visitorsToday, pageviews7, pageviewsLastRecorded, serverUptime (SECONDS), memUsage (MB) AND date. THE PAGEVIEW COUNTER IS NOT ON ANY CURRENT PAGE: pageviewsLastRecorded IS THE LAST DATE IT COUNTED A VIEW, AND THE PAGEVIEW FIELDS READ 0 OR EMPTY AFTER THAT DATE. THEY DO NOT MEAN THE SITE HAD NO TRAFFIC.

ROUTE LIST

GET /api/v2 RETURNS EVERY SECTION AND ROUTE WITH A ONE-LINE DESCRIPTION. GET /api/v2/<SECTION> RETURNS ONE SECTION. BOTH NEED A KEY.
curl -H "x-api-key: YOUR_KEY" https://everysong.site/api/v2
{
  "version": 2,
  "auth": "x-api-key header or api_key query param, required on every call (get one at /developers.html)",
  "per_minute": 60,
  "sections": {
    "spine": {
      "about": "The recording spine: 246M recordings with identity, crosswalks, catalog, albums, labels and artists",
      "routes": {
        "/api/v2/spine/search": "Song search by title, most popular first. The usual way to get a rid",
        "…": "…"
      }
    },
    "…": "…"
  }
}

IDS CHAIN BETWEEN ROUTES

IDWHAT IT ISGET IT FROM
ridRECORDING IDspine/search
song_page_idSONG PAGE ID, USED BY samples/song AND credits/writersspine/ids
streaming_idSTREAMING TRACK IDspine/song
artist_idARTIST ID IN THE GRAPH. TWO FORMS: Q + DIGITS (E.G. Q33240) OR c: + A UUID (E.G. c:dbbaf158-9542-439b-a039-46fece45bc7f). BOTH WORK IN graph/neighbors AND graph/pathfind. graph/via TAKES Q IDS ONLY. graph/bio ACCEPTS BOTH, BUT EVERY STORED BIO IS KEYED BY A Q ID, SO A c: ID ALWAYS RETURNS summary: nullgraph/search
master_idALBUM IDspine/album_search
label_id / root_idLABEL / LABEL GROUP IDspine/labels
person_idCREDITED PERSON IDspine/brief CREDITS
work_idPUBLISHING WORK IDspine/brief → publishing_work
a_normARTIST KEY: NAME LOWERCASED, NON-ALPHANUMERICS REMOVED (drake, lilwayne)spine/artists → an
PARAMETERS NOT LISTED ON A ROUTE ARE PASSED THROUGH AS GIVEN. LIST ROUTES TAKE limit.

LICENSES

MOST FIELDS ARE FACTS ABOUT RECORDINGS AND CARRY NO LICENSE CONDITIONS. ONE EXCEPTION: ARTIST AND SONG SUMMARIES THAT CARRY license: "CC BY-SA 4.0" (IN graph/bio, spine/artist → bio, credits/writers → bio_license) ARE TEXT FROM WIKIPEDIA, MAY BE SHORTENED, AND ARE LICENSED UNDER CC BY-SA 4.0. IF YOU SHOW OR SHARE THAT TEXT, CREDIT WIKIPEDIA, LINK THE SOURCE URL AND THE LICENSE, AND SHARE IT UNDER THE SAME LICENSE. IMAGE LINKS POINT TO FILES HOSTED ELSEWHERE; EACH KEEPS ITS OWN RIGHTS AND LICENSE.

SECTIONS

SPINE · GRAPH · SONGS · SAMPLES · CREDITS · PRESS · MIXTAPES · BLOGS · RADIO · INDEPENDENT · ART

SPINE: /api/v2/spine

THE RECORDING SPINE: 246M RECORDINGS WITH IDENTITY, CROSSWALKS, CATALOG, ALBUMS, LABELS AND ARTISTS. CURSOR-PAGED LISTS RETURN A cursor; PASS IT BACK TO GET THE NEXT PAGE.
GET /api/v2/spine/search
SONG SEARCH BY TITLE, MOST POPULAR FIRST. THE USUAL WAY TO GET A rid. label IS A LABEL WHOSE CATALOG CARRIES THE RECORDING, PICKED BY CATALOG SIZE, SO IT IS OFTEN AN UMBRELLA OR COMPILATION LABEL RATHER THAN THE ORIGINAL RELEASE LABEL. FOR THE RELEASE LABEL USE spine/track → album.label.
q REQUIRED · limit MAX 500 (DEFAULT 300) · cursor · label_id / root_id SCOPE TO A LABEL · sort title | artist | year · dir asc | desc
https://everysong.site/api/v2/spine/search?q=hotline%20bling&limit=10&api_key=YOUR_KEY
{
  "results": [
    {
      "rid": 3602,
      "isrc": "USCM51500238",
      "streaming_id": "0wwPcA6wtMf6HUMpIRdeP7",
      "title": "Hotline Bling",
      "artist": "Drake",
      "year": "2015",
      "released": "2015-07-31",
      "pop": 79,
      "label_id": 8377,
      "label": "Island Records"
    },
    "…"
  ],
  "artists": [
    {
      "an": "hotlinebling",
      "a": "Hotline Bling",
      "n": 1
    }
  ],
  "cursor": "46|72484663",
  "done": false,
  "total": 1394,
  "total_capped": false
}
GET /api/v2/spine/song
ONE RECORDING: ISRC, STREAMING ID, RELEASE DATE, LINKED WORKS, ISWC AND AUDIO FEATURES (SAME OBJECT AS songs/audio_features; features: null WHEN ABSENT).
rid, OR artist + title, OR streaming_id
https://everysong.site/api/v2/spine/song?rid=3602&api_key=YOUR_KEY
{
  "rid": 3602,
  "isrc": "USCM51500238",
  "title": "Hotline Bling",
  "artist": "Drake",
  "year": "2015",
  "released": "2015-07-31",
  "pop": 79,
  "name": "N-003602",
  "in_spine": true,
  "streaming_id": "0wwPcA6wtMf6HUMpIRdeP7",
  "credits_recording_id": 18326083,
  "acoustic_group": null,
  "n_versions": 10,
  "first_release": "2015-07-31",
  "features": {
    "duration_ms": 267067,
    "time_signature": 4,
    "tempo": 134.966,
    "key": 2,
    "mode": 1,
    "danceability": 0.891,
    "energy": 0.628,
    "loudness": -7.863,
    "speechiness": 0.0551,
    "acousticness": 0.00258,
    "instrumentalness": 0.00019,
    "liveness": 0.0504,
    "valence": 0.552,
    "key_name": "D Major"
  },
  "works": [
    {
      "wid": 12885061,
      "name": "Hotline Bling",
      "iswc": "T-917.339.939-8"
    }
  ]
}
GET /api/v2/spine/ids
BATCH CROSSWALK PER RID: WORK, ISWC, SONG PAGE ID (song_page_id), BPM, KEY, CHART PEAK, CERTIFICATIONS, SAMPLE AND COVER COUNTS, ONE PRESSING.
rids REQUIRED, COMMA-SEPARATED (MAX 600)
https://everysong.site/api/v2/spine/ids?rids=3602,3594&api_key=YOUR_KEY
{
  "ids": {
    "3602": {
      "work": "Hotline Bling",
      "iswc": "T-917.339.939-8",
      "credits_work_id": 12885061,
      "song_page_id": 2263723,
      "smp": 2,
      "smpby": 169,
      "press": 33,
      "cov": 197,
      "peak": 1,
      "certs": "Diamond US",
      "bpm": 135,
      "key": "D maj",
      "lyr": 1,
      "album": "DMC - Cool Grooves 06 - Oct 2015",
      "country": "UK",
      "catno": "DMCCOOL6",
      "dglabel": "DMC"
    }
  }
}
GET /api/v2/spine/brief
THE FULL SONG DOSSIER: CHARTS, SAMPLES, PRESS, PRESSINGS, LABELS, CREDITS, PUBLISHING, WRITERS, RELATED SONGS. LARGE (~140 KB) AND SLOW (7–20 S).
rid REQUIRED
https://everysong.site/api/v2/spine/brief?rid=3602&api_key=YOUR_KEY
{
  "name": {
    "rid": 3602,
    "isrc": "USCM51500238",
    "title": "Hotline Bling",
    "artist": "Drake",
    "released": "2015-07-31",
    "streaming_id": "0wwPcA6wtMf6HUMpIRdeP7",
    "works": [
      {
        "wid": 12885061,
        "name": "Hotline Bling",
        "iswc": "T-917.339.939-8"
      }
    ]
  },
  "context": {
    "charts": [
      {
        "chart": "au-weekly",
        "peak": 1,
        "weeks": 83,
        "first_week": "2015-08-13",
        "last_week": "2023-05-18"
      },
      "…"
    ],
    "certs": [
      {
        "country": "DE",
        "award": "Gold",
        "multiple": 1,
        "cert_date": "2017"
      },
      "…"
    ]
  },
  "presence": {
    "song_page_ids": [
      2263723
    ],
    "releases": 33,
    "mixtapes": 11,
    "blog_posts": 4
  },
  "credits": [
    {
      "name": "Aubrey Graham",
      "role": "Written-By",
      "person_id": 1557579
    },
    "…"
  ],
  "publishing_work": {
    "work_id": "HV7V4M",
    "iswc": "T9173399398",
    "writers": [
      "…"
    ],
    "publishers": [
      "…"
    ]
  },
  "…": "genealogy, pressings, labels, identifiers, writers, related_songs, meta, artists"
}
GET /api/v2/spine/editions
EVERY PRESSING OF THE SONG, UNCAPPED, WITH LABELS, CATALOG NUMBERS AND CREDITS. SLOW (~12 S).
rid REQUIRED
https://everysong.site/api/v2/spine/editions?rid=3602&api_key=YOUR_KEY
GET /api/v2/spine/track
RELEASE METADATA: ALBUM, LABEL, UPC, COPYRIGHT LINES, FIRST RELEASE, ISRC REGISTRANT.
streaming_id REQUIRED (FROM spine/song OR spine/search)
https://everysong.site/api/v2/spine/track?streaming_id=0wwPcA6wtMf6HUMpIRdeP7&api_key=YOUR_KEY
{
  "id": "0wwPcA6wtMf6HUMpIRdeP7",
  "name": "Hotline Bling",
  "isrc": "USCM51500238",
  "duration_ms": 267066,
  "explicit": false,
  "popularity": 79,
  "preview_url": null,
  "artists": [
    {
      "id": "3TVXtAsR1Inumwj472S9r4",
      "name": "Drake",
      "followers": 97342434,
      "popularity": 98,
      "genres": [
        "rap",
        "hip hop"
      ]
    }
  ],
  "album": {
    "id": "40GMAhriYJRO1rsY4YdrZb",
    "name": "Views",
    "label": "Cash Money Records/Young Money Ent./Universal Rec.",
    "upc": "00602547943514",
    "copyright_p": "℗ 2016 Young Money Entertainment/Cash Money Records",
    "release_date": "2016-05-06"
  },
  "registrant": {
    "prefix": "USCM5",
    "country": "US",
    "top_label": "Cash Money",
    "n_tracks": 11280,
    "years": [
      null,
      2025
    ]
  }
}
GET /api/v2/spine/isrc
EVERY RELEASE CARRYING ONE ISRC.
isrc REQUIRED
https://everysong.site/api/v2/spine/isrc?isrc=USCM51500238&api_key=YOUR_KEY
GET /api/v2/spine/registrant
WHO REGISTERED AN ISRC PREFIX: COUNTRY, TRACK COUNT, TOP LABELS.
prefix REQUIRED (THE FIRST 5 CHARACTERS OF AN ISRC, E.G. USCM5)
https://everysong.site/api/v2/spine/registrant?prefix=USCM5&api_key=YOUR_KEY
GET /api/v2/spine/library
THE WHOLE SPINE AS A SORTED SONG LIST.
sort (DEFAULT pop) · dir · limit MAX 500 (DEFAULT 300) · cursor · a_norm ONE ARTIST · charted=1 CHARTED ONLY
https://everysong.site/api/v2/spine/library?limit=20&api_key=YOUR_KEY
GET /api/v2/spine/stats
CORPUS TOTALS.
NO PARAMETERS
https://everysong.site/api/v2/spine/stats?api_key=YOUR_KEY
GET /api/v2/spine/albums
EVERY ALBUM (2.57M), MOST-PRESSED FIRST.
limit MAX 500 (DEFAULT 200) · cursor
https://everysong.site/api/v2/spine/albums?limit=20&api_key=YOUR_KEY
GET /api/v2/spine/album_search
ALBUM SEARCH BY TITLE, RANKED BY PRESSING COUNT. RETURNS master_id.
q REQUIRED · limit MAX 120 (DEFAULT 60) · cursor
https://everysong.site/api/v2/spine/album_search?q=views&limit=5&api_key=YOUR_KEY
GET /api/v2/spine/album
ONE ALBUM: METADATA, LABELS, GENRES, CREDITS, TRACKLIST WITH RIDS.
master_id REQUIRED
https://everysong.site/api/v2/spine/album?master_id=997631&api_key=YOUR_KEY
GET /api/v2/spine/artists
ARTIST NAME PREFIX SEARCH WITH SONG COUNTS. RETURNS an (THE ARTIST'S a_norm).
q · limit MAX 500 (DEFAULT 400) · cursor
https://everysong.site/api/v2/spine/artists?q=drake&limit=10&api_key=YOUR_KEY
GET /api/v2/spine/artist
FULL ARTIST VIEW: IDS, ENCYCLOPEDIA SUMMARY (WITH ITS CC BY-SA 4.0 ATTRIBUTION), SOCIALS, PRESS, RADIO, TOP SONGS, ALL SONGS, COLLABORATORS, WRITER CREDITS. UNCAPPED: A MAJOR ARTIST IS 1 MB+ AND CAN TAKE 30 S.
name OR a_norm
https://everysong.site/api/v2/spine/artist?name=Drake&api_key=YOUR_KEY
GET /api/v2/spine/artist_songs
AN ARTIST'S DISCOGRAPHY GROUPED BY ALBUM, WITH RIDS.
name OR a_norm · limit MAX 200 (DEFAULT 60) · cursor
https://everysong.site/api/v2/spine/artist_songs?name=Drake&limit=20&api_key=YOUR_KEY
GET /api/v2/spine/labels
LABEL HIERARCHY: ROOTS BIGGEST FIRST, OR A LABEL NAME SEARCH, OR A ROOT'S CHILDREN. RETURNS label_id AND root_id.
q · children_of · limit MAX 500 (DEFAULT 100) · cursor
https://everysong.site/api/v2/spine/labels?q=cash%20money&api_key=YOUR_KEY
GET /api/v2/spine/label_songs
ONE LABEL'S (OR LABEL GROUP'S) CATALOG.
label_id OR root_id · limit MAX 500 (DEFAULT 300) · cursor · a_norm · sort · dir
https://everysong.site/api/v2/spine/label_songs?label_id=19799&limit=20&api_key=YOUR_KEY
GET /api/v2/spine/label_artists
ONE LABEL'S ARTISTS, BIGGEST FIRST.
label_id OR root_id · limit MAX 500 (DEFAULT 400) · cursor
https://everysong.site/api/v2/spine/label_artists?label_id=19799&limit=20&api_key=YOUR_KEY
GET /api/v2/spine/label_albums
ONE LABEL'S ALBUMS, MOST-PRESSED FIRST.
label_id OR root_id · limit MAX 500 (DEFAULT 200) · cursor
https://everysong.site/api/v2/spine/label_albums?label_id=19799&limit=20&api_key=YOUR_KEY

GRAPH: /api/v2/graph

THE ARTIST GRAPH: 418K ARTISTS (470K NODES IN ALL, COUNTING LABELS, PLACES AND GENRES) AND ABOUT 4.5M CONNECTIONS, COUNTED AS DISTINCT CONNECTED PAIRS (COLLABORATIONS, COVERS, SAMPLES, CREDITS, MEMBERS, LABELS, PRESS). graph/stats COUNTS THE 9.2M DIRECTED EDGE ROWS BEHIND THEM; ONE PAIR CAN HAVE SEVERAL ROWS. ARTIST IDS ARE Q33240 (DRAKE) OR c:<UUID> FOR ARTISTS WITHOUT A Q ID; GET THEM FROM graph/search. press/in_publication IDS (pub:, blog:, wr:) ARE A SEPARATE KIND.
GET /api/v2/graph/search
ARTIST NAME SEARCH, ACCENT-INSENSITIVE. RETURNS UP TO 50 {id, name}.
q REQUIRED
https://everysong.site/api/v2/graph/search?q=drake&api_key=YOUR_KEY
[
  {
    "id": "Q33240",
    "name": "Drake"
  },
  {
    "id": "Q61679311",
    "name": "Drakeo the Ruler"
  },
  {
    "id": "Q110020181",
    "name": "Drake Milligan"
  },
  {
    "id": "c:dbbaf158-9542-439b-a039-46fece45bc7f",
    "name": "Drake McCain"
  },
  "…"
]
GET /api/v2/graph/category_search
SEARCH ARTISTS, LABELS, WRITERS, PUBLICATIONS OR BLOGS (UP TO 1000 RESULTS).
q REQUIRED · cat artist | label | article | blogpost | writer | publication | blog | containers | all (DEFAULT)
https://everysong.site/api/v2/graph/category_search?cat=label&q=Cash%20Money&api_key=YOUR_KEY
GET /api/v2/graph/neighbors
EVERY CONNECTION OF ONE ARTIST, UNCAPPED, ONE ROW PER (NEIGHBOR, RELATIONSHIP). A MAJOR ARTIST IS ~250 KB AND ~10 S.
id REQUIRED · EXTRA LAYERS (=1): cooc SAME MIXTAPE · related RELATED ARTISTS · xw SHARED WRITER · docs PRESS + BLOG POSTS
https://everysong.site/api/v2/graph/neighbors?id=Q33240&api_key=YOUR_KEY
GET /api/v2/graph/pathfind
SHORTEST PATH BETWEEN TWO ARTISTS, WITH THE RELATIONSHIP AND THE SONG THAT LINKS EACH HOP.
from + to REQUIRED · max HOPS (MAX/DEFAULT 20) · rels COMMA-SEPARATED RELATIONSHIPS TO ALLOW
https://everysong.site/api/v2/graph/pathfind?from=Q33240&to=Q130798&api_key=YOUR_KEY
{
  "hops": 1,
  "path": [
    {
      "id": "Q33240",
      "name": "Drake",
      "streaming_id": "3TVXtAsR1Inumwj472S9r4"
    },
    {
      "id": "Q130798",
      "name": "Kendrick Lamar",
      "streaming_id": "2YZyLoL8N0Wb9xBt1NhZWg",
      "rel": "collaborated_with",
      "source": "credits",
      "via": "Marvins Room / Buried Alive Interlude"
    }
  ]
}
GET /api/v2/graph/via
THE SONG THAT CONNECTS EACH PAIR OF ARTISTS.
pairs REQUIRED: ID:ID,ID:ID (MAX 400). Q IDS ONLY; PAIRS WITH OTHER IDS ARE SKIPPED
https://everysong.site/api/v2/graph/via?pairs=Q33240:Q130798&api_key=YOUR_KEY
GET /api/v2/graph/collaborators
EVERY ARTIST CO-CREDITED WITH ONE ARTIST, WITH SHARED-SONG COUNTS.
artist REQUIRED (ARTIST KEY, E.G. drake, lilwayne)
https://everysong.site/api/v2/graph/collaborators?artist=drake&api_key=YOUR_KEY
GET /api/v2/graph/shared_songs
SONGS TWO ARTISTS ARE BOTH CREDITED ON, MOST POPULAR FIRST.
artist + other REQUIRED (BOTH ARTIST KEYS)
https://everysong.site/api/v2/graph/shared_songs?artist=drake&other=rihanna&api_key=YOUR_KEY
GET /api/v2/graph/artist
ARTIST GENRES, FOLLOWERS AND PHOTO.
name REQUIRED
https://everysong.site/api/v2/graph/artist?name=Drake&api_key=YOUR_KEY
GET /api/v2/graph/bio
ENCYCLOPEDIA LEAD PARAGRAPH PLUS SOURCE URL, WITH license, license_url AND attribution (SEE LICENSES ABOVE). summary: null WHEN THERE IS NONE. ONLY Q IDS HAVE A SUMMARY; A c: ID ALWAYS RETURNS summary: null.
id REQUIRED (ARTIST ID)
https://everysong.site/api/v2/graph/bio?id=Q33240&api_key=YOUR_KEY
GET /api/v2/graph/stats
GRAPH TOTALS: NODES, EDGES, EDGES BY RELATIONSHIP.
NO PARAMETERS
https://everysong.site/api/v2/graph/stats?api_key=YOUR_KEY

SONGS: /api/v2/songs

HOW A SONG SOUNDS AND HOW IT CHARTED. BPM AND KEY ARE AUTOMATED ESTIMATES FROM AUDIO ANALYSIS: TEMPO CAN COME BACK AT HALF OR DOUBLE THE FELT TEMPO, AND KEY CAN BE THE RELATIVE OR A NEIGHBORING KEY.
GET /api/v2/songs/features
BPM, KEY, MODE, TIME SIGNATURE AND MATCH CONFIDENCE. features: null WHEN THERE IS NO CLEAN MATCH.
streaming_id REQUIRED
https://everysong.site/api/v2/songs/features?streaming_id=0wwPcA6wtMf6HUMpIRdeP7&api_key=YOUR_KEY
{
  "id": "0wwPcA6wtMf6HUMpIRdeP7",
  "features": {
    "tempo": 134.966,
    "key": 2,
    "mode": 1,
    "time_signature": 4,
    "key_name": "D Major",
    "conf": 0.8
  }
}
KEY SPELLINGS (songs/by_key AND songs/pitch_match): A NOTE A–G, AN OPTIONAL #, b, ♯ OR ♭, THEN A MODE: Major, maj OR M; Minor, min OR m. CASE AND SPACES DO NOT MATTER EXCEPT FOR THE ONE-LETTER MODES (M IS MAJOR, m IS MINOR). C# Minor, c#m, Dbmaj AND f min ALL WORK. SHARPS ARE STORED AS FLATS, SO F# Minor COMES BACK AS Gb Minor. AN UNRECOGNIZED KEY RETURNS 400 WITH THE BAD VALUES AND THE 24 STORED SPELLINGS:
{
  "error": "Unrecognized key: Zork. Use a note and a mode, such as C# Minor, Db Major, F#m or Ebmaj.",
  "invalidKeys": ["Zork"],
  "validKeys": ["C Major", "C Minor", "Db Major", "Db Minor", "…", "B Minor"]
}
GET /api/v2/songs/audio_features
THE FULL AUDIO-FEATURE SET FOR ONE RECORDING: DANCEABILITY, ENERGY, VALENCE, ACOUSTICNESS, INSTRUMENTALNESS, SPEECHINESS, LIVENESS (0–1), LOUDNESS (DB), TEMPO (BPM), KEY (0–11, C = 0), MODE (1 MAJOR, 0 MINOR), TIME SIGNATURE AND DURATION. A SEPARATE FIELD SET FROM songs/features, READ BY THE RECORDING'S OWN STREAMING ID; songs/features MATCHES BY ARTIST AND TITLE, SO ITS BPM AND KEY CAN DIFFER WHEN IT MATCHED ANOTHER VERSION. BY rid IT READS THE RECORDING'S MAIN STREAMING ID. ABOUT 81% OF RIDS HAVE FEATURES; features: null WHEN ABSENT.
rid OR streaming_id REQUIRED
https://everysong.site/api/v2/songs/audio_features?streaming_id=0wwPcA6wtMf6HUMpIRdeP7&api_key=YOUR_KEY
{
  "rid": 3602,
  "streaming_id": "0wwPcA6wtMf6HUMpIRdeP7",
  "features": {
    "duration_ms": 267067,
    "time_signature": 4,
    "tempo": 134.966,
    "key": 2,
    "mode": 1,
    "danceability": 0.891,
    "energy": 0.628,
    "loudness": -7.863,
    "speechiness": 0.0551,
    "acousticness": 0.00258,
    "instrumentalness": 0.00019,
    "liveness": 0.0504,
    "valence": 0.552,
    "key_name": "D Major"
  }
}
GET /api/v2/songs/by_key
FIND SONGS BY KEY AND BPM RANGE (AND TEXT), IN AN EXACT ORDER, AS DEEP AS YOU WANT. EVERY RESPONSE HOLDS THE NEXT ROWS OF THE ORDER YOU ASKED FOR AND, WHILE hasMore IS TRUE, A cursor. TO LOAD MORE, SEND THE SAME PARAMETERS PLUS cursor EXACTLY AS RECEIVED; THE ROWS CONTINUE WITH NO GAPS AND NO REPEATS. NOTHING IS CAPPED OR SAMPLED. EACH CALL DOES A BOUNDED AMOUNT OF WORK (ABOUT 1 S), SO A PAGE CAN HOLD FEWER ROWS THAN limit, OR NONE, WHILE hasMore IS TRUE: KEEP FOLLOWING THE CURSOR AND NEVER STOP ON A SHORT OR EMPTY PAGE. hasMore: false (WITH cursor: null) MEANS EVERY MATCH HAS BEEN RETURNED; THE LAST CALL CAN RETURN []. total APPEARS ONLY WHEN IT IS EXACT AND CHEAP: ON THE LAST PAGE, FOR A TEXT SEARCH WITH NO OTHER FILTER ONCE ITS MATCHES ARE LOADED, AND FOR SMALL RESULTS READ WHOLE; OTHERWISE IT IS LEFT OUT. THE BPM WINDOW IS WIDENED 0.5 ON EACH SIDE (bpmMin=134 STARTS AT 133.5); THE RESPONSE ECHOES IT AS bpmWindow.
ORDER. EVERY SORT ENDS WITH id, SO NO TWO ROWS TIE AND A CURSOR NEVER SKIPS OR REPEATS. artist / title: THE TEXT IGNORING CASE, THEN bpm, THEN id. bpm: bpm, id. key: KEY NAME, bpm, id. popularity, speechiness, instrumentalness: THE VALUE, THEN id. ALL OF THESE FOLLOW dir. time_signature: THE TIME SIGNATURE IN dir ORDER, THEN popularity DESCENDING, THEN id DESCENDING. CHANGED ON 2026-10-17: TIES IN popularity DESCENDING NOW BREAK BY id DESCENDING EVERYWHERE, AND TIES IN time_signature BREAK BY POPULARITY.
CURSOR RULES. THE CURSOR IS AN OPAQUE, SIGNED, URL-SAFE TOKEN (ABOUT 100 CHARACTERS). IT DOES NOT EXPIRE. IT BELONGS TO ONE QUERY: SENDING IT WITH DIFFERENT FILTERS, SORT OR DIRECTION RETURNS 400 cursor does not match this query; AN ALTERED CURSOR RETURNS 400 invalid cursor. limit MAY CHANGE FROM ONE CALL TO THE NEXT. page (0-BASED, WITHOUT A CURSOR) STILL WORKS: IT SKIPS page x limit ROWS AND ECHOES page. A DEEP PAGE WITH A RARE FILTER CAN COME BACK SHORT OR EMPTY WITH A CURSOR THAT CONTINUES THE SKIP; FOLLOW IT. FOR SCROLLING, USE THE CURSOR.
key KEY NAME, COMMA-SEPARATED (E.G. C Major OR Ab Minor,C Major; SEE KEY SPELLINGS BELOW) · bpmMin · bpmMax · q ARTIST OR TITLE TEXT · artist / title FIELD-SPECIFIC TEXT · popMin / popMax POPULARITY 0–100 · speechMin / speechMax SPEECHINESS 0–1 · instMin / instMax INSTRUMENTALNESS 0–1 · timeSig 0 | 1 | 3 | 4 | 5 | other (other = NOT 3, 4 OR 5) · alpha FIRST LETTER: A–Z, 0-9 OR SYM (ANY OTHER FIRST CHARACTER; EMPTY VALUES ARE EXCLUDED) · alphaField artist (DEFAULT) | title · sort artist (DEFAULT) | title | bpm | key | popularity | speechiness | instrumentalness | time_signature · dir asc | desc · cursor FROM THE PREVIOUS RESPONSE · limit 1–200 (DEFAULT 100) · page 0-BASED, OLD STYLE
https://everysong.site/api/v2/songs/by_key?key=D%20Major&bpmMin=134&bpmMax=136&q=drake&sort=popularity&dir=desc&limit=5&api_key=YOUR_KEY
{
  "tracks": [
    {
      "id": 114408681,
      "artist": "Drake",
      "title": "Hotline Bling",
      "bpm": 134.966,
      "key": "D Major",
      "popularity": 79,
      "speechiness": 0.0551,
      "instrumentalness": 0.00019,
      "time_signature": 4
    },
    {
      "id": 209748383,
      "artist": "Drake",
      "title": "Hotline Bling",
      "bpm": 134.961,
      "key": "D Major",
      "popularity": 54,
      "speechiness": 0.0548,
      "instrumentalness": 0.000411,
      "time_signature": 4
    },
    "…"
  ],
  "limit": 5,
  "hasMore": true,
  "cursor": "eyJ2IjoxLCJoIjoiYWY1OGY3NWIwN2MwIiwicCI6InciLCJ0IjpbMzgsMTExNTY4ODk2XSwibyI6NX0.0k0oraNz8MavSi8K",
  "bpmWindow": {
    "min": 133.5,
    "max": 136.5,
    "tolerance": 0.5
  }
}
THE NEXT 5 ROWS: THE SAME CALL PLUS THE CURSOR.
https://everysong.site/api/v2/songs/by_key?key=D%20Major&bpmMin=134&bpmMax=136&q=drake&sort=popularity&dir=desc&limit=5&cursor=eyJ2IjoxLCJoIjoiYWY1OGY3NWIwN2MwIiwicCI6InciLCJ0IjpbMzgsMTExNTY4ODk2XSwibyI6NX0.0k0oraNz8MavSi8K&api_key=YOUR_KEY
LOAD MORE / INFINITE SCROLL. KEEP THE LAST cursor; WHEN THE USER NEARS THE END, CALL AGAIN WITH IT; APPEND tracks; STOP ONLY WHEN hasMore IS FALSE. IF A PAGE IS SHORT, CALL AGAIN AT ONCE WITH ITS CURSOR UNTIL YOU HAVE ENOUGH ROWS TO SHOW.
let cursor = null, rows = [];
do {
  const u = new URL('https://everysong.site/api/v2/songs/by_key');
  u.search = new URLSearchParams({ key: 'D Major', sort: 'popularity', dir: 'desc', limit: '200', ...(cursor ? { cursor } : {}) });
  const r = await (await fetch(u, { headers: { 'x-api-key': KEY } })).json();
  rows.push(...r.tracks);
  cursor = r.cursor;
} while (cursor);   // cursor is null only when hasMore is false
SEARCH STRATEGY (songs/by_key). TIMES WERE MEASURED ON THE SERVER ON 2026-10-17, limit=100 UNLESS NOTED, NOT COUNTING YOUR NETWORK, WHILE ANOTHER JOB WAS LOADING THE SAME DISK. EACH PAIR IS THE FIRST CALL, THEN THE SAME CALL AGAIN (DATA IN MEMORY).
1. HOW DEPTH WORKS. EACH SORT FOLLOWS ITS OWN INDEX IN EXACTLY THAT ORDER, ONE WALK PER KEY, MERGED INTO ONE LIST. THE CURSOR RECORDS WHERE THE WALK STOPPED, SO THE NEXT CALL STARTS THERE INSTEAD OF COUNTING FROM THE TOP: PAGE 50 COSTS ABOUT WHAT PAGE 1 COSTS. AFTER 10,000 ROWS (50 PAGES OF 200), THE NEXT PAGE TOOK 0.11 S (alpha=B&sort=artist), 0.26 S (key=D Major&sort=artist) AND 0.04 S (FOUR KEYS, sort=artist).
2. FASTEST PATTERNS (FULL PAGES). A KEY PLUS A BPM RANGE: 0.43 / 0.01 S SORTED BY popularity, 0.24 / 0.004 S BY bpm (key=D Major&bpmMin=134&bpmMax=136). A KEY ALONE: 0.22 / 0.01 S BY popularity, 0.14 / 0.005 S BY artist. NO KEY: popMin=60&sort=popularity 0.34 / 0.006 S. alpha WITH ANY SORT: alpha=B&sort=artist 0.42 / 0.01 S, alpha=B&sort=popularity 0.13 / 0.02 S, alpha=Q&sort=bpm 0.76 / 0.12 S, alpha=A&sort=title 0.52 / 0.15 S. A RARE RANGE IS READ WHOLE AND COMES WITH total: bpmMin=240&bpmMax=250&sort=popularity 0.32 / 0.005 S, total: 16365. speechMin=0.9&sort=speechiness&dir=desc 0.43 / 0.008 S; timeSig=5&key=C Major&sort=popularity 0.39 / 0.01 S; key=A Minor&sort=time_signature 0.22 / 0.004 S.
3. TEXT. A TEXT SEARCH (q, artist, title) RETURNS FULL PAGES IN EVERY SORT, WITH OR WITHOUT OTHER FILTERS, EXCEPT IN THE CASES LISTED AT THE END OF THIS SECTION. THE SONGS THAT MATCH ARE LOADED ONCE: EVERY WORD IN AT LEAST 50,000 SONGS AND EVERY TWO-WORD PHRASE OF PLAIN LETTERS AND DIGITS IN AT LEAST 50,000 SONGS (1,086) ARE SAVED AHEAD, A PHRASE OF COMMON WORDS IS READ FROM A PHRASE INDEX (PAIRS OF WORDS), AND NAMES AND RARER WORDS LOAD WITHIN THE FIRST CALL. UP TO 5M MATCHES ARE THEN SORTED ONCE IN THE ORDER YOU ASKED FOR, AND EACH NEXT PAGE IS READ FROM THAT LIST, WITH AN EXACT total. OVER 5M MATCHES (q=the, 29.9M; q=you, 6.7M), KEY, BPM, POPULARITY, SPEECHINESS, INSTRUMENTALNESS, timeSig AND alpha ARE TESTED ON EVERY MATCH FIRST, AND WHAT PASSES IS SORTED THE SAME WAY; WITHOUT FILTERS, OR WHEN MORE THAN 5M PASS, EACH SORT'S INDEX IS WALKED. FIRST CALL, THEN THE NEXT CALLS (MOSTLY THE TIME TO READ THE PAGE'S 100 ROWS): q=drake&sort=artist 0.27 / 0.07 S; q=love&sort=bpm (4,537,219) 0.63 / 0.12 S; q=xylophone&sort=title 0.13 / 0.10 S; artist=the rolling stones&sort=popularity&dir=desc 0.10 / 0.04 S; title=love song&sort=bpm 0.20 / 0.15 S. PHRASES OF COMMON WORDS, ASKED FOR THE FIRST TIME: q=to the&sort=popularity&dir=desc (691,437) 0.20 / 0.09 S; q=of the&sort=popularity&dir=desc (2,444,556) 0.35 / 0.09 S; q=in the&sort=title 0.79 / 0.12 S; q=on my&sort=artist 0.31 / 0.10 S; q=of love&sort=artist 0.75 / 0.11 S; q=i love you&sort=title 0.40 / 0.11 S; q=one more time&sort=artist 0.43 / 0.12 S. OVER 5M MATCHES WITH FILTERS: q=the&key=Db Major&bpmMin=90&bpmMax=90&sort=title&dir=desc (35,788 PASS) 0.67 / 0.11 S, 40 FULL PAGES IN A ROW; q=the&key=C Major&bpmMin=120&bpmMax=122&sort=artist 0.95 / 0.12 S; q=you&key=E Minor&bpmMin=100&bpmMax=101&popMin=20&sort=artist (147 PASS) ALL 147 IN TWO CALLS, 0.25 S; q=you&bpmMin=170&bpmMax=171&sort=popularity&dir=desc 0.50 / 0.13 S; q=a&timeSig=5&sort=bpm 0.93 / 0.13 S; q=in&alpha=K&sort=artist 1.10 / 0.10 S. artist AND title TOGETHER ARE LOADED AS TWO SETS (EACH SAVED AHEAD OR READ FROM THE PHRASE INDEX) AND INTERSECTED, AND A PHRASE IS MATCHED BY ITS WORDS AS THE INDEX STORES THEM (CASE, ACCENTS AND PUNCTUATION REMOVED, SO café del mar AND Cafe Del-Mar ARE THE SAME SEARCH). FIRST CALL, THEN THE NEXT CALLS, MEASURED 2026-10-18: artist=the beatles&title=love&sort=popularity (363) 0.41 / 0.01 S; artist=the rolling stones&title=love&sort=popularity&dir=desc 0.29 / 0.03 S; artist=the doors&title=the&sort=title 0.28 / 0.01 S; artist=the&title=you&sort=artist (512,734) 0.80 / 0.10 S; artist=los&title=amor&sort=popularity&dir=desc 0.17 / 0.09 S; q=café del mar&sort=popularity 0.29 / 0.01 S; q=mi corazón&sort=popularity 0.40 / 0.10 S; q=ça va&sort=bpm 0.14 / 0.14 S; q=я тебя&sort=popularity&dir=desc 0.33 / 0.12 S. WHEN A FIRST CALL CAN STILL RETURN FEWER ROWS ([] WITH A CURSOR; FOLLOW IT, THE NEXT CALL IS FULL): OVER 5M MATCHES WITH SPEECHINESS, INSTRUMENTALNESS, timeSig OR alpha WHILE THAT FILTER'S DATA IS NOT YET IN MEMORY (q=the&timeSig=3&sort=bpm: ONE EMPTY CALL OF 1.07 S, THEN 0.21 S); A PHRASE IN A SCRIPT WHOSE WORDS DO NOT REDUCE TO PLAIN LETTERS (CYRILLIC, GREEK, CJK AND OTHERS) WHOSE WORDS ARE EACH IN MILLIONS OF SONGS, WHICH LOADS FROM THE WORD INDEX AND CAN TAKE MORE THAN ONE CALL. NONE OF THE 94,954 TEST CALLS (TEXT, KEY AND PITCH-MATCH CHAINS) ON 2026-10-18 RETURNED 503 OR 504.
NO FILTER. A CALL WITH NO FILTER AT ALL (NO key, TEXT, BPM, POPULARITY, SPEECHINESS, INSTRUMENTALNESS, timeSig OR alpha) RETURNS NO ROWS BY DESIGN: {"tracks": [], "limit": 100, "hasMore": false, "cursor": null, "total": 0}. ADD AT LEAST ONE FILTER.
4. COMMA KEY LISTS. EACH KEY IS WALKED SEPARATELY AND MERGED EXACTLY INTO ONE SORTED LIST (NO key = ALL 24). FOUR KEYS (D Major,A Major,G Major,E Minor) VS ONE (D Major): 0.15 / 0.007 S VS 0.22 / 0.01 S SORTED BY POPULARITY; 0.42 / 0.006 S VS 0.29 / 0.006 S WITH bpmMin=120&bpmMax=130&sort=bpm; THE PAGE AFTER 10,000 ROWS BY artist: 0.04 S VS 0.26 S.
5. KEYS AND ERRORS. C#m, Db Minor, F#m, Dbmaj, f min AND Cbm ALL WORK (SEE KEY SPELLINGS ABOVE); key=f%23m&bpmMin=120&bpmMax=120.2 TOOK 0.004 S. 400 (UNDER 0.01 S): AN UNRECOGNIZED KEY (H Major), A NON-NUMERIC NUMBER (bpmMin=abc; ALSO bpmMax, popMin, popMax, speechMin, speechMax, instMin, instMax, timeSig), invalid cursor, OR cursor does not match this query. 503 WITH Retry-After: THE SEARCH QUEUE IS FULL (32 WAITING, OR A WAIT OVER 5 S); RETRY AFTER THE STATED SECONDS. 504: A CALL DID NOT FINISH 3 S AFTER IT STARTED. EACH CALL IS BOUNDED TO ABOUT 1 S OF WORK, SO THIS MEANS THE DISK STALLED OR ONE READ OF THE TEXT INDEX RAN LONG; RETRY THE SAME CALL (THE CURSOR STILL WORKS).
GET /api/v2/songs/pitch_match
SONGS THAT CAN BE PITCH-SHIFTED TO A TARGET KEY AND BPM, GROUPED BY SEMITONE SHIFT. THE TARGET TEMPO WINDOW IS WIDENED 0.5 BPM ON EACH SIDE (bpmMin=133&bpmMax=137 SEARCHES 132.5 TO 137.5 AFTER THE SHIFT) AND THEN CONVERTED TO EACH SOURCE KEY'S TEMPO. EACH GROUP RETURNS shift, sourceKey, sourceBpmMin / sourceBpmMax (THE WINDOW SEARCHED AT THE ORIGINAL TEMPO), targetKey, targetBpmMin / targetBpmMax (THE WIDENED TARGET WINDOW), tracks AND hasMore. ROWS ARE IN AN EXACT ORDER: CLOSEST TO THE CENTER OF THE WINDOW FIRST, THEN SONGS ABOVE THE CENTER BEFORE SONGS BELOW IT AT THE SAME DISTANCE, THEN BY id. THE RESPONSE HAS ONE cursor FOR ALL GROUPS; SEND THE SAME PARAMETERS PLUS THE CURSOR TO GET EACH GROUP'S NEXT ROWS, AND STOP WHEN THE TOP-LEVEL hasMore IS FALSE. A GROUP CAN COME BACK SHORT OR EMPTY WHILE ITS hasMore IS TRUE (EACH CALL DOES ABOUT 1 S OF WORK). WITHIN EACH PAGE OF A GROUP, COPIES OF THE SAME SONG (SAME ARTIST AND TITLE, IGNORING CASE, ACCENTS AND PUNCTUATION) ARE COLLAPSED TO THE CLOSEST ONE; A COPY CAN APPEAR AGAIN ON A LATER PAGE. dedupe=0 KEEPS EVERY COPY. MEASURED 2026-10-17 ON THE SERVER: THE EXAMPLE BELOW 0.05 S, ITS NEXT PAGE 0.03 S.
key REQUIRED, ONE KEY · bpmMin REQUIRED (OR bpmMax) · bpmMax · range SEMITONES 1–10 (DEFAULT 3) · limit PER SHIFT, 1–50 (DEFAULT 10) · q TEXT FILTER · popMin · speechMax · instMin · timeSig · dedupe 1 (DEFAULT) | 0 · cursor
https://everysong.site/api/v2/songs/pitch_match?key=D%20Major&bpmMin=133&bpmMax=137&range=2&limit=5&api_key=YOUR_KEY
GET /api/v2/songs/charts
CHART RUNS, CERTIFICATIONS AND BPM/KEY FOR ONE SONG. MATCHING USES EXACT ARTIST + TITLE STRINGS.
artist + title REQUIRED
https://everysong.site/api/v2/songs/charts?artist=Drake&title=Hotline%20Bling&api_key=YOUR_KEY
GET /api/v2/songs/charted
THE CHARTED LIBRARY (~188K SONGS), ONE ROW PER RECORDING, SORTED.
sort pop (DEFAULT) | year | artist | title · desc=1 · off OFFSET · limit MAX 500 (DEFAULT 300) · artist EXACT ARTIST
https://everysong.site/api/v2/songs/charted?sort=year&limit=20&api_key=YOUR_KEY
GET /api/v2/songs/charted_artists
EVERY CHARTED ARTIST WITH SONG COUNT. NOT PAGED: ~1 MB, ~10 S.
NO PARAMETERS
https://everysong.site/api/v2/songs/charted_artists?api_key=YOUR_KEY
GET /api/v2/songs/meta
ALBUM, LABEL, UPC, COPYRIGHTS, ARTISTS, GENRES.
streaming_id, OR artist + title
https://everysong.site/api/v2/songs/meta?streaming_id=0wwPcA6wtMf6HUMpIRdeP7&api_key=YOUR_KEY
GET /api/v2/songs/spectrogram
SPECTROGRAM IMAGE (PNG, 800×400) OF A 30-SECOND PREVIEW OF ONE RECORDING. FIRST CALL FOR A SONG CAN TAKE A FEW SECONDS; CACHED AFTER.
rid REQUIRED
https://everysong.site/api/v2/songs/spectrogram?rid=3602&api_key=YOUR_KEY
GET /api/v2/songs/card
ONE BATCHED CARD: BPM/KEY, MIXTAPES, SAMPLES, WRITERS. PARTS SLOWER THAN 9 S COME BACK null.
artist + title REQUIRED
https://everysong.site/api/v2/songs/card?artist=Drake&title=Hotline%20Bling&api_key=YOUR_KEY

SAMPLES: /api/v2/samples

SONG GENEALOGY: WHAT A SONG SAMPLES OR COVERS, AND WHAT SAMPLES OR COVERS IT. FIRST CALLS ON A SONG CAN BE SLOW; RESULTS ARE CACHED.
GET /api/v2/samples/song
UPSTREAM AND DOWNSTREAM SAMPLES, COVERS AND REMIXES OF ONE SONG, PLUS PRESS. A COLD SONG CAN EXCEED THE 30 S TIMEOUT; RETRY.
artist + title, OR song_page_id · layers COMMA LIST; LEAVE OUT press TO SKIP THE PRESS LOOKUP
https://everysong.site/api/v2/samples/song?artist=Drake&title=Hotline%20Bling&api_key=YOUR_KEY
{
  "seed": {
    "title": "Hotline Bling",
    "artist": "Drake",
    "streaming_id": "0wwPcA6wtMf6HUMpIRdeP7",
    "artist_id": "Q33240"
  },
  "upstream": [
    {
      "node": {
        "title": "Why Can't We Live Together",
        "artist": "Timmy Thomas"
      },
      "rel": "samples",
      "family": "sample"
    }
  ],
  "downstream": [
    {
      "node": {
        "title": "Thot Line Bling",
        "artist": "Jadakiss feat. Nino Man"
      },
      "rel": "sampled_in",
      "family": "sample"
    },
    "…"
  ],
  "docs": [
    "…"
  ]
}
GET /api/v2/samples/artist
AN ARTIST'S SONGS THAT HAVE GENEALOGY (MAX 40) PLUS ARTIST-LEVEL PRESS.
name REQUIRED · layers (LEAVE OUT press TO SKIP PRESS)
https://everysong.site/api/v2/samples/artist?name=Drake&api_key=YOUR_KEY

CREDITS: /api/v2/credits

WHO WROTE, PRODUCED AND OWNS A SONG.
GET /api/v2/credits/writers
WRITERS, PERFORMERS AND OTHER VERSIONS OF A SONG.
artist + title, OR song_page_id
https://everysong.site/api/v2/credits/writers?artist=Drake&title=Hotline%20Bling&api_key=YOUR_KEY
GET /api/v2/credits/publishing
ONE PUBLISHING WORK: TITLE, ISWC, WRITERS, PUBLISHERS AND SHARES.
work_id REQUIRED (FROM spine/brief → publishing_work.work_id)
https://everysong.site/api/v2/credits/publishing?work_id=HV7V4M&api_key=YOUR_KEY
{
  "work_id": "HV7V4M",
  "title": "HOTLINE BLING",
  "iswc": "T9173399398",
  "writers": [
    {
      "name": "AUBREY DRAKE GRAHAM",
      "role": "ComposerLyricist",
      "pid": "401171"
    },
    "…"
  ],
  "publishers": [
    {
      "name": "EMI LONGITUDE MUSIC CO.",
      "role": "OriginalPublisher",
      "pid": "615691",
      "share_pct": 50
    },
    {
      "name": "UNIVERSAL MUSIC CORP.",
      "role": "OriginalPublisher",
      "pid": "598709",
      "share_pct": 30
    },
    "…"
  ]
}
GET /api/v2/credits/person
EVERY CREDIT FOR ONE PERSON: WRITER, PRODUCER, ENGINEER, PLAYER.
person_id (FROM spine/brief → credits[].person_id) OR name
https://everysong.site/api/v2/credits/person?person_id=1557579&api_key=YOUR_KEY

PRESS: /api/v2/press

MUSIC JOURNALISM: ARTICLES, WRITERS, PUBLICATIONS AND ARCHIVED MAGAZINES. PAGED LISTS RETURN 60 ROWS AND A nextPage.
GET /api/v2/press/song
ARTICLES AND BLOG POSTS ABOUT ONE SONG.
artist + title REQUIRED
https://everysong.site/api/v2/press/song?artist=Drake&title=Hotline%20Bling&api_key=YOUR_KEY
GET /api/v2/press/artist
ARTICLES AND BLOG POSTS NAMING AN ARTIST (MAX 24).
name REQUIRED
https://everysong.site/api/v2/press/artist?name=Drake&api_key=YOUR_KEY
GET /api/v2/press/article
ONE ARTICLE: TITLE, PUBLICATION, WORD COUNT, IMAGE LINK AND URL. ARTICLE TEXT IS NOT SERVED; FOLLOW url TO READ IT.
url REQUIRED (EXACT ARTICLE URL, FROM press/song, press/search OR press/article_urls)
https://everysong.site/api/v2/press/article?url=https%3A%2F%2Fwww.thefader.com%2F2023%2F10%2F06%2Fhow-drakes-remix-run-made-him-inescapable&api_key=YOUR_KEY
GET /api/v2/press/article_urls
PRESS REFS FROM spine/brief TO ARTICLE URLS.
refs REQUIRED, COMMA-SEPARATED (FROM spine/brief → presence.press[].ref, MAX 1000)
https://everysong.site/api/v2/press/article_urls?refs=9347,9528&api_key=YOUR_KEY
GET /api/v2/press/search
ARTICLE SEARCH, NEWEST FIRST.
q REQUIRED · offset (60 PER PAGE)
https://everysong.site/api/v2/press/search?q=hotline%20bling&api_key=YOUR_KEY
{
  "results": [
    {
      "title": "Dave Grohl and Greg Kurstin Cover Drake’s “Hotline Bling”: Watch",
      "pub": "Consequence",
      "url": "https://consequence.net/2020/12/dave-grohl-and-greg-kurstin-drake-hotline-bling-watch/",
      "published": "2020-12-12",
      "writer": "Alex Young"
    },
    "…"
  ]
}
GET /api/v2/press/latest
NEWEST ARTICLES.
offset (60 PER PAGE)
https://everysong.site/api/v2/press/latest?api_key=YOUR_KEY
GET /api/v2/press/in_publication
SEARCH INSIDE ONE PUBLICATION, BLOG OR WRITER.
id REQUIRED (pub:NAME, blog:NAME OR wr:ID, FROM graph/category_search) · q REQUIRED
https://everysong.site/api/v2/press/in_publication?id=pub:The%20Fader&q=hotline%20bling&api_key=YOUR_KEY
GET /api/v2/press/writers
MUSIC WRITERS WITH ARTICLE AND PUBLICATION COUNTS.
q NAME
https://everysong.site/api/v2/press/writers?q=sasha&api_key=YOUR_KEY
GET /api/v2/press/writer
ONE WRITER'S ARTICLES, NEWEST FIRST.
id REQUIRED (FROM press/writers) · page · pub ONE PUBLICATION · q TITLE SEARCH
https://everysong.site/api/v2/press/writer?id=44&api_key=YOUR_KEY
GET /api/v2/press/publications
PUBLICATIONS WITH ARTICLE AND WRITER COUNTS.
NO PARAMETERS
https://everysong.site/api/v2/press/publications?api_key=YOUR_KEY
GET /api/v2/press/publication
ONE PUBLICATION'S ARTICLES, NEWEST FIRST.
name REQUIRED (FROM press/publications) · page · writer · q TITLE SEARCH
https://everysong.site/api/v2/press/publication?name=The%20Fader&api_key=YOUR_KEY
GET /api/v2/press/archive
ARCHIVED MAGAZINE AND NEWSPAPER ARTICLES BY TITLE OR AUTHOR, NEWEST FIRST, WITH ARCHIVE LINKS. EVERY MATCH UNLESS limit IS SET.
q REQUIRED · type magazine (DEFAULT) | newspaper · limit
https://everysong.site/api/v2/press/archive?q=drake&api_key=YOUR_KEY

MIXTAPES: /api/v2/mixtapes

MIXTAPES: 475K TAPES, ALL SEARCHABLE BY TITLE OR ARTIST WITH mixtapes/search. COVERS AND TRACKLISTS WHERE THEY EXIST.
GET /api/v2/mixtapes/search
MIXTAPE SEARCH BY TITLE OR ARTIST, MOST-DOWNLOADED FIRST.
q REQUIRED · page · hascover=1 ONLY TAPES WITH A COVER
https://everysong.site/api/v2/mixtapes/search?q=so%20far%20gone&api_key=YOUR_KEY
GET /api/v2/mixtapes/browse
RANDOM OR SORTED MIXTAPE GRID. NOT THE WHOLE CATALOG: BY DEFAULT IT COVERS THE 1,873 FULL ARCHIVED TAPES (TEXT IDS, 4+ TRACKS). dp=1 ADDS ABOUT 116.6K TAPES THAT HAVE A COVER (NUMERIC IDS), FOR ABOUT 118.5K IN ALL. total IN THE RESPONSE GIVES THE CURRENT COUNT. THE REST OF THE 475K ARE REACHED THROUGH mixtapes/search.
limit MAX 100 (DEFAULT 24) · sort downloads | date (OMIT FOR RANDOM) · dir asc | desc · offset · hascover=1 · dp=1 ALSO INCLUDE TAPES WITH COVERS (NUMERIC IDS)
https://everysong.site/api/v2/mixtapes/browse?limit=20&api_key=YOUR_KEY
GET /api/v2/mixtapes/tape
ONE MIXTAPE AND ITS TRACKLIST. NUMERIC IDS ARE ARCHIVED TAPES: THE FIRST CALL CAN TAKE ~20 S, AND THE TIMEOUT FOR THEM IS 30 S.
id REQUIRED (FROM mixtapes/search OR mixtapes/browse)
https://everysong.site/api/v2/mixtapes/tape?id=SoFarGoneMixtapeManic&api_key=YOUR_KEY
{
  "tape": {
    "id": "SoFarGoneMixtapeManic",
    "title": "So Far Gone",
    "creator": "Drake",
    "downloads": 5741
  },
  "archive_url": "https://archive.org/details/SoFarGoneMixtapeManic",
  "tracks": [
    {
      "title": "01 Lust For Life",
      "size": 3593723
    },
    {
      "title": "02 Houstatlantavegas",
      "size": 5790513
    },
    "…"
  ]
}

BLOGS: /api/v2/blogs

MUSIC BLOGS AND WHAT THEY POSTED. PAGED FEEDS RETURN 40 ROWS AND A nextPage.
GET /api/v2/blogs/list
EVERY INDEXED BLOG.
q NAME FILTER
https://everysong.site/api/v2/blogs/list?api_key=YOUR_KEY
GET /api/v2/blogs/posts
ONE BLOG'S POSTS.
id REQUIRED (FROM blogs/list) · page · q FILTER
https://everysong.site/api/v2/blogs/posts?id=nahright&api_key=YOUR_KEY
GET /api/v2/blogs/trending
TRACKS BLOGS ARE POSTING NOW, OR A TRACK SEARCH.
q SEARCH (OMIT FOR TRENDING) · mode now (DEFAULT) | lastweek · count MAX 40
https://everysong.site/api/v2/blogs/trending?q=drake&api_key=YOUR_KEY
GET /api/v2/blogs/curators
BLOGS THAT CURATE TRACKS, WITH POST AND FOLLOWER COUNTS.
q NAME FILTER
https://everysong.site/api/v2/blogs/curators?api_key=YOUR_KEY
GET /api/v2/blogs/curator
ONE CURATOR'S POSTS.
id REQUIRED (FROM blogs/curators) · page
https://everysong.site/api/v2/blogs/curator?id=1&api_key=YOUR_KEY
GET /api/v2/blogs/genres
GENRE TAGS.
q FILTER
https://everysong.site/api/v2/blogs/genres?api_key=YOUR_KEY
GET /api/v2/blogs/genre
ONE GENRE'S FEED.
tag REQUIRED (FROM blogs/genres) · page
https://everysong.site/api/v2/blogs/genre?tag=electronic&api_key=YOUR_KEY

RADIO: /api/v2/radio

RADIO SHOWS AND LIVE RECORDINGS.
GET /api/v2/radio/search
EPISODE AND TRACK SEARCH ACROSS ARCHIVED RADIO SHOWS.
q REQUIRED · limit MAX 40 (DEFAULT 24)
https://everysong.site/api/v2/radio/search?q=drake&limit=10&api_key=YOUR_KEY
GET /api/v2/radio/concerts
ARCHIVED CONCERT RECORDINGS BY YEAR OR TEXT, 60 PER PAGE.
year · q · kind live (DEFAULT) | studio · page
https://everysong.site/api/v2/radio/concerts?year=1977&api_key=YOUR_KEY
GET /api/v2/radio/concert_years
CONCERT COUNTS BY YEAR.
kind live (DEFAULT) | studio
https://everysong.site/api/v2/radio/concert_years?api_key=YOUR_KEY
GET /api/v2/radio/concert
ONE CONCERT: SETLIST, VENUE AND A LINK TO THE RECORDING'S PAGE.
id REQUIRED (FROM radio/concerts)
https://everysong.site/api/v2/radio/concert?id=gd77-02-17.sbd.outtakes.16745.sbeok.shnf&api_key=YOUR_KEY

INDEPENDENT: /api/v2/independent

INDEPENDENT RELEASES, SEARCHED LIVE. LINKS POINT TO WHERE THE MUSIC LIVES; STREAM LINKS EXPIRE, SO FETCH THEM FRESH.
GET /api/v2/independent/search
ALBUMS, TRACKS AND ARTISTS FROM INDEPENDENT STORES (src=store, DEFAULT) OR ARTIST UPLOADS (src=uploads).
q REQUIRED · src store | uploads · FOR uploads: type track (DEFAULT) | artist | album · offset
https://everysong.site/api/v2/independent/search?q=hotline%20bling&api_key=YOUR_KEY
GET /api/v2/independent/album
ONE STORE ALBUM'S TRACKLIST.
url REQUIRED (AN ALBUM URL FROM independent/search WITH src=store)
https://everysong.site/api/v2/independent/album?url=https%3A%2F%2Fpeculate.bandcamp.com%2Falbum%2Fhotline-bling&api_key=YOUR_KEY
GET /api/v2/independent/track
A FRESH STREAM LINK FOR ONE STORE TRACK.
url REQUIRED (A TRACK OR ALBUM URL FROM independent/search)
https://everysong.site/api/v2/independent/track?url=https%3A%2F%2Fpeculate.bandcamp.com%2Falbum%2Fhotline-bling&api_key=YOUR_KEY
GET /api/v2/independent/stream
A FRESH, SHORT-LIVED MP3 LINK FOR ONE UPLOADED TRACK. MANY TRACKS ONLY OFFER A 30-SECOND PREVIEW (duration: 30000). stream: null WHEN THE TRACK HAS NO STREAMABLE MP3 VERSION. CALLED WITH url, THE RESPONSE ALSO HAS art, url AND duration; WITH id IT HAS title, artist AND stream.
ONE OF: url (A TRACK URL FROM independent/search WITH src=uploads) · transcode (THE transcode VALUE FROM THE SAME SEARCH RESULT; FASTEST, RETURNS ONLY {stream}) · id (THE NUMERIC TRACK id FROM THE SEARCH RESULT)
https://everysong.site/api/v2/independent/stream?id=276666617&api_key=YOUR_KEY
{
  "title": "YOU'RE THE ONE (feat. Syd)",
  "artist": "\"KKAAYYTTRRAA\"",
  "stream": "https://…"
}

ART: /api/v2/art

COVER ART AND ARTIST IMAGES.
GET /api/v2/art/covers
COVER ART, YEAR, LABEL AND ALBUM FOR UP TO 120 SONGS IN ONE CALL.
items REQUIRED: ARTIST~~TITLE|ARTIST~~TITLE
https://everysong.site/api/v2/art/covers?items=Drake~~Hotline%20Bling|Rihanna~~Work&api_key=YOUR_KEY
GET /api/v2/art/album
ONE ALBUM'S TRACKS.
album_id REQUIRED (FROM spine/track → album.id)
https://everysong.site/api/v2/art/album?album_id=40GMAhriYJRO1rsY4YdrZb&api_key=YOUR_KEY
GET /api/v2/art/artist
ARTIST IMAGES IN THREE SIZES, GENRES AND FOLLOWERS.
name REQUIRED
https://everysong.site/api/v2/art/artist?name=Drake&api_key=YOUR_KEY