Repository navigation
Songs and Search
Paginated song list with rich filtering. All params are optional.
| Param | Type | Description |
|---|---|---|
page |
number | Page number (default: 1) |
page_size |
number | Results per page (default: 20) |
category |
string |
released, unreleased, unsurfaced, recording_session
|
era |
string | Era abbreviation e.g. "GB&GR", "DRFL", "WOD", "OUT", "POST" — use name from /eras/ |
search |
string | Search names, artists, track titles (normalizes special chars — "dont" matches "don't") |
searchall |
string | Search names, artists, producers, track titles |
lyrics |
string | Full-text search within lyrics content |
all |
string | "true" returns the entire catalogue in one response as a plain array — no pagination envelope, and page/page_size are ignored. It's ~2,500 songs, so use it for whole-dataset work (calendars, grouping, offline seeding), not for lists a user scrolls. |
file_names_array |
string | "true" to return file_names as array instead of string |
versions |
string | "true" to add version_title and a versions array to each song. Collection endpoint only — /songs/{id}/ ignores it. |
Response shape:
{
"count": 1234,
"next": "https://juicewrldapi.com/juicewrld/songs/?page=2",
"previous": null,
"results": [ /* Song objects */ ]
}With ?all=true — bare array, no envelope:
[ /* every Song object */ ]Note there is no ordering/sort param, and category/era each accept only one value per request — sorting, and any multi-category or multi-era view, has to be assembled client-side.
Returns a full song object by internal ID (song.id, not public_id).
{
"categories": [
{ "value": "released", "label": "Released" },
{ "value": "unreleased", "label": "Unreleased" },
{ "value": "unsurfaced", "label": "Unsurfaced" },
{ "value": "recording_session", "label": "Recording Session" }
]
}Paginated — same envelope as /songs/. 34 eras total. Era names use short abbreviation strings.
{
"count": 34,
"next": "https://juicewrldapi.com/juicewrld/eras/?page=2",
"previous": null,
"results": [
{ "id": 101, "name": "jute", "description": "JUICED UP THE EP era (~2014-February 2017)", "time_frame": "(January 2014-February 2017)", "play_count": 2980 },
{ "id": 103, "name": "afflictions", "description": "Affliction era (February 2017-May 2017)", "time_frame": "(February 2017-May 2017)", "play_count": 1398 },
{ "id": 105, "name": "jw 999", "description": "Juice WRLD 999 era (May 2017-May 2018)", "time_frame": "(May 2017-May 2018)", "play_count": 1389 },
{ "id": 108, "name": "GB&GR", "description": "Goodbye & Good Riddance era", "time_frame": "(December 2017-May 2018)", "play_count": 15485 },
{ "id": 109, "name": "WOD", "description": "WRLD On Drugs era", "time_frame": "(August 2018-December 2018)", "play_count": 11228 },
{ "id": 110, "name": "DRFL", "description": "Death Race For Love era", "time_frame": "(May 2018-March 2019)", "play_count": 11040 },
{ "id": 111, "name": "OUT", "description": "Outsiders era", "time_frame": "(March 2019-December 2019)", "play_count": 13729 },
{ "id": 112, "name": "POST", "description": "Posthumous era", "time_frame": "(December 2019-Present)", "play_count": 3660 }
// ... 34 total
]
}Pass name as the era filter param on /songs/ — e.g. era=GB%26GR.
GET /eras/{id}/ returns a single era object with the same fields.
A separate, lighter object from credited_artists on the song shape: a proper Artist record with an id and bio.
GET /artists/
Returns a plain array of Artist objects, no pagination envelope.
[
{ "id": 1, "name": "Juice WRLD", "bio": "..." }
]GET /artists/{id}/
Single Artist object by id.
Album metadata, distinct from the album string on the song shape. Each album links back to its Artist.
GET /albums/
Returns a plain array of Album objects, no pagination envelope.
[
{
"id": 1,
"title": "Goodbye & Good Riddance",
"type": "album",
"artist": { "id": 1, "name": "Juice WRLD", "bio": "..." },
"release_date": "2018-05-23",
"description": "...",
"play_count": 0
}
]artist_id can also show up on write payloads; the read shape nests the full artist object instead.
GET /albums/{id}/
Single Album object by id.
{
"total_songs": 2452,
"category_stats": {
"released": 320,
"unreleased": 1462,
"unsurfaced": 269,
"recording_session": 401
},
"era_stats": {
"GB&GR": 574,
"OUT": 312,
"POST": 369,
"WOD": 488,
"DRFL": 326,
"Mainstream": 63,
"jute": 37
// ... one key per era
}
}Era keys in era_stats match the name field from /eras/.
Returns a random playable song with full metadata and stream path.
{
"id": "Compilation/1. Released Discography/.../song.mp3",
"title": "Song Title",
"path": "Compilation/1. Released Discography/.../song.mp3",
"size": 5195736,
"modified": "2025-10-18T19:19:53.784271",
"hash": "d199a85e510b32b9ef3c02a29044a41d",
"song": { /* Full song object */ }
}