The Rediscovery lists, all built from your own history.
Scope: read (since v0.120). Nothing here points at music you do not own — that is the
design, not an implementation detail.
"Not lately" is a parameter, not a constant: six months is a long gap for a daily listener and no gap at all otherwise. The seasonal list excludes the current year, or it would just be "recently played".
Parameters
quiet_days query How long is "not lately", in days. Defaults to six months — long enough that a gap is meaningful rather than just a busy fortnight. Clamped to between a week and ten years.
limit query Rows per list. 12 by default, at most 50.
Responses
OK.
application/json
Five lists — seven, now — all built from your own history.
quiet_days integer · int64 required window string required quiet_days in words — "six months".
featured object | null The collection with the most rows, for the hero card. Null when every list is empty.
key string required forgotten, highrated, onelisten, seasonal, latenight,
deepcuts or dusty.
title string required blurb string required Why these rows are together.
accent string required A hex colour.
stat string required The evidence, in words — "Last played 14 months ago".
count integer required rows array required One suggestion on the Rediscovery screen.
Same shape whichever list produced it, so the page renders one row type and the reason lives on the list rather than the item.
name string required artist string required album string | null plays integer · int64 required last_played integer | null · int64 Unix seconds; null when never played (a loved or shelved item).
artwork_url string | null A cover, from one of the listens counted. See caa_id on Listen for
the tombstones.
caa_id integer | null · int64 caa_release_mbid string | null collections array required Every collection, in the page's order, empty ones included.
One collection: rows, and the reason they are together.
key string required forgotten, highrated, onelisten, seasonal, latenight,
deepcuts or dusty.
title string required blurb string required Why these rows are together.
accent string required A hex colour.
stat string required The evidence, in words — "Last played 14 months ago".
count integer required rows array required One suggestion on the Rediscovery screen.
Same shape whichever list produced it, so the page renders one row type and the reason lives on the list rather than the item.
name string required artist string required album string | null plays integer · int64 required last_played integer | null · int64 Unix seconds; null when never played (a loved or shelved item).
artwork_url string | null A cover, from one of the listens counted. See caa_id on Listen for
the tombstones.
caa_id integer | null · int64 caa_release_mbid string | null gear array required Your gear, for the per-gear list at /api/v1/rediscovery/gear/{id}.
id integer · int64 required name string required type string 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."
}