Update current user
const url = 'https://example.com/api/v1/users/me';const options = { method: 'PATCH', headers: {cookie: 'kivo_session=<kivo_session>', 'Content-Type': 'application/json'}, body: '{"playback":{"audioLanguage":"example","subtitleLanguage":"example","subtitleMode":"none","rememberTracks":true,"autoplayNext":true,"bookSpeed":1},"libraries":[{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","pinned":true}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://example.com/api/v1/users/me \ --header 'Content-Type: application/json' \ --cookie kivo_session=<kivo_session> \ --data '{ "playback": { "audioLanguage": "example", "subtitleLanguage": "example", "subtitleMode": "none", "rememberTracks": true, "autoplayNext": true, "bookSpeed": 1 }, "libraries": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "pinned": true } ] }'Changes the caller’s preferences.
Every client of the user gets the change: playback applies the
languages, subtitle mode and rememberTracks to the next play, and
libraries orders the library list and Home. A
library the user doesn’t see, or one listed twice, is 400.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Fields as in PlaybackPreferences; an empty language sets it back to its default.
object
When subtitles show: none never; forced a forced track in the
audio’s language; smart full subtitles in the subtitle language when
the audio isn’t in it, else as forced; always full subtitles in
the subtitle language, else as forced.
The libraries the user sees, in the order it wants them, each pinned or not; it replaces the last order. A library left out is pinned after the listed ones, in the order libraries were added, as every library is until the user sets this.
object
A UUIDv7.
Shown in the sidebar and with a Recently Added row on Home.
Responses
Section titled “Responses”The updated user.
The signed-in user, with its limits and playback preferences.
object
A UUIDv7.
object
Simultaneous streams. Absent for no limit.
The most a stream outside the local networks may use. Absent for
no cap of the user’s own, when the server’s remote streaming
limit applies. The signed-in user’s own (GET /api/v1/users/me)
is the limit that applies to them, theirs or the server’s.
How the user’s plays start, when the request doesn’t
choose tracks. An episode starts with the languages last chosen for
its series when rememberTracks is on.
object
The preferred audio language (BCP 47), played when the version has it. Absent for the original language: the version’s default track.
The preferred subtitle language (BCP 47). Absent for the server’s metadata language.
When subtitles show: none never; forced a forced track in the
audio’s language; smart full subtitles in the subtitle language when
the audio isn’t in it, else as forced; always full subtitles in
the subtitle language, else as forced.
Whether an episode starts with the audio and subtitle languages last chosen for its series, and choosing tracks for an episode remembers them. Off, each episode starts from these preferences.
Whether up next plays the next episode by itself, counting down near the end of an episode. Off, up next shows the next episode without counting down, and playback stops at the end.
The speed books play at, which the audio player sets; 1 is normal. Video always plays at normal speed.
Example
{ "playback": { "subtitleMode": "none" }}The request is malformed or a field is invalid (code invalidRequest).
An RFC 9457 problem document. code is stable and is what clients
translate.
object
A URI naming the problem type; about:blank when only code matters.
A short English summary, for logs.
English detail for logs and developers; never internal error text.
A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.
The request ID, also in the X-Request-Id header and the server log.
For transcodeBusy and notPlayable, why. For transcodeBusy:
transcodeLimit or storageFull. For notPlayable: noTracks,
fileUnplayable, subtitleUnplayable, transcodeFailed,
keyframeIndexMissing or downloadsNotAllowed.
For fileUnplayable, the capability the file failed.
object
The declared value, lists joined by commas; absent when the client declared none.
For throttled and rateLimited, the Retry-After header’s value.
For invalidRequest, what’s wrong with which field.
object
A JSON pointer into the body, or a parameter name.
What’s wrong with a field: tooLarge for a file or list over its
size, unsupported for a file in a format the server doesn’t take,
unknownEpisodeGroup for a group:<ID> ordering TMDb doesn’t list
for the series, and notABook for a work edited with books that
isn’t one.
For streamLimit, the user’s plays, to show what is playing where.
One of the user’s plays, for the stream limit.
object
A UUIDv7.
A UUIDv7.
The name of the session or API key it was started by.
For playEnded, the admin’s words to the viewer, when they gave any.
For quotaUsed, when the quota resets, when the provider said.
Example
{ "code": "invalidRequest", "reason": "noTracks", "errors": [ { "code": "required" } ]}No valid session or API key (code unauthenticated), or a failed sign-in (code invalidCredentials).
An RFC 9457 problem document. code is stable and is what clients
translate.
object
A URI naming the problem type; about:blank when only code matters.
A short English summary, for logs.
English detail for logs and developers; never internal error text.
A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.
The request ID, also in the X-Request-Id header and the server log.
For transcodeBusy and notPlayable, why. For transcodeBusy:
transcodeLimit or storageFull. For notPlayable: noTracks,
fileUnplayable, subtitleUnplayable, transcodeFailed,
keyframeIndexMissing or downloadsNotAllowed.
For fileUnplayable, the capability the file failed.
object
The declared value, lists joined by commas; absent when the client declared none.
For throttled and rateLimited, the Retry-After header’s value.
For invalidRequest, what’s wrong with which field.
object
A JSON pointer into the body, or a parameter name.
What’s wrong with a field: tooLarge for a file or list over its
size, unsupported for a file in a format the server doesn’t take,
unknownEpisodeGroup for a group:<ID> ordering TMDb doesn’t list
for the series, and notABook for a work edited with books that
isn’t one.
For streamLimit, the user’s plays, to show what is playing where.
One of the user’s plays, for the stream limit.
object
A UUIDv7.
A UUIDv7.
The name of the session or API key it was started by.
For playEnded, the admin’s words to the viewer, when they gave any.
For quotaUsed, when the quota resets, when the provider said.
Example
{ "code": "invalidRequest", "reason": "noTracks", "errors": [ { "code": "required" } ]}default
Section titled “default”A server-side failure: 500 (code internal, or transcodeFailed
for a play’s media), or 503
for something unavailable (codes providerUnavailable and
transcodeBusy, for now; notConfigured, until an admin configures
it).
An RFC 9457 problem document. code is stable and is what clients
translate.
object
A URI naming the problem type; about:blank when only code matters.
A short English summary, for logs.
English detail for logs and developers; never internal error text.
A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.
The request ID, also in the X-Request-Id header and the server log.
For transcodeBusy and notPlayable, why. For transcodeBusy:
transcodeLimit or storageFull. For notPlayable: noTracks,
fileUnplayable, subtitleUnplayable, transcodeFailed,
keyframeIndexMissing or downloadsNotAllowed.
For fileUnplayable, the capability the file failed.
object
The declared value, lists joined by commas; absent when the client declared none.
For throttled and rateLimited, the Retry-After header’s value.
For invalidRequest, what’s wrong with which field.
object
A JSON pointer into the body, or a parameter name.
What’s wrong with a field: tooLarge for a file or list over its
size, unsupported for a file in a format the server doesn’t take,
unknownEpisodeGroup for a group:<ID> ordering TMDb doesn’t list
for the series, and notABook for a work edited with books that
isn’t one.
For streamLimit, the user’s plays, to show what is playing where.
One of the user’s plays, for the stream limit.
object
A UUIDv7.
A UUIDv7.
The name of the session or API key it was started by.
For playEnded, the admin’s words to the viewer, when they gave any.
For quotaUsed, when the quota resets, when the provider said.
Example
{ "code": "invalidRequest", "reason": "noTracks", "errors": [ { "code": "required" } ]}