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
| Parameter | Meaning |
|---|---|
media_type | manga or anime; omit for both. |
status | Optional integer from 1 through 5; see the table below. |
limit | Page size, 1–100; defaults to 50. |
cursor | Use 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
| Status | Manga status_name | Anime status_name |
|---|---|---|
| 1 | reading | watching |
| 2 | completed | completed |
| 3 | on_hold | on_hold |
| 4 | dropped | dropped |
| 5 | plan_to_read | plan_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.
/me/libraryAuthorization
ComickOAuth library:readRegister 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
Omit for both media types.
Value in
- "manga"
- "anime"
Follow status: 1 reading/watching, 2 completed, 3 on hold, 4 dropped, 5 plan to read/watch.
1 <= value <= 5Maximum number of titles in a page.
1 <= value <= 10050Opaque 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}