User preferences.
Session-only.
Responses
OK.
application/json
Free-form. The keys below are the ones the server reads; any other key is the web UI's own and is stored verbatim.
Takes further properties besides these, and keeps them as sent.
timezone string An IANA region, e.g. Europe/Berlin — never a fixed abbreviation like CET. Decides "today", the heatmap and every calendar bucket. UTC when unset.
week_start integer First day of the week, 0 = Sunday … 6 = Saturday. Monday (1) when unset.
scrobble_threshold_percent number When a listen counts: this share of the track, 5–100. Read the clamped value from GET /api/v1/scrobble-settings.
scrobble_threshold_secs integer …or this many seconds, whichever comes first, 10–3600.
rating_scale string The scale rating_love_threshold is written on. Set by POST /api/v1/ratings/apply.
rating_love_threshold number The media-server rating at or above which a track counts as loved, on rating_scale.
rating_love_starred boolean Whether a starred (favourited) item counts as loved whatever its rating. True when unset.
theme string light, dark or system. The web UI's.
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."
}