Comick Developers
Comick Developers
Catalog APIMy appsBack to ComickBuild with Comick

Getting started

Register your appApp review

API reference

OAuth referenceRefresh and disconnectLibrary APIErrors and limits

Library API

Read followed manga and anime, status, and saved progress with cursor pagination.

Read the current user's library

curl 'https://api.comick.dev/integrations/v1/me/library?limit=50' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'

Requires library:read. The access token selects the user; there is no user-ID parameter. Extra query parameters are rejected. Every response is private and non-cacheable.

Filters and pagination

ParameterMeaning
media_typemanga or anime; omit for both.
statusOptional integer from 1 through 5; see the table below.
limitPage size, 1–100; defaults to 50.
cursorUse the previous response's next_cursor unchanged. Omit on the first request.

Keep the same filters while paging. next_cursor: null means there are no more pages. Cursors are opaque, encrypted strings tied to the authorized user and filters. Pass them unchanged; numeric, modified, or mismatched cursors return 400. This is a live collection, not a point-in-time snapshot; changes while paging can affect results.

const endpoint = "https://api.comick.dev/integrations/v1/me/library"
let cursor: string | null = null
do {
  const url = new URL(endpoint)
  url.searchParams.set("limit", "100")
  // Optionally set media_type and status here, unchanged across pages.
  if (cursor) url.searchParams.set("cursor", cursor)
  const response = await fetch(url, {
    credentials: "omit",
    cache: "no-store",
    headers: { Authorization: `Bearer ${accessToken}` },
  })
  if (!response.ok)
    throw new Error(`Library request failed: ${response.status}`)
  const page = await response.json()
  for (const title of page.data) {
    // Synchronize by title.hid, not title or slug.
  }
  cursor = page.next_cursor
} while (cursor !== null)

Status meanings

StatusManga status_nameAnime status_name
1readingwatching
2completedcompleted
3on_holdon_hold
4droppeddropped
5plan_to_readplan_to_watch

Progress and timestamps

hid is the title's stable, opaque public identifier. Store it as a string for synchronization. Internal numeric manga/anime IDs are not exposed by this API. Titles and slugs can change.

Use the returned HID when fetching catalog details: GET https://api.comick.dev/v1.0/comic/{hid}?media_type=manga (or media_type=anime). Use the exact HID; do not convert it to a number or construct identifiers by incrementing numbers.

progress describes the saved chapter or episode, not the next unread entry. It is null when unknown or when its entry is no longer valid.

progress.number and progress.volume are nullable strings; preserve values such as "12.5", "0", or nonnumeric labels without converting them to integers. progress.hid is that chapter or episode's public HID, distinct from the title's HID. Chapter and episode numbers describe progress; they are not lookup identifiers.

followed_at and updated_at describe the follow record; progressed_at is the saved reading/watching timestamp and can be null. Timestamps use ISO 8601 UTC when present. A missing progress object does not imply zero chapters or episodes read.

Deleted titles are omitted. Email, notes, ratings, custom lists, novel follows, and write operations are outside this permission.

Response example

{
  "data": [
    {
      "hid": "aB7kP2xQ",
      "title": "Example Anime",
      "slug": "example-anime",
      "media_type": "anime",
      "status": 1,
      "status_name": "watching",
      "progress": {
        "unit": "episode",
        "hid": "rT4mN8vW",
        "number": "3",
        "volume": null
      },
      "followed_at": "2026-10-01T00:00:00.000Z",
      "updated_at": "2026-10-01T00:00:00.000Z",
      "progressed_at": "2026-10-01T00:00:00.000Z"
    }
  ],
  "next_cursor": null
}

Request and response schema

Download the OpenAPI document for API tools and generated clients. The reference below describes requests and schemas; run requests from your application or terminal.

GET/me/library

Authorization

ComickOAuth library:read
AuthorizationBearer <token>

Register at /developers/apps. Authorization Code with S256 PKCE is mandatory for every client. Confidential clients authenticate with client_secret_basic; public clients send client_id without a secret. Include resource=https://api.comick.dev/integrations/v1. Access tokens are opaque and last 900 seconds. Optional offline_access grants rotating refresh tokens valid for 30 days, subject to earlier revocation/session expiry.

In: header

Scope: library:read

Query Parameters

media_type?string

Omit for both media types.

Value in

  • "manga"
  • "anime"
status?integer

Follow status: 1 reading/watching, 2 completed, 3 on hold, 4 dropped, 5 plan to read/watch.

Range1 <= value <= 5
limit?integer

Maximum number of titles in a page.

Range1 <= value <= 100
Default50
cursor?string

Opaque encrypted cursor bound to the authorized user and filters. Pass the previous next_cursor unchanged; omit for the first page. Numeric, modified, or mismatched cursors return 400.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl "https://api.comick.dev/integrations/v1/me/library?limit=50" \  -H "Authorization: Bearer $ACCESS_TOKEN"
{  "data": [    {      "hid": "aB7kP2xQ",      "title": "Example Anime",      "slug": "example-anime",      "media_type": "anime",      "status": 1,      "status_name": "watching",      "progress": {        "unit": "episode",        "hid": "rT4mN8vW",        "number": "3",        "volume": null      },      "followed_at": "2026-10-01T00:00:00.000Z",      "updated_at": "2026-10-01T00:00:00.000Z",      "progressed_at": "2026-10-01T00:00:00.000Z"    }  ],  "next_cursor": null}

Refresh and disconnect

Synchronize over time, rotate tokens safely, and handle revoked connections.

Errors and limits

Diagnose failed authorization, handle rate limits, and reconnect safely.

On this page

Read the current user's libraryFilters and paginationStatus meaningsProgress and timestampsResponse exampleRequest and response schema