Discovery
Discover
GET/v1/discover
No API keyRate-limited
Trending albums, recent public reviews, recent public lists and active members, in one request.
Try it#
Sends a real request to the production API through this site. No credentials are used, so you see exactly what anyone would.
Response
Request#
curl "https://api.rankdmusic.app/v1/discover"const response = await fetch('https://api.rankdmusic.app/v1/discover');
const body = await response.json();
if (!response.ok) {
const code = typeof body.error === 'string' ? body.error : body.error.code;
throw new Error(`Rankd API ${response.status}: ${code}`);
}
const { data, meta } = body;import Foundation
let url = URL(string: "https://api.rankdmusic.app/v1/discover")!
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
throw URLError(.badServerResponse)
}
let body = try JSONSerialization.jsonObject(with: data) as? [String: Any]
let result = body?["data"]import requests
response = requests.get("https://api.rankdmusic.app/v1/discover", timeout=10)
body = response.json()
if not response.ok:
error = body["error"]
raise RuntimeError(error if isinstance(error, str) else error["code"])
data = body["data"]Response#
A successful response is { "data": …, "meta": … }. data is a Discover, and meta is a Meta.
| Field | Type | Description |
|---|---|---|
| trendingAlbums | array of object | |
| music | MusicRef | |
| artworkTemplate | string or null | Artwork with {w}x{h}. |
| ratingCount | integer | Ratings. |
| averageRating | number or null | Average, 0–100. |
| recentReviews | array of ReviewCard | |
| recentLists | array of object | |
| id | string | List id. |
| ownerUsername | string | Owner. |
| ownerDisplayName | string or null | Owner’s display name. |
| title | string | Title. |
| description | string or null | Description. |
| emoji | string or null | Emoji. May be empty. |
| entryCount | integer | Entries. |
| updatedAt | string (date-time) or null | Last changed. |
| activeMembers | array of object | |
| id | string | User id. |
| username | string | Username. |
| displayName | string or null | Display name. |
| avatarUrl | string or null | Profile picture. |
| foundingMember | object or null | |
| number | integer | Founding Member number. |
| ratingCount | integer | Ratings. |
Responses#
200The Discover page.
Captured from production: GET /v1/discover
200 response
{
"data": {
"trendingAlbums": [
{
"music": {
"provider": "apple_music",
"type": "album",
"id": "697194953",
"title": "Discovery",
"artistName": "Daft Punk",
"artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/fd/4a/77/fd4a77db-0ebc-d043-41a2-f32fa1bb0fb4/dj.qrikkdwj.jpg/600x600bb.jpg"
},
"artworkTemplate": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/fd/4a/77/fd4a77db-0ebc-d043-41a2-f32fa1bb0fb4/dj.qrikkdwj.jpg/{w}x{h}bb.jpg",
"ratingCount": 4,
"averageRating": 98
},
{
"music": {
"provider": "apple_music",
"type": "album",
"id": "1889992111",
"title": "you seem pretty sad for a girl so in love",
"artistName": "Olivia Rodrigo",
"artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/1d/1b/f9/1d1bf9b1-44c6-9a6c-6ffb-c158488c06ce/26UMGIM39303.rgb.jpg/600x600bb.jpg"
},
"artworkTemplate": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/1d/1b/f9/1d1bf9b1-44c6-9a6c-6ffb-c158488c06ce/26UMGIM39303.rgb.jpg/{w}x{h}bb.jpg",
"ratingCount": 4,
"averageRating": 92
}
],
"recentReviews": [
{
"id": "2ea78192-78b7-49c9-80d0-893d247e4787",
"username": "kyle",
"displayName": "kyle",
"avatarUrl": "https://api.rankdmusic.app/v1/assets/ast_9E07Q6Q598DXKRQBN0NDSCQYA4",
"music": {
"provider": "apple_music",
"type": "song",
"id": "1590368894",
"title": "All Too Well (10 Minute Version) [Taylor's Version] [From The Vault]",
"artistName": "Taylor Swift",
"artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/15/38/9b/15389bf4-8074-06c3-11ee-655b5453af68/21UM1IM25046.rgb.jpg/600x600bb.jpg"
},
"artworkTemplate": "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/15/38/9b/15389bf4-8074-06c3-11ee-655b5453af68/21UM1IM25046.rgb.jpg/{w}x{h}bb.jpg",
"body": "amazing 🤩",
"containsSpoilers": false,
"ratingValue": 100,
"createdAt": "2026-09-29T17:48:53.928Z"
},
{
"id": "5e8e7447-a3d0-4cd0-86a3-f5849df4a9f7",
"username": "kyle",
"displayName": "kyle",
"avatarUrl": "https://api.rankdmusic.app/v1/assets/ast_9E07Q6Q598DXKRQBN0NDSCQYA4",
"music": {
"provider": "apple_music",
"type": "song",
"id": "570216128",
"title": "Real Gone Kid",
"artistName": "Deacon Blue",
"artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/Music/v4/2b/ec/6c/2bec6ca0-fee4-d425-d4cf-b6b3d786b0f2/886443693197.jpg/600x600bb.jpg"
},
"artworkTemplate": "https://is1-ssl.mzstatic.com/image/thumb/Music/v4/2b/ec/6c/2bec6ca0-fee4-d425-d4cf-b6b3d786b0f2/886443693197.jpg/{w}x{h}bb.jpg",
"body": "Unreal song",
"containsSpoilers": false,
"ratingValue": 100,
"createdAt": "2026-09-12T09:43:23.142Z"
}
],
"recentLists": [
{
"id": "9c56fe92-4ac1-463d-af4b-bbadfd11e5eb",
"ownerUsername": "kyle",
"ownerDisplayName": "kyle",
"title": "Songs I don’t rate",
"description": "",
"emoji": "",
"entryCount": 0,
"updatedAt": "2026-09-29T20:36:57.231Z"
},
{
"id": "1082404f-6402-437b-a137-89b585754d74",
"ownerUsername": "kyle",
"ownerDisplayName": "kyle",
"title": "My 5★ Albums",
"description": "",
"emoji": "🌟",
"entryCount": 14,
"updatedAt": "2026-09-29T13:15:54.311Z"
}
],
"activeMembers": [
{
"id": "usr_01KY0JGXMWTT8H9WFN9RTM5JP9",
"username": "kyle",
"displayName": "kyle",
"avatarUrl": "https://api.rankdmusic.app/v1/assets/ast_9E07Q6Q598DXKRQBN0NDSCQYA4",
"foundingMember": {
"number": 2
},
"ratingCount": 725
}
]
},
"meta": {
"apiVersion": 1,
"migrationPhase": 3,
"sourceOfTruth": "per_account"
}
}429Too many requests this minute. Wait Retry-After seconds, then try again.
Headers: Retry-After Seconds to wait. Always 60.
429 response
{
"error": "rate limited"
}