Skip to content

List one page of a series' chapters from a source

GET
/api/v1/me/extensions/{extensionId}/chapters
curl --request GET \
--url 'http://localhost:8080/api/v1/me/extensions/example/chapters?seriesId=example&order=asc&offset=0&limit=100&refresh=false' \
--header 'Authorization: Bearer <token>'

Sites often list a chapter once per group that released it, so the server groups releases by chapter number and answers one item per chapter, with every release of it and one picked: the release from the user’s preferred group for the series (see setRemoteReleaseGroup), else an official one, else the newest. Releases without a plain number, such as extras, are chapters of their own, and 12.5 is never folded into 12.

Positions count releases, not chapters, since that’s what sources page by. A page holds up to limit chapters from offset, counted from the first chapter (asc, reading order) or the newest (desc); ask for the next page at nextOffset, which is null at the end. A page may hold fewer than limit chapters before the end, so don’t infer the end from its size. total counts releases; chapterCount counts chapters when the server has read the whole list, and is null when the extension pages the list itself.

An extension that pages chapters itself is asked for just the releases a page needs. Otherwise the server reads the whole list from the source on the first request and keeps it for ten minutes, so later pages, either order, are answered without asking the source again; refresh reads it from the source again. Answers may be cached by the client for ten minutes (Cache-Control).

extensionId
required
string

The extension’s reverse-DNS id.

seriesId
required
string

The source’s own series id.

order
string
default: asc
Allowed values: asc desc
offset
integer
0

The release position to start at: 0, or a nextOffset from an earlier page in the same order.

after
string

A release id; the page starts just past the chapter that release belongs to, in the chosen order, instead of at offset, and offset in the answer says where. Not found when the series has no such release.

language
string
>= 1 characters <= 35 characters

A BCP 47 tag. Only releases in this language, or a narrower or wider form of it (en takes en-US), are listed, along with releases whose language the source doesn’t give. Chapters with no such release are left out.

limit
integer
default: 100 >= 1 <= 500
refresh
boolean

Read the list from the source again rather than the kept copy.

One page of chapters, where it starts and where the next one does.

Media typeapplication/json
object
items
required
Array

A chapter: the fields of its picked release, and all its releases with the picked one first.

object
id
required

The source’s own id for this release; open it with listRemotePages.

string
title
required
string
number
required

The chapter or volume number as the source writes it.

string | null
version
required

Changes when the release’s pages change. A content revision only; who released it is releaseGroup.

string | null
published
required

An RFC 3339 date or date-time.

string | null
language
required

The BCP 47 tag of the language the release is written in, or null when the source doesn’t say.

string | null
releaseGroup
required

Who released it, such as a scanlation group or a publisher.

string | null
official
required

Whether the series’ publisher released it.

boolean
releases
required
Array<object>
>= 1 items
object
id
required

The source’s own id for this release; open it with listRemotePages.

string
title
required
string
number
required

The chapter or volume number as the source writes it.

string | null
version
required

Changes when the release’s pages change. A content revision only; who released it is releaseGroup.

string | null
published
required

An RFC 3339 date or date-time.

string | null
language
required

The BCP 47 tag of the language the release is written in, or null when the source doesn’t say.

string | null
releaseGroup
required

Who released it, such as a scanlation group or a publisher.

string | null
official
required

Whether the series’ publisher released it.

boolean
offset
required

The release position the page starts at.

integer
nextOffset
required

The offset of the next page, or null at the end.

integer | null
total
required

How many releases the series has.

integer
chapterCount
required

How many chapters the series has in the requested language, or null when the extension pages its list and the server hasn’t read all of it.

integer | null
preferredGroup
required

The user’s preferred release group for this series.

string | null

Example generated

{
"items": [
{
"id": "example",
"title": "example",
"number": "example",
"version": "example",
"published": "example",
"language": "example",
"releaseGroup": "example",
"official": true,
"releases": [
{
"id": "example",
"title": "example",
"number": "example",
"version": "example",
"published": "example",
"language": "example",
"releaseGroup": "example",
"official": true
}
]
}
],
"offset": 1,
"nextOffset": 1,
"total": 1,
"chapterCount": 1,
"preferredGroup": "example"
}

The request was malformed.

Media typeapplication/json
object
code
required
string
Allowed values: bad_request unauthorized forbidden not_found unavailable scan_in_progress content_changed already_set_up name_taken last_admin progress_conflict too_many_attempts not_linked identity_taken last_sign_in provider_unavailable too_many_sign_ins repository_exists repository_not_allowed repository_unreadable repository_needs_token repository_needs_password repository_needs_credentials repository_credentials_refused extension_invalid source_failed source_unavailable source_check_failed internal
message
required

Explains the problem to a developer.

string

Example

{
"code": "bad_request"
}

The request has no valid session token.

Media typeapplication/json
object
code
required
string
Allowed values: bad_request unauthorized forbidden not_found unavailable scan_in_progress content_changed already_set_up name_taken last_admin progress_conflict too_many_attempts not_linked identity_taken last_sign_in provider_unavailable too_many_sign_ins repository_exists repository_not_allowed repository_unreadable repository_needs_token repository_needs_password repository_needs_credentials repository_credentials_refused extension_invalid source_failed source_unavailable source_check_failed internal
message
required

Explains the problem to a developer.

string

Example

{
"code": "bad_request"
}

The signed-in user may not do this. demo_account when the user is a shared demo account, named in CHEK_DEMO_USERS, which can’t change its password, sessions, sign-in providers, extensions or annotations.

Media typeapplication/json
object
code
required
string
Allowed values: bad_request unauthorized forbidden not_found unavailable scan_in_progress content_changed already_set_up name_taken last_admin progress_conflict too_many_attempts not_linked identity_taken last_sign_in provider_unavailable too_many_sign_ins repository_exists repository_not_allowed repository_unreadable repository_needs_token repository_needs_password repository_needs_credentials repository_credentials_refused extension_invalid source_failed source_unavailable source_check_failed internal
message
required

Explains the problem to a developer.

string

Example

{
"code": "bad_request"
}

The resource does not exist.

Media typeapplication/json
object
code
required
string
Allowed values: bad_request unauthorized forbidden not_found unavailable scan_in_progress content_changed already_set_up name_taken last_admin progress_conflict too_many_attempts not_linked identity_taken last_sign_in provider_unavailable too_many_sign_ins repository_exists repository_not_allowed repository_unreadable repository_needs_token repository_needs_password repository_needs_credentials repository_credentials_refused extension_invalid source_failed source_unavailable source_check_failed internal
message
required

Explains the problem to a developer.

string

Example

{
"code": "bad_request"
}

The server failed; details are in its log.

Media typeapplication/json
object
code
required
string
Allowed values: bad_request unauthorized forbidden not_found unavailable scan_in_progress content_changed already_set_up name_taken last_admin progress_conflict too_many_attempts not_linked identity_taken last_sign_in provider_unavailable too_many_sign_ins repository_exists repository_not_allowed repository_unreadable repository_needs_token repository_needs_password repository_needs_credentials repository_credentials_refused extension_invalid source_failed source_unavailable source_check_failed internal
message
required

Explains the problem to a developer.

string

Example

{
"code": "bad_request"
}

The extension reported an error, went over a limit, or the image couldn’t be fetched.

Media typeapplication/json
object
code
required
string
Allowed values: bad_request unauthorized forbidden not_found unavailable scan_in_progress content_changed already_set_up name_taken last_admin progress_conflict too_many_attempts not_linked identity_taken last_sign_in provider_unavailable too_many_sign_ins repository_exists repository_not_allowed repository_unreadable repository_needs_token repository_needs_password repository_needs_credentials repository_credentials_refused extension_invalid source_failed source_unavailable source_check_failed internal
message
required

Explains the problem to a developer.

string

Example

{
"code": "bad_request"
}