The catalog as records, for integrations that mirror or browse it: publishers and imprints, series, issues, editions, releases, creators and characters. Keyset-paged lists with filters and sorts; filter[updatedSince] syncs what changed.
/catalog/charactersCharacters, by name. Their appearances: GET /catalog/issues?filter[character]=<id>.
collector.listCharacters()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by name, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default name.
at most 200 characters
filter[q]stringPart of the name, any case ("panini" finds Editorial Panini).
1–100 characters
filter[publisher]string (uuid)Owned by this publisher.
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of characters.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/characters/{character}By id or slug, with how many issues they appear in.
collector.getCharacter()If-None-MatchX-Request-IdcharacterstringrequiredThe character’s id or slug.
1–200 characters
200OKThe character.
object
issueCountintegerrequiredIssues they appear in: GET /catalog/issues?filter[character]=<id>.
mergedFromstring (uuid) or nullrequired304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
not_found: Nothing at that address.
character_not_found: No character with that id or slug.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/creatorsWriters and artists, by name. Their issues: GET /catalog/issues?filter[creator]=<id>.
collector.listCreators()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by name, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default name.
at most 200 characters
filter[q]stringPart of the name, any case ("panini" finds Editorial Panini).
1–100 characters
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of creators.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/creators/{creator}By id or slug, with how many issues credit them.
collector.getCreator()If-None-MatchX-Request-IdcreatorstringrequiredThe creator’s id or slug.
1–200 characters
200OKThe creator.
object
issueCountintegerrequiredIssues they’re credited on: GET /catalog/issues?filter[creator]=<id>.
mergedFromstring (uuid) or nullrequired304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
not_found: Nothing at that address.
creator_not_found: No creator with that id or slug.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/editionsEditions (printings and covers) of an issue or a release, or by barcode: filter[upc] with filter[upcAddon] names one edition exactly. To identify a book from a scanned barcode, GET /catalog/barcode reads the add-on and ranks candidates.
collector.listEditions()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by createdAt, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default createdAt.
at most 200 characters
filter[issue]string (uuid)Editions of this issue.
filter[release]string (uuid)Editions of this release.
filter[upc]stringThe barcode’s main digits (UPC-A, EAN).
filter[upcAddon]stringThe add-on (with filter[upc]: one exact edition).
filter[isbn]stringA collected edition’s ISBN.
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of editions.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/editions/{id}One edition, with its issue and (abroad, in another language) its release. A merged edition answers the one it was merged into.
collector.getEdition()If-None-MatchX-Request-Ididstring (uuid)required200OKThe edition.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
not_found: Nothing at that address.
edition_not_found: No edition with that id.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/imprintsImprints (a publisher’s labels, e.g. Vertigo at DC), by name. Each names its publisher (parentId).
collector.listImprints()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by name, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default name.
at most 200 characters
filter[publisher]string (uuid)Imprints of this publisher.
filter[country]stringISO 3166-1 alpha-2 country, e.g. US, MX.
filter[q]stringPart of the name, any case ("panini" finds Editorial Panini).
1–100 characters
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of imprints.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/issuesIssues by number (or on-sale date, cover date, last change). Filter by series, publisher, imprint, creator or character, key issues, kind and on-sale dates. One issue’s full record, with its editions, credits and characters: GET /catalog/issues/{id}.
collector.listIssues()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by number, storeDate, coverDate, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default number.
at most 200 characters
filter[series]string (uuid)In this series (its id).
filter[publisher]string (uuid)In this publisher’s series.
filter[imprint]string (uuid)In series under this imprint.
filter[creator]string (uuid)With this creator credited.
filter[character]string (uuid)With this character appearing.
filter[isKey]enumKey issues only (true) or none of them (false).
01truefalsefilter[kind]enumThe kind of issue.
regularannualspecialone_shotgiant_sizeashcanpreviewfree_comic_book_dayunknownfilter[storeDateFrom]string (date)On sale on or after this date.
filter[storeDateTo]string (date)On sale on or before this date.
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of issues.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/publishersPublishers, without their imprints (GET /catalog/imprints lists those), by name.
collector.listPublishers()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by name, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default name.
at most 200 characters
filter[country]stringISO 3166-1 alpha-2 country, e.g. US, MX.
filter[q]stringPart of the name, any case ("panini" finds Editorial Panini).
1–100 characters
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of publishers.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/publishers/{publisher}By id or slug, with its parent (for an imprint) and its imprints. A merged publisher answers the one it was merged into.
collector.getPublisher()If-None-MatchX-Request-IdpublisherstringrequiredThe publisher’s id or slug.
1–200 characters
200OKThe publisher.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
not_found: Nothing at that address.
publisher_not_found: No publisher with that id or slug.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/releasesReleases: an issue published again, usually abroad or in another language, with editions of its own (GET /catalog/editions?filter[release]=). The original release has none here: its editions have no releaseId.
collector.listReleases()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by createdAt, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default createdAt.
at most 200 characters
filter[issue]string (uuid)Releases of this issue.
filter[publisher]string (uuid)Published by this publisher.
filter[country]stringISO 3166-1 alpha-2 country, e.g. US, MX.
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of releases.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/releases/{id}One release, with its editions.
collector.getRelease()If-None-MatchX-Request-Ididstring (uuid)required304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
not_found: Nothing at that address.
release_not_found: No release with that id.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/seriesSeries by title (or start year, or last change), with filters by publisher, imprint, year, kind and title.
collector.listSeries()If-None-MatchX-Request-IdcursorstringThe nextCursor of the previous page. Omit for the first page.
at most 1000 characters
limitintegerItems per page, 1–200 (default 50).
1–200 · default 50
sortstringSort by title, startYear, updatedAt; a leading "-" sorts descending, a comma adds a tiebreak. Default title.
at most 200 characters
filter[publisher]string (uuid)Published by this publisher (its id).
filter[imprint]string (uuid)Under this imprint (its id).
filter[startYear]integerThe year it started.
1800–2200
filter[type]enumThe kind of series.
ongoinglimitedone_shotannualgraphic_noveltrade_paperbackhardcoveromnibusdigitalmagazineotherfilter[q]stringPart of the title, any case.
1–100 characters
filter[updatedSince]string (date-time)Only records changed at or after this time: sync what changed since your last run.
at most 64 characters
200OKA page of series.
object
nextCursorstring or nullrequiredPass as ?cursor= for the next page; null on the last page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
invalid_requestinvalid_cursorinvalid_filterinvalid_sort
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cursor: The cursor isn’t one this list (in this order) gave out.
invalid_filter: A filter[field] the list doesn’t have, or a value it refuses.
invalid_sort: A sort field the list doesn’t have.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).
/catalog/series/{series}By id or slug (a slug it had before also works). Its issues: GET /catalog/issues?filter[series]=<id>. A merged series answers the one it was merged into.
collector.getSeries()If-None-MatchX-Request-IdseriesstringrequiredThe series’s id or slug.
1–200 characters
200OKThe series.
object
mergedFromstring (uuid) or nullrequired304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
not_found: Nothing at that address.
series_not_found: No series with that id or slug.
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).