The map, your genres on it, and your average colour.
Scope: read (since v0.120). The canvas is 1500 × 22,648 — fifteen times taller than
wide — so a client must compress the y axis in the coordinates, not
with preserveAspectRatio, which would squash the circles into ellipses
too.
colour is blended in linear light, not sRGB; mixing gamma-encoded
values drags every user toward the same brown-grey.
Responses
OK.
application/json
Everything on the map, and where your listening sits on it.
map object required width number · double required height number · double required points array required [name, x, y, colour] per genre — positional to keep ~6,300 rows small.
option 1 string option 2 number mine array required Your genres that have a place on the map.
name string required plays integer · int64 required x number · double required y number · double required color string required colour string | null Play-weighted average colour of mine, blended in linear light — what
your listening sounds like.
placed_tags integer required unplaced_plays integer · int64 required Plays on tags with no place on the map — instruments, nationalities, roles.
listens_with_genres integer · int64 required So a half-backfilled history says so rather than looking like a small life.
listens_total integer · int64 required No valid session cookie or token. Also returned when a token is presented to a session-only endpoint — the endpoint does not accept tokens at all, so the scope is irrelevant.
application/json
Every error body in the API has this shape.
code integer · int32 required Mirrors the HTTP status.
error string required Human-readable. Not a stable identifier — do not branch on it.
{
"code": 401,
"error": "Authentication required. Log in to access this endpoint."
}The map has not been fetched yet. Run the scrape in Settings.
application/json
Every error body in the API has this shape.
code integer · int32 required Mirrors the HTTP status.
error string required Human-readable. Not a stable identifier — do not branch on it.