Rankd for Developers
Checking API…

Users

A user’s reviews

GET/v1/users/{userId}/reviews
No API keyRate-limitedPaginated

Their public reviews, newest first.

Parameters#

Path parameters#

NameTypeDescription
userIdrequiredstringA Rankd user id: usr_ then 26 characters. Get one from Look up a user by username.
Pattern: ^usr_[0-9A-Z]{26}$ · Example: usr_01KY0JGXMWTT8H9WFN9RTM5JP9

Query parameters#

NameTypeDescription
limitinteger
default 30
How many items to return. Default 30, at most 100. Larger values are capped at 100; anything that is not a positive whole number gives the default.
cursorstringThe meta.nextCursor of the previous page. Leave it out for the first page. Cursors are opaque: pass them back unchanged.

Try it#

Sends a real request to the production API through this site. No credentials are used, so you see exactly what anyone would.

Request#

curl "https://api.rankdmusic.app/v1/users/usr_01KY0JGXMWTT8H9WFN9RTM5JP9/reviews"

Response#

A successful response is { "data": …, "meta": … }. data is an array of Review objects, and meta is a PageMeta.

FieldTypeDescription
idalwaysstringThe review’s id.
userIdstringWho wrote it.
usernamealwaysstringTheir username.
musicMusicRef
bodyalwaysstringThe review.
containsSpoilersbooleanThe author marked it as containing spoilers.
ratingValueinteger or nullThe rating given with it, 0–100.
visibilitystringAlways public without credentials.
createdAtstring (date-time) or nullWhen it was written.
updatedAtstring (date-time) or nullWhen it last changed.

meta (PageMeta)#

FieldTypeDescription
apiVersionalwaysintegerThe API version that answered.
migrationPhaseintegerInternal to Rankd. Ignore it.
sourceOfTruthstringInternal to Rankd. Ignore it.
nextCursorstring or nullPass this as cursor to get the next page. null or missing on the last page.

Responses#

200A page of reviews.

Captured from production: GET /v1/users/usr_01KY0JGXMWTT8H9WFN9RTM5JP9/reviews?limit=2

200 response
{
  "data": [
    {
      "id": "2ea78192-78b7-49c9-80d0-893d247e4787",
      "userId": "usr_01KY0JGXMWTT8H9WFN9RTM5JP9",
      "username": "kyle",
      "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",
        "albumId": "1590368448",
        "albumTitle": "Red (Taylor’s Version) [+ A Message from Taylor]"
      },
      "body": "amazing 🤩",
      "containsSpoilers": false,
      "ratingValue": 100,
      "visibility": "public",
      "createdAt": "2026-09-29T17:48:53.928Z",
      "updatedAt": "2026-09-29T17:48:53.928Z"
    },
    {
      "id": "5e8e7447-a3d0-4cd0-86a3-f5849df4a9f7",
      "userId": "usr_01KY0JGXMWTT8H9WFN9RTM5JP9",
      "username": "kyle",
      "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",
        "albumId": null,
        "albumTitle": null
      },
      "body": "Unreal song",
      "containsSpoilers": false,
      "ratingValue": 100,
      "visibility": "public",
      "createdAt": "2026-09-12T09:43:23.142Z",
      "updatedAt": "2026-09-28T17:27:40.767Z"
    }
  ],
  "meta": {
    "apiVersion": 1,
    "migrationPhase": 3,
    "sourceOfTruth": "per_account",
    "nextCursor": "MTc4OTIwNjIwMzE0Mnw1ZThlNzQ0Ny1hM2QwLTRjZDAtODZhMy1mNTg0OWRmNGE5Zjc"
  }
}
404No such user, or they are not discoverable.

Captured from production: GET /v1/users/by-username/no_such_person_zz

404 response
{
  "error": {
    "code": "not_found",
    "message": "User not found."
  }
}
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"
}
↑ ↓ to move↵ to open/ or ⌘K to search