← API reference

Rediscovery

Five lists, all built from your own history.

2 of 2 · v0.120.0
GET /api/v1/rediscovery #
Token reador Session

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.

integer · int64
limit query

Rows per list. 12 by default, at most 50.

integer · int64

Responses

200

OK.

application/json

object

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
each item
object

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.

each item
object

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
each item
object

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}.

each item
object
id integer · int64 required
name string required
type string required
401

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

object

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."
}
GET /api/v1/rediscovery/gear/{id} #
Token reador Session

Favourites never heard on a piece of gear.

Scope: read (since v0.120). Answered by joining chain_id to the chains whose components reference the gear — no per-listen equipment field needed. Restricted to tracks played more than once: the interesting question is how your favourites sound on it.

Parameters

id path required

One of your pieces of gear.

integer · int64
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.

integer · int64
limit query

Rows per list. 12 by default, at most 50.

integer · int64

Responses

200

OK.

application/json

object

Favourites a piece of gear has never played.

rows array required
each item
object

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
401

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

object

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."
}
404

No such resource, or it belongs to another user.

application/json

object

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.