Skip to main content

SeriesListPage

codexSyncedAtinteger,null<int64>nullable

Timestamp of the last successful Codex sweep, or null/absent when not admin or no sweep has succeeded. The UI suppresses all Codex badges while this is absent so a pre-first-sync admin doesn't see false "not owned" states. Admin-only.

items object[]required
  • Array [
  • canonicalTitlestringrequired
    codex object
    oneOf
    null
    coverUrlstring | nullnullable
    descriptionstring | nullnullable

    Short synopsis. The list UI clamps this to a few lines; the detail page shows it in full.

    firstSeenAtinteger<int64>required
    genresstring[]required
    highestChapternumber,null<double>nullable

    Highest chapter number seen across linked releases. Pairs with [Self::total_chapters] for the ch available/total card badge.

    highestVolumenumber,null<double>nullable

    Highest volume number seen across this series' linked releases (what is realistically available), as opposed to [Self::total_volumes] (the published total). Drives the vol available/total card badge and the highest_volume sort. None until a numbered release links.

    idinteger<int32>required
    kindstring | nullnullable
    lastReleaseAtinteger<int64>required
    metadataSourcestringrequired

    Provenance of the row's metadata (offline_cache, api, or manual). The browse UI flags manual series so they read differently from provider-backed ones (no cover/metadata is expected).

    ownedbooleanrequired

    Whether the operator owns this series on Codex. Derived from the presence of [Self::codex], so it is only ever true for admins.

    publishedEndDatestring | nullnullable
    publishedStartDatestring | nullnullable

    Official publication start/end dates from provider metadata, ISO YYYY-MM-DD (nullable). publishedStartDate backs the "Publication date" sort; distinct from [Self::last_release_at] (last discovered release).

    ratingnumber,null<double>nullable

    Provider rating on a 0-10 scale; surfaced on the list view so a future sort-by-rating has a number to display.

    releaseCountinteger<int64>required

    Number of releases currently linked to this series. Surfaced as a badge in the feed so manual re-links that orphan a series (zero releases) are visible at a glance. Matches what GET /releases?seriesId=… returns.

    statusstring | nullnullable
    tagsstring[]required
    totalChaptersinteger,null<int32>nullable

    Published total chapter count from provider metadata; pair to [Self::total_volumes] for sort-by-chapter results.

    totalVolumesinteger,null<int32>nullable

    Published total volume count from provider metadata; surfaced on the list view so sort-by-volume results have a number to display.

    wishlistedbooleanrequired

    Whether the series is on the operator's wishlist. Admin-only: always false for non-admin requests (the curation list never reaches the public read tier), exactly like [Self::owned].

    wishlistedAtinteger,null<int64>nullable

    Epoch seconds the series was clipped to the wishlist, or null when not wishlisted / not admin. Drives the wishlist view's "recently clipped" sort.

    yearinteger,null<int32>nullable
  • ]
  • pageinteger<int32>required

    Possible values: >= 0

    pageSizeinteger<int32>required

    Possible values: >= 0

    totalinteger<int64>required

    Possible values: >= 0

    SeriesListPage
    {
    "codexSyncedAt": 0,
    "items": [
    {
    "canonicalTitle": "string",
    "codex": "null",
    "coverUrl": "string",
    "description": "string",
    "firstSeenAt": 0,
    "genres": [
    "string"
    ],
    "highestChapter": 0,
    "highestVolume": 0,
    "id": 0,
    "kind": "string",
    "lastReleaseAt": 0,
    "metadataSource": "string",
    "owned": true,
    "publishedEndDate": "string",
    "publishedStartDate": "string",
    "rating": 0,
    "releaseCount": 0,
    "status": "string",
    "tags": [
    "string"
    ],
    "totalChapters": 0,
    "totalVolumes": 0,
    "wishlisted": true,
    "wishlistedAt": 0,
    "year": 0
    }
    ],
    "page": 0,
    "pageSize": 0,
    "total": 0
    }