{"openapi":"3.2.0","info":{"title":"Comick Library API","version":"1.0.0","description":"Read followed manga/anime, status, and saved progress with user authorization. No email, notes, ratings, custom lists, or writes.","contact":{"name":"Comick support","email":"support@comick.dev"}},"servers":[{"url":"https://api.comick.dev/integrations/v1"}],"externalDocs":{"url":"https://comick.dev/docs","description":"Registration, review, and OAuth integration guides"},"paths":{"/me/library":{"get":{"operationId":"getMyLibrary","summary":"Read my library","description":"Requires library:read. The token determines the user; no user_id or other extra query parameters are accepted. Omit media_type for both manga and anime. Keep filters unchanged while following next_cursor; this is a live collection. Limits: 60 requests/minute per app/user, 1,000 per app, and 120 per network address.","security":[{"ComickOAuth":["library:read"]}],"parameters":[{"name":"media_type","in":"query","description":"Omit for both media types.","schema":{"type":"string","enum":["manga","anime"]}},{"name":"status","in":"query","description":"Follow status: 1 reading/watching, 2 completed, 3 on hold, 4 dropped, 5 plan to read/watch.","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"limit","in":"query","description":"Maximum number of titles in a page.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","description":"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.","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of followed manga/anime belonging to the authorizing user.","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryPage"},"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}}}},"400":{"description":"Invalid filters, cursor, or extra query fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, expired, or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope, ineligible app/account, or unregistered browser origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Integrations are unavailable on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Honor Retry-After when accessible.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying, when supplied.","schema":{"type":"string"}}}},"503":{"description":"Temporarily unavailable, including authentication maintenance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying, when supplied.","schema":{"type":"string"}}}}}}}},"components":{"securitySchemes":{"ComickOAuth":{"type":"oauth2","description":"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.","flows":{"authorizationCode":{"authorizationUrl":"https://comick.dev/api/auth/oauth2/authorize","tokenUrl":"https://comick.dev/api/auth/oauth2/token","refreshUrl":"https://comick.dev/api/auth/oauth2/token","scopes":{"library:read":"Read followed manga/anime, progress, and status.","offline_access":"Continue synchronization with rotating refresh tokens."}}}}},"schemas":{"Progress":{"type":"object","additionalProperties":false,"required":["unit","hid","number","volume"],"properties":{"unit":{"type":"string","enum":["chapter","episode"]},"hid":{"type":"string","description":"Opaque public HID of the saved chapter or episode, distinct from the title HID. Internal numeric IDs are not exposed."},"number":{"type":["string","null"],"description":"Preserve decimal and nonnumeric numbering. Unknown is null.","examples":["12.5"]},"volume":{"type":["string","null"],"description":"Saved volume number as a string, or null."}}},"LibraryEntry":{"type":"object","additionalProperties":false,"required":["hid","title","slug","media_type","status","status_name","progress","followed_at","updated_at","progressed_at"],"properties":{"hid":{"type":"string","description":"Stable opaque public HID of the manga or anime. Use this string for synchronization and catalog lookups. Internal numeric IDs are not exposed."},"title":{"type":"string","description":"Current title."},"slug":{"type":"string","description":"Current title slug; may change."},"media_type":{"type":"string","enum":["manga","anime"]},"status":{"type":"integer","description":"1 reading/watching; 2 completed; 3 on hold; 4 dropped; 5 plan to read/watch."},"status_name":{"type":"string","enum":["reading","watching","completed","on_hold","dropped","plan_to_read","plan_to_watch","unknown"]},"progress":{"anyOf":[{"$ref":"#/components/schemas/Progress"},{"type":"null"}],"description":"Saved progress, not the next unread entry. Null when unknown or invalid."},"followed_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"progressed_at":{"type":["string","null"],"format":"date-time"}}},"LibraryPage":{"type":"object","additionalProperties":false,"required":["data","next_cursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LibraryEntry"}},"next_cursor":{"type":["string","null"],"description":"Opaque encrypted cursor for the next page; null when finished. Pass unchanged with the same filters and authorized user."}}},"Error":{"type":"object","description":"Error fields vary between OAuth policy and framework errors; branch on HTTP status, not message text.","properties":{"error":{"type":"string"},"message":{"type":"string"},"error_description":{"type":"string"},"statusCode":{"type":"integer"}}}}}}