Get a user's custom lists
Returns the custom lists belonging to one user, with pagination.
Beta. The shape may still change; this page is updated when it does.
Viewing your own account returns your private and unlisted lists too, and adds a pinned flag to each one. Viewing someone else’s returns only what they have made visible, and has no pinned field.
Requires a PRO or VIP account
Custom lists is a paid feature. The request must carry an access token belonging to a Simkl PRO or VIP user — there is no anonymous access, because an anonymous caller is treated as a free account.
A free or anonymous caller does not get an error status. The response is HTTP 200 carrying a premium_only body instead of list data:
{
"error": "premium_only",
"message": "Custom list items are available to Simkl PRO and VIP members only.",
"item": {
"title": "Upgrade to Simkl PRO/VIP to unlock this list",
"description": "Subscribe to Simkl PRO or VIP to view this list",
"poster": "https://simkl.in/poster_upgrade.webp"
}
}
Three things to know about it, because each one breaks a naive client:
erroris lowercasepremium_only.- There is no
itemsarray and nopaginationobject. This is a different response shape, not a degraded one, soitemsis undefined rather than empty. itemis singular and renderable — it has a title, a description and a real poster URL, so you can drop it straight into your list view instead of leaving the user with a blank screen.
Check for an error key on a 200 before reading items. A client that branches only on the status code will treat this as a successful list and render the placeholder as though it were real content.
Sorting
sort here is validated against a fixed set, unlike GET /lists/{id}. An unrecognised value is a 400 rather than a silent fallback.
Authorizations
A user access_token, sent as Authorization: Bearer .... Required for endpoints that read or modify the user's library, scrobble session, ratings, settings, or playbacks. Every flow returns the same kind of token. See Set up authentication.
Path Parameters
Numeric Simkl user ID.
Query Parameters
Items per page, 1 to 500. Values outside that range are clamped silently rather than rejected, so asking for 99999 returns 500 and a 200.
A non-numeric value is normally 400 wrong_parameter, but on GET /lists/{id} that is not guaranteed: the edge cache coerces this parameter itself, so on a cache hit a malformed value is silently replaced with the default and answered 200. Validate paging input on your side rather than relying on a 400.
1 <= x <= 5001-based page number, also clamped silently. page times limit cannot exceed 10000, so deep paging is capped -- at the default limit of 50 the last reachable page is 200.
As with limit, a non-numeric value is normally 400 but can be silently defaulted on a cached GET /lists/{id} response.
x >= 1Sort direction. Anything other than asc or desc is a 400.
asc, desc Ordering. Anything outside this set is a 400.
updated, created, name, likes, followers, items, popularity Set to the literal string true to include lists the user follows. 1, yes and on do nothing.
true Set to the literal string true to include lists the user collaborates on. Only meaningful when viewing your own account.
true Response
The user's lists. This route has no PRO or VIP gate -- unlike GET /lists/{id}, an anonymous caller gets the real payload.