Music
Reviews of an album, song or artist
GET/v1/music/{type}/{id}/reviews
No API keyRate-limited
Public reviews of one catalogue item, newest first. Not paginated: it returns up to limit reviews.
Parameters#
Path parameters#
| Name | Type | Description |
|---|---|---|
| typerequired | string | What kind of catalogue item. One of: album, song, artist · Example: song |
| idrequired | string | The Apple Music catalogue id. Pattern: ^[0-9]{1,15}$ · Example: 1590368894 |
Query parameters#
| Name | Type | Description |
|---|---|---|
| limit | integer default 20 | How many items to return. Default 20, at most 50. Larger values are capped at 50; anything that is not a positive whole number gives the default. |
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/music/song/1590368894/reviews"const response = await fetch('https://api.rankdmusic.app/v1/music/song/1590368894/reviews');
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/music/song/1590368894/reviews")!
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/music/song/1590368894/reviews", 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 an array of ReviewCard objects, and meta is a Meta.
| Field | Type | Description |
|---|---|---|
| idalways | string | The review’s id. |
| usernamealways | string | The author. |
| displayName | string or null | The author’s display name. |
| avatarUrl | string or null | The author’s profile picture. |
| music | MusicRef | |
| artworkTemplate | string or null | Artwork with {w}x{h}. |
| bodyalways | string | The review. |
| containsSpoilers | boolean | Marked as containing spoilers. |
| ratingValue | integer or null | The rating given with it, 0–100. |
| createdAt | string (date-time) or null | When it was written. |
Responses#
200Public reviews.
Captured from production: GET /v1/music/song/1590368894/reviews?limit=5
200 response
{
"data": [
{
"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"
}
],
"meta": {
"apiVersion": 1,
"migrationPhase": 3,
"sourceOfTruth": "per_account"
}
}400type or id is not a music reference Rankd understands.
Captured from production: GET /v1/music/album/abc
400 response
{
"error": {
"code": "invalid_music_reference",
"message": "Not a music reference Rankd understands."
}
}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"
}