Skip to content

Rename book series

PATCH
/api/v1/book-series/{id}
curl --request PATCH \
--url https://example.com/api/v1/book-series/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Content-Type: application/json' \
--cookie kivo_session=<kivo_session> \
--data '{ "name": "example" }'

Renaming to the name of another series merges the two: the books move to that series, keeping their positions, and this answers with it. Each book’s series are locked, so a rescan keeps the change.

id
required

A UUIDv7.

string format: uuid
Media typeapplication/json
object
name
required
string
>= 1 characters <= 500 characters

Example generated

{
"name": "example"
}

The series the books are now in.

Media typeapplication/json
object
id
required

A UUIDv7.

string format: uuid
name
required
string
items
required

Books, by position, those with none last, then by title.

Array<object>

The work’s summary, with its artwork; absent for a work the admin may not see.

object
id
required

A UUIDv7.

string format: uuid
kind
required

What a work is: video an item of a videos library and book an item of an audiobooks library. Skip kinds you don’t know.

string
Allowed values: movie series season episode extra video book
title
required
string
year
integer
durationMs

The default version’s duration.

integer
communityRating

TMDb’s community rating of a movie, series or episode: the average of its users’ votes, 0 to 10. Absent when it has no votes.

number format: double
<= 10
communityVotes

How many votes communityRating averages.

integer
>= 1
contentRating

The content rating for the server’s content rating country, such as PG-13 or TV-MA; absent when unrated. On the detail page, a season or episode without one has its series’.

string
addedAt
string format: date-time
matchState
required

Whether a work is identified: identifying is provisional, its first identification pending, and unmatched provisional with no confident match. Provisional items are playable.

string
Allowed values: matched identifying unmatched
available
required

False when every version’s folder is unreachable.

boolean
images
required
object
poster

Fetch with GET /api/v1/images/{id}?width=….

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
backdrop

Fetch with GET /api/v1/images/{id}?width=….

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
still

An episode’s or video’s frame, for landscape cards.

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
logo

Fetch with GET /api/v1/images/{id}?width=….

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
userState

The user’s state for a work. For a series or season, played means every episode is.

object
played
required
boolean
favorite
required
boolean
playCount
required
integer
positionMs

The resume position, when in progress.

integer
versionId

The version last played, which positionMs is on; it may be gone. Resume continues its edition, and a version of another edition starts from the beginning.

string format: uuid
lastPlayedAt
string format: date-time
movie
object
edition

The label the movie’s folder’s edition tag gives it, such as Final Cut. Shown after the title wherever it appears.

string
series
object
seasonCount

Detail only.

integer
unplayedCount
required

Unplayed episodes.

integer
recentlyAddedCount

In Recently Added, the episodes this summary bundles.

integer
lastAirYear
integer
ordering

Detail only. Documented values aired, dvd, absolute, or group:<provider episode group ID>.

string
nextUp

Detail only. The episode the primary button plays.

object
id
required

A UUIDv7.

string format: uuid
kind
required

What a work is: video an item of a videos library and book an item of an audiobooks library. Skip kinds you don’t know.

string
Allowed values: movie series season episode extra video book
title
required
string
year
integer
durationMs

The default version’s duration.

integer
communityRating

TMDb’s community rating of a movie, series or episode: the average of its users’ votes, 0 to 10. Absent when it has no votes.

number format: double
<= 10
communityVotes

How many votes communityRating averages.

integer
>= 1
contentRating

The content rating for the server’s content rating country, such as PG-13 or TV-MA; absent when unrated. On the detail page, a season or episode without one has its series’.

string
addedAt
string format: date-time
matchState
required

Whether a work is identified: identifying is provisional, its first identification pending, and unmatched provisional with no confident match. Provisional items are playable.

string
Allowed values: matched identifying unmatched
available
required

False when every version’s folder is unreachable.

boolean
images
required
object
poster

Fetch with GET /api/v1/images/{id}?width=….

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
backdrop

Fetch with GET /api/v1/images/{id}?width=….

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
still

An episode’s or video’s frame, for landscape cards.

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
logo

Fetch with GET /api/v1/images/{id}?width=….

object
id
required

A UUIDv7.

string format: uuid
blurhash
string
width

The largest stored width.

integer
height
integer
userState

The user’s state for a work. For a series or season, played means every episode is.

object
played
required
boolean
favorite
required
boolean
playCount
required
integer
positionMs

The resume position, when in progress.

integer
versionId

The version last played, which positionMs is on; it may be gone. Resume continues its edition, and a version of another edition starts from the beginning.

string format: uuid
lastPlayedAt
string format: date-time
movie
object
edition

The label the movie’s folder’s edition tag gives it, such as Final Cut. Shown after the title wherever it appears.

string
series
object recursive
season
object
number
required

0 is Specials.

integer
seriesId
required

A UUIDv7.

string format: uuid
seriesTitle
required
string
episodeCount

How many episodes the season lists. Set in its series’ season list and on its detail.

integer
unplayedCount
required
integer
episode
object
seasonNumber
required

0 is Specials.

integer
number
required
integer
endNumber

The last episode a multi-episode file covers (E1 to E2).

integer
airDate
string format: date
seriesId
required

A UUIDv7.

string format: uuid
seriesTitle
required
string
seasonId

A UUIDv7.

string format: uuid
previousId

Detail only. The previous episode in the series’ order, across seasons, with specials last. Absent for the first.

string format: uuid
nextId

Detail only. The next episode in the series’ order, across seasons, with specials last. Absent for the last.

string format: uuid
overview

A season’s episode list only. The episode’s synopsis, absent when it has none.

string
extra
object
type
required

What an extra is.

string
Allowed values: trailer featurette behindTheScenes deletedScene interview scene short other
parentId

The movie, series or season it belongs to.

string format: uuid
book
object
authors
required

In credit order; the first is the primary author.

Array<object>
object
id
required

A UUIDv7.

string format: uuid
name
required
string
narrators
required
Array<object>
object
id
required

A UUIDv7.

string format: uuid
name
required
string
series
required

The series the book is in, the primary first.

Array<object>
object
id
required

A UUIDv7.

string format: uuid
name
required
string
position

The book’s position as written, such as 1, 1.5 or 1-3; absent for none.

string
primary
required
boolean
subtitle

Detail only.

string
publisher

Detail only.

string
language

Detail only, as its source gives it.

string
abridged

Detail only; absent when unknown.

boolean
releaseDate

Detail only. YYYY, YYYY-MM or YYYY-MM-DD.

string
libraryId

The library this work is in. Absent when the user doesn’t see it.

string format: uuid
path

In the unmatched list only: the folder a series or book was parsed from, else the file, as found in its library. Absent when it has no file there.

string
season
object
number
required

0 is Specials.

integer
seriesId
required

A UUIDv7.

string format: uuid
seriesTitle
required
string
episodeCount

How many episodes the season lists. Set in its series’ season list and on its detail.

integer
unplayedCount
required
integer
episode
object
seasonNumber
required

0 is Specials.

integer
number
required
integer
endNumber

The last episode a multi-episode file covers (E1 to E2).

integer
airDate
string format: date
seriesId
required

A UUIDv7.

string format: uuid
seriesTitle
required
string
seasonId

A UUIDv7.

string format: uuid
previousId

Detail only. The previous episode in the series’ order, across seasons, with specials last. Absent for the first.

string format: uuid
nextId

Detail only. The next episode in the series’ order, across seasons, with specials last. Absent for the last.

string format: uuid
overview

A season’s episode list only. The episode’s synopsis, absent when it has none.

string
extra
object
type
required

What an extra is.

string
Allowed values: trailer featurette behindTheScenes deletedScene interview scene short other
parentId

The movie, series or season it belongs to.

string format: uuid
book
object
authors
required

In credit order; the first is the primary author.

Array<object>
object
id
required

A UUIDv7.

string format: uuid
name
required
string
narrators
required
Array<object>
object
id
required

A UUIDv7.

string format: uuid
name
required
string
series
required

The series the book is in, the primary first.

Array<object>
object
id
required

A UUIDv7.

string format: uuid
name
required
string
position

The book’s position as written, such as 1, 1.5 or 1-3; absent for none.

string
primary
required
boolean
subtitle

Detail only.

string
publisher

Detail only.

string
language

Detail only, as its source gives it.

string
abridged

Detail only; absent when unknown.

boolean
releaseDate

Detail only. YYYY, YYYY-MM or YYYY-MM-DD.

string
libraryId

The library this work is in. Absent when the user doesn’t see it.

string format: uuid
path

In the unmatched list only: the folder a series or book was parsed from, else the file, as found in its library. Absent when it has no file there.

string

Example

{
"items": [
{
"kind": "movie",
"matchState": "matched",
"series": {
"nextUp": {
"kind": "movie",
"matchState": "matched",
"extra": {
"type": "trailer"
}
}
},
"extra": {
"type": "trailer"
}
}
]
}

The request is malformed or a field is invalid (code invalidRequest).

Media typeapplication/problem+json

An RFC 9457 problem document. code is stable and is what clients translate.

object
type
required

A URI naming the problem type; about:blank when only code matters.

string
title
required

A short English summary, for logs.

string
status
required
integer
detail

English detail for logs and developers; never internal error text.

string
instance
string
code
required

A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.

string
Allowed values: invalidRequest unauthenticated invalidCredentials wrongPassword forbidden crossOrigin denied notFound expired notReady rangeNotSatisfiable conflict alreadySetUp nameTaken lastAdmin ownUser fileStillPresent kindMismatch notStoppable streamLimit notPlayable noFallback playEnded throttled rateLimited providerUnavailable notConfigured quotaUsed transcodeBusy transcodeFailed internal
requestId
required

The request ID, also in the X-Request-Id header and the server log.

string
reason

For transcodeBusy and notPlayable, why. For transcodeBusy: transcodeLimit or storageFull. For notPlayable: noTracks, fileUnplayable, subtitleUnplayable, transcodeFailed, keyframeIndexMissing or downloadsNotAllowed.

string
Allowed values: noTracks fileUnplayable subtitleUnplayable keyframeIndexMissing transcodeFailed transcodeLimit storageFull downloadsNotAllowed sourceUnreadable subtitlesUnavailable planUnreadable
mismatch

For fileUnplayable, the capability the file failed.

object
field
required
string
declared

The declared value, lists joined by commas; absent when the client declared none.

string
actual
required
string
retryAfterSeconds

For throttled and rateLimited, the Retry-After header’s value.

integer
errors

For invalidRequest, what’s wrong with which field.

Array<object>
object
field
required

A JSON pointer into the body, or a parameter name.

string
code
required

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.

string
Allowed values: required invalid tooShort tooLong tooLarge unsupported outOfRange unknownEpisodeGroup notABook
plays

For streamLimit, the user’s plays, to show what is playing where.

Array<object>

One of the user’s plays, for the stream limit.

object
id
required

A UUIDv7.

string format: uuid
workId
required

A UUIDv7.

string format: uuid
title
required
string
clientName

The name of the session or API key it was started by.

string
startedAt
required
string format: date-time
message

For playEnded, the admin’s words to the viewer, when they gave any.

string
resetsAt

For quotaUsed, when the quota resets, when the provider said.

string format: date-time

Example

{
"code": "invalidRequest",
"reason": "noTracks",
"errors": [
{
"code": "required"
}
]
}

No valid session or API key (code unauthenticated), or a failed sign-in (code invalidCredentials).

Media typeapplication/problem+json

An RFC 9457 problem document. code is stable and is what clients translate.

object
type
required

A URI naming the problem type; about:blank when only code matters.

string
title
required

A short English summary, for logs.

string
status
required
integer
detail

English detail for logs and developers; never internal error text.

string
instance
string
code
required

A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.

string
Allowed values: invalidRequest unauthenticated invalidCredentials wrongPassword forbidden crossOrigin denied notFound expired notReady rangeNotSatisfiable conflict alreadySetUp nameTaken lastAdmin ownUser fileStillPresent kindMismatch notStoppable streamLimit notPlayable noFallback playEnded throttled rateLimited providerUnavailable notConfigured quotaUsed transcodeBusy transcodeFailed internal
requestId
required

The request ID, also in the X-Request-Id header and the server log.

string
reason

For transcodeBusy and notPlayable, why. For transcodeBusy: transcodeLimit or storageFull. For notPlayable: noTracks, fileUnplayable, subtitleUnplayable, transcodeFailed, keyframeIndexMissing or downloadsNotAllowed.

string
Allowed values: noTracks fileUnplayable subtitleUnplayable keyframeIndexMissing transcodeFailed transcodeLimit storageFull downloadsNotAllowed sourceUnreadable subtitlesUnavailable planUnreadable
mismatch

For fileUnplayable, the capability the file failed.

object
field
required
string
declared

The declared value, lists joined by commas; absent when the client declared none.

string
actual
required
string
retryAfterSeconds

For throttled and rateLimited, the Retry-After header’s value.

integer
errors

For invalidRequest, what’s wrong with which field.

Array<object>
object
field
required

A JSON pointer into the body, or a parameter name.

string
code
required

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.

string
Allowed values: required invalid tooShort tooLong tooLarge unsupported outOfRange unknownEpisodeGroup notABook
plays

For streamLimit, the user’s plays, to show what is playing where.

Array<object>

One of the user’s plays, for the stream limit.

object
id
required

A UUIDv7.

string format: uuid
workId
required

A UUIDv7.

string format: uuid
title
required
string
clientName

The name of the session or API key it was started by.

string
startedAt
required
string format: date-time
message

For playEnded, the admin’s words to the viewer, when they gave any.

string
resetsAt

For quotaUsed, when the quota resets, when the provider said.

string format: date-time

Example

{
"code": "invalidRequest",
"reason": "noTracks",
"errors": [
{
"code": "required"
}
]
}

Signed in, but this needs an admin (code forbidden); a same-origin request (code crossOrigin); or a device code that was denied (code denied).

Media typeapplication/problem+json

An RFC 9457 problem document. code is stable and is what clients translate.

object
type
required

A URI naming the problem type; about:blank when only code matters.

string
title
required

A short English summary, for logs.

string
status
required
integer
detail

English detail for logs and developers; never internal error text.

string
instance
string
code
required

A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.

string
Allowed values: invalidRequest unauthenticated invalidCredentials wrongPassword forbidden crossOrigin denied notFound expired notReady rangeNotSatisfiable conflict alreadySetUp nameTaken lastAdmin ownUser fileStillPresent kindMismatch notStoppable streamLimit notPlayable noFallback playEnded throttled rateLimited providerUnavailable notConfigured quotaUsed transcodeBusy transcodeFailed internal
requestId
required

The request ID, also in the X-Request-Id header and the server log.

string
reason

For transcodeBusy and notPlayable, why. For transcodeBusy: transcodeLimit or storageFull. For notPlayable: noTracks, fileUnplayable, subtitleUnplayable, transcodeFailed, keyframeIndexMissing or downloadsNotAllowed.

string
Allowed values: noTracks fileUnplayable subtitleUnplayable keyframeIndexMissing transcodeFailed transcodeLimit storageFull downloadsNotAllowed sourceUnreadable subtitlesUnavailable planUnreadable
mismatch

For fileUnplayable, the capability the file failed.

object
field
required
string
declared

The declared value, lists joined by commas; absent when the client declared none.

string
actual
required
string
retryAfterSeconds

For throttled and rateLimited, the Retry-After header’s value.

integer
errors

For invalidRequest, what’s wrong with which field.

Array<object>
object
field
required

A JSON pointer into the body, or a parameter name.

string
code
required

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.

string
Allowed values: required invalid tooShort tooLong tooLarge unsupported outOfRange unknownEpisodeGroup notABook
plays

For streamLimit, the user’s plays, to show what is playing where.

Array<object>

One of the user’s plays, for the stream limit.

object
id
required

A UUIDv7.

string format: uuid
workId
required

A UUIDv7.

string format: uuid
title
required
string
clientName

The name of the session or API key it was started by.

string
startedAt
required
string format: date-time
message

For playEnded, the admin’s words to the viewer, when they gave any.

string
resetsAt

For quotaUsed, when the quota resets, when the provider said.

string format: date-time

Example

{
"code": "invalidRequest",
"reason": "noTracks",
"errors": [
{
"code": "required"
}
]
}

No such resource, or the caller may not see it (code notFound).

Media typeapplication/problem+json

An RFC 9457 problem document. code is stable and is what clients translate.

object
type
required

A URI naming the problem type; about:blank when only code matters.

string
title
required

A short English summary, for logs.

string
status
required
integer
detail

English detail for logs and developers; never internal error text.

string
instance
string
code
required

A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.

string
Allowed values: invalidRequest unauthenticated invalidCredentials wrongPassword forbidden crossOrigin denied notFound expired notReady rangeNotSatisfiable conflict alreadySetUp nameTaken lastAdmin ownUser fileStillPresent kindMismatch notStoppable streamLimit notPlayable noFallback playEnded throttled rateLimited providerUnavailable notConfigured quotaUsed transcodeBusy transcodeFailed internal
requestId
required

The request ID, also in the X-Request-Id header and the server log.

string
reason

For transcodeBusy and notPlayable, why. For transcodeBusy: transcodeLimit or storageFull. For notPlayable: noTracks, fileUnplayable, subtitleUnplayable, transcodeFailed, keyframeIndexMissing or downloadsNotAllowed.

string
Allowed values: noTracks fileUnplayable subtitleUnplayable keyframeIndexMissing transcodeFailed transcodeLimit storageFull downloadsNotAllowed sourceUnreadable subtitlesUnavailable planUnreadable
mismatch

For fileUnplayable, the capability the file failed.

object
field
required
string
declared

The declared value, lists joined by commas; absent when the client declared none.

string
actual
required
string
retryAfterSeconds

For throttled and rateLimited, the Retry-After header’s value.

integer
errors

For invalidRequest, what’s wrong with which field.

Array<object>
object
field
required

A JSON pointer into the body, or a parameter name.

string
code
required

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.

string
Allowed values: required invalid tooShort tooLong tooLarge unsupported outOfRange unknownEpisodeGroup notABook
plays

For streamLimit, the user’s plays, to show what is playing where.

Array<object>

One of the user’s plays, for the stream limit.

object
id
required

A UUIDv7.

string format: uuid
workId
required

A UUIDv7.

string format: uuid
title
required
string
clientName

The name of the session or API key it was started by.

string
startedAt
required
string format: date-time
message

For playEnded, the admin’s words to the viewer, when they gave any.

string
resetsAt

For quotaUsed, when the quota resets, when the provider said.

string format: date-time

Example

{
"code": "invalidRequest",
"reason": "noTracks",
"errors": [
{
"code": "required"
}
]
}

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

Media typeapplication/problem+json

An RFC 9457 problem document. code is stable and is what clients translate.

object
type
required

A URI naming the problem type; about:blank when only code matters.

string
title
required

A short English summary, for logs.

string
status
required
integer
detail

English detail for logs and developers; never internal error text.

string
instance
string
code
required

A problem’s stable code, which clients translate. A client that doesn’t know a code goes by the response’s status.

string
Allowed values: invalidRequest unauthenticated invalidCredentials wrongPassword forbidden crossOrigin denied notFound expired notReady rangeNotSatisfiable conflict alreadySetUp nameTaken lastAdmin ownUser fileStillPresent kindMismatch notStoppable streamLimit notPlayable noFallback playEnded throttled rateLimited providerUnavailable notConfigured quotaUsed transcodeBusy transcodeFailed internal
requestId
required

The request ID, also in the X-Request-Id header and the server log.

string
reason

For transcodeBusy and notPlayable, why. For transcodeBusy: transcodeLimit or storageFull. For notPlayable: noTracks, fileUnplayable, subtitleUnplayable, transcodeFailed, keyframeIndexMissing or downloadsNotAllowed.

string
Allowed values: noTracks fileUnplayable subtitleUnplayable keyframeIndexMissing transcodeFailed transcodeLimit storageFull downloadsNotAllowed sourceUnreadable subtitlesUnavailable planUnreadable
mismatch

For fileUnplayable, the capability the file failed.

object
field
required
string
declared

The declared value, lists joined by commas; absent when the client declared none.

string
actual
required
string
retryAfterSeconds

For throttled and rateLimited, the Retry-After header’s value.

integer
errors

For invalidRequest, what’s wrong with which field.

Array<object>
object
field
required

A JSON pointer into the body, or a parameter name.

string
code
required

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.

string
Allowed values: required invalid tooShort tooLong tooLarge unsupported outOfRange unknownEpisodeGroup notABook
plays

For streamLimit, the user’s plays, to show what is playing where.

Array<object>

One of the user’s plays, for the stream limit.

object
id
required

A UUIDv7.

string format: uuid
workId
required

A UUIDv7.

string format: uuid
title
required
string
clientName

The name of the session or API key it was started by.

string
startedAt
required
string format: date-time
message

For playEnded, the admin’s words to the viewer, when they gave any.

string
resetsAt

For quotaUsed, when the quota resets, when the provider said.

string format: date-time

Example

{
"code": "invalidRequest",
"reason": "noTracks",
"errors": [
{
"code": "required"
}
]
}