Errors
Every error is a problem document (RFC 9457) with a stable code. This page explains the format and lists every code the API answers.
The problem format
Errors are sent as application/problem+json:
{
"type": "https://collection.id/developers/errors#invalid_request",
"title": "Bad Request",
"status": 400,
"detail": "Add the series title as printed on the cover.",
"code": "invalid_request",
"errors": [{ "path": "body.seriesTitle", "message": "Add the series title as printed on the cover." }],
"requestId": "0b4f3b1e-6c1a-4f5e-9f0e-1f2a3b4c5d6e",
"error": {
"code": "invalid_request",
"message": "Add the series title as printed on the cover."
}
}- Program against
code. It’s stable and snake_case;detailis written for people and may change. typelinks the code’s entry on this page.errors[]names each field that failed, asparams.,query.orbody.followed by its path.requestIdis the request’sX-Request-Id: quote it to support.erroris the older shape ({ code, message, details }), kept so existing clients keep working. It’s deprecated in favour ofcodeanddetail.- A
500 internalsays nothing more, on purpose: our logs have the details under its request id.
Every code
120 codes, with their statuses and what they mean. Each operation’s own codes are in the reference.
ai_budget_exhausted402
- The plan’s AI budget for the month is used up.
1 operation answer it
already_added409
- The copy already has this code.
- The scan was already added as a copy.
- The scan was already added.
4 operations answer it
already_admin409
- Admins already work the moderation queues.
1 operation answer it
already_exists409
- Another record has that slug.
1 operation answer it
already_held409
- The book is already held for this collector.
1 operation answer it
already_known409
- The catalog knows this code: change the copy to it instead.
1 operation answer it
already_member409
- The caller is already on the team.
- That email is already on the team.
2 operations answer it
already_processing409
- Another match of this scan is running.
1 operation answer it
already_proposed409
- This code is already waiting for review.
1 operation answer it
already_reported409
- You have an open report about it already.
1 operation answer it
- POST/api/v1/reports
already_resolved409
- Someone already resolved it.
- It was already handled.
2 operations answer it
already_reviewed409
- Someone already reviewed it.
- A moderator has already reviewed it.
already_undone409
- That change was already undone.
1 operation answer it
assistant_not_configured503
- The assistant isn’t set up here.
1 operation answer it
audit_failed500
- The change was made, but writing its audit row failed.
2 operations answer it
auth_update_failed502
- The sign-in service refused the change.
1 operation answer it
batch_not_found404
- No open session of yours with that batchId.
- No session of yours with that id.
2 operations answer it
cannot_undo409
- Only the copy’s latest change can be undone.
1 operation answer it
change_already_made409
- That proposed change was already approved.
1 operation answer it
changed_since409
- The copy changed since; undo the later change first.
1 operation answer it
checksum_failed422
- The digits fail the barcode’s check digit.
1 operation answer it
confirmation_required400
- Type DELETE to confirm.
1 operation answer it
csv_columns422
- The CSV lacks the columns needed (title, number, price…).
1 operation answer it
duplicate409
- You already have a suggestion waiting for this record.
1 operation answer it
edition_mismatch409
- The edition isn’t one of that issue’s.
1 operation answer it
empty_patch409
- Nothing in it can be applied any more.
1 operation answer it
entity_merged409
- The record was merged into another one; edit the one that was kept.
3 operations answer it
entity_not_found409
- The issue is no longer in the catalog.
- The record it’s about no longer exists.
4 operations answer it
export_expired410
- The export isn’t ready, or its files expired.
1 operation answer it
export_not_found404
- No such export of yours.
2 operations answer it
export_part_not_found404
- The export has no such part.
1 operation answer it
export_rate_limited429
- One full export a day (details.nextAt says when the next is possible).
1 operation answer it
feature_required403
- Changing more than one copy needs Pro.
- The plan doesn’t include this (details.feature names it).
forbidden403
- The upload isn’t yours.
- That isn’t yours to change.
- The caller’s side can’t do this (only the store answers a request…).
- Only the store’s owners and admins can do this.
13 operations answer it
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/confirm
- POST/api/v1/holds/{holdId}/respond
- POST/api/v1/questions/{questionId}/hold
- PATCH/api/v1/stores/{storeId}
- GET/api/v1/stores/{storeId}/billing
- DELETE/api/v1/stores/{storeId}/members/{userId}
- PATCH/api/v1/stores/{storeId}/members/{userId}
- GET/api/v1/stores/{storeId}/members/invites
- POST/api/v1/stores/{storeId}/members/invites
- DELETE/api/v1/stores/{storeId}/members/invites/{inviteId}
has_cover409
- It has a cover now; decline this one or remove that cover first.
1 operation answer it
has_holds409
- It has hold history: archive it instead.
1 operation answer it
has_questions409
- Collectors asked about it: archive it instead.
1 operation answer it
idempotency_in_progress409
- The first request with this key is still running.
32 operations answer it
- POST/api/v1/admin/announcements
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/merges
- POST/api/v1/admin/plans
- POST/api/v1/catalog/corrections
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- POST/api/v1/catalog/variant-proposals
- POST/api/v1/collection/items/{id}/changes/{changeId}/undo
- POST/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/bulk
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/cancel
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- POST/api/v1/insights/alerts
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/hold
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/batches
- POST/api/v1/scans/bulk
- POST/api/v1/stores
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/listings
- POST/api/v1/stores/{storeId}/listings/bulk
- POST/api/v1/stores/{storeId}/members/invites
idempotency_key_reused422
- This key was used for a different request.
32 operations answer it
- POST/api/v1/admin/announcements
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/merges
- POST/api/v1/admin/plans
- POST/api/v1/catalog/corrections
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- POST/api/v1/catalog/variant-proposals
- POST/api/v1/collection/items/{id}/changes/{changeId}/undo
- POST/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/bulk
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/cancel
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- POST/api/v1/insights/alerts
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/hold
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/batches
- POST/api/v1/scans/bulk
- POST/api/v1/stores
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/listings
- POST/api/v1/stores/{storeId}/listings/bulk
- POST/api/v1/stores/{storeId}/members/invites
import_already_undone409
- The import was already undone.
1 operation answer it
import_not_found404
- No import of yours with that id.
1 operation answer it
import_suggestion409
- An import suggestion: resolve it instead.
1 operation answer it
internal500
- Something went wrong on our side (quote the requestId).
182 operations answer it
- GET/api/v1/admin/announcements
- POST/api/v1/admin/announcements
- PATCH/api/v1/admin/announcements/{id}
- POST/api/v1/admin/announcements/{id}/end
- GET/api/v1/admin/audit
- GET/api/v1/admin/catalog
- GET/api/v1/admin/catalog/{entity}/{id}
- PATCH/api/v1/admin/catalog/{entity}/{id}
- POST/api/v1/admin/catalog/{entity}/{id}/imprints
- POST/api/v1/admin/catalog/{entity}/{id}/locks
- POST/api/v1/admin/catalog/{entity}/{id}/slug
- POST/api/v1/admin/catalog/{entity}/{id}/verify
- GET/api/v1/admin/catalog/edition-overrides/{id}
- POST/api/v1/admin/catalog/edition-overrides/{id}/revert
- GET/api/v1/admin/catalog/issue-overrides/{id}
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/catalog/moves/{id}/undo
- POST/api/v1/admin/catalog/moves/preview
- POST/api/v1/admin/catalog/override-reverts/{id}/undo
- GET/api/v1/admin/code-proposals
- POST/api/v1/admin/code-proposals/{id}
- GET/api/v1/admin/cover-contributions
- POST/api/v1/admin/cover-contributions/{id}
- GET/api/v1/admin/coverage
- GET/api/v1/admin/health
- PATCH/api/v1/admin/health/incidents/{id}
- GET/api/v1/admin/imports
- GET/api/v1/admin/imports/conflicts
- GET/api/v1/admin/imports/conflicts/{id}
- POST/api/v1/admin/imports/conflicts/{id}
- POST/api/v1/admin/imports/sync
- GET/api/v1/admin/merges
- POST/api/v1/admin/merges
- POST/api/v1/admin/merges/{id}/undo
- GET/api/v1/admin/merges/duplicates
- POST/api/v1/admin/merges/preview
- GET/api/v1/admin/moderation
- POST/api/v1/admin/moderation/{id}
- GET/api/v1/admin/overview
- GET/api/v1/admin/plans
- POST/api/v1/admin/plans
- POST/api/v1/admin/plans/{id}/revoke
- GET/api/v1/admin/reports
- POST/api/v1/admin/reports/{id}
- POST/api/v1/admin/reports/{id}/restore
- GET/api/v1/admin/settings
- PUT/api/v1/admin/settings
- GET/api/v1/admin/stores
- PATCH/api/v1/admin/stores/{id}
- GET/api/v1/admin/support
- PATCH/api/v1/admin/support/{id}
- GET/api/v1/admin/usage
- GET/api/v1/admin/users
- PATCH/api/v1/admin/users/{id}
- GET/api/v1/admin/variant-proposals
- POST/api/v1/admin/variant-proposals/{id}
- POST/api/v1/admin/variant-proposals/{id}/resolve
- POST/api/v1/admin/variant-proposals/{id}/undo
- GET/api/v1/assistant
- POST/api/v1/assistant
- POST/api/v1/assistant/preview
- GET/api/v1/assistant/threads
- GET/api/v1/assistant/threads/{id}
- DELETE/api/v1/assistant/threads/{id}
- PATCH/api/v1/assistant/threads/{id}
- GET/api/v1/billing/status
- GET/api/v1/catalog/barcode
- GET/api/v1/catalog/corrections
- POST/api/v1/catalog/corrections
- POST/api/v1/catalog/corrections/{id}/withdraw
- GET/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/cover-contributions
- DELETE/api/v1/catalog/cover-contributions/{id}
- GET/api/v1/catalog/covers-wanted
- POST/api/v1/catalog/identify
- GET/api/v1/catalog/issues/{id}
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- GET/api/v1/catalog/search
- GET/api/v1/catalog/series/{slug}/go
- GET/api/v1/catalog/variant-covers-wanted
- GET/api/v1/catalog/variant-proposals
- POST/api/v1/catalog/variant-proposals
- DELETE/api/v1/catalog/variant-proposals/{id}
- GET/api/v1/certs/lookup
- POST/api/v1/certs/lookup
- GET/api/v1/collection/cert-status
- GET/api/v1/collection/export
- POST/api/v1/collection/imports/{id}/undo
- GET/api/v1/collection/items/{id}/cert-check
- POST/api/v1/collection/items/{id}/cert-check
- GET/api/v1/collection/items/{id}/changes
- POST/api/v1/collection/items/{id}/changes/{changeId}/undo
- GET/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/codes
- DELETE/api/v1/collection/items/{id}/codes/{codeId}
- POST/api/v1/collection/items/{id}/codes/check
- GET/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/bulk
- GET/api/v1/covers/token
- GET/api/v1/holds
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/cancel
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/confirm
- GET/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- GET/api/v1/insights/alerts
- POST/api/v1/insights/alerts
- DELETE/api/v1/insights/alerts/{id}
- PATCH/api/v1/insights/alerts/{id}
- GET/api/v1/insights/alerts/preview
- GET/api/v1/insights/grading
- GET/api/v1/insights/history
- GET/api/v1/insights/items/{id}
- GET/api/v1/insights/movers
- GET/api/v1/insights/portfolio
- GET/api/v1/insights/report
- GET/api/v1/labels/cover
- GET/api/v1/me/deletion
- POST/api/v1/me/deletion
- POST/api/v1/me/exports
- DELETE/api/v1/me/exports/{id}
- GET/api/v1/me/exports/{id}/download
- PATCH/api/v1/me/profile
- GET/api/v1/openapi.json
- GET/api/v1/public/catalog
- GET/api/v1/public/catalog/issues/{id}/listings
- GET/api/v1/public/catalog/new-releases
- GET/api/v1/public/catalog/publishers/{slug}
- GET/api/v1/public/catalog/search
- GET/api/v1/public/catalog/series/{slug}
- GET/api/v1/public/catalog/series/{slug}/{issue}
- GET/api/v1/public/listings/{id}
- GET/api/v1/public/profiles/{username}
- GET/api/v1/public/stores
- GET/api/v1/public/stores/{slug}
- GET/api/v1/questions
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/close
- POST/api/v1/questions/{questionId}/hold
- GET/api/v1/questions/{questionId}/messages
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- DELETE/api/v1/scans/{id}
- PATCH/api/v1/scans/{id}
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/{id}/process
- POST/api/v1/scans/{id}/provisional
- GET/api/v1/scans/{id}/search
- POST/api/v1/scans/batches
- PATCH/api/v1/scans/batches/{id}
- POST/api/v1/scans/bulk
- GET/api/v1/scans/search
- POST/api/v1/scans/upload-url
- GET/api/v1/store-invites
- POST/api/v1/store-invites/{inviteId}/respond
- POST/api/v1/stores
- GET/api/v1/stores/{storeId}
- PATCH/api/v1/stores/{storeId}
- GET/api/v1/stores/{storeId}/billing
- GET/api/v1/stores/{storeId}/holds
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/import/preview
- GET/api/v1/stores/{storeId}/listings
- POST/api/v1/stores/{storeId}/listings
- GET/api/v1/stores/{storeId}/listings/{listingId}
- DELETE/api/v1/stores/{storeId}/listings/{listingId}
- PATCH/api/v1/stores/{storeId}/listings/{listingId}
- POST/api/v1/stores/{storeId}/listings/bulk
- GET/api/v1/stores/{storeId}/members
- DELETE/api/v1/stores/{storeId}/members/{userId}
- PATCH/api/v1/stores/{storeId}/members/{userId}
- GET/api/v1/stores/{storeId}/members/invites
- POST/api/v1/stores/{storeId}/members/invites
- DELETE/api/v1/stores/{storeId}/members/invites/{inviteId}
- GET/api/v1/stores/{storeId}/questions
- GET/api/v1/stores/catalog-search
- GET/api/v1/stores/slug
invalid_addon400
- The add-on isn’t 2 or 5 digits.
1 operation answer it
invalid_barcode400
- Not a UPC, EAN or ISBN.
- The barcode isn’t a UPC, EAN or ISBN.
2 operations answer it
invalid_candidate400
- The picked candidate doesn’t name a book.
- The chosen candidate doesn’t name a book.
3 operations answer it
invalid_cert400
- Cert numbers are 4–64 letters and digits.
- The slab QR code’s cert number isn’t one.
3 operations answer it
invalid_code400
- Not a valid barcode, ISBN, ISSN or code (check digits).
- The code that led here isn’t a valid code.
3 operations answer it
invalid_copy400
- The copy fields aren’t valid together.
1 operation answer it
invalid_cover_url400
- The cover isn’t in our covers bucket.
1 operation answer it
invalid_cursor400
- A list cursor that didn’t come from this route: pass back the nextCursor you were given.
invalid_field400
- That field can’t be locked.
1 operation answer it
invalid_filter400
- A filter the route doesn’t allow, or a bad value for one. The detail names what’s allowed.
invalid_idempotency_key400
- The Idempotency-Key isn’t 1–255 visible ASCII characters.
32 operations answer it
- POST/api/v1/admin/announcements
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/merges
- POST/api/v1/admin/plans
- POST/api/v1/catalog/corrections
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- POST/api/v1/catalog/variant-proposals
- POST/api/v1/collection/items/{id}/changes/{changeId}/undo
- POST/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/bulk
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/cancel
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- POST/api/v1/insights/alerts
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/hold
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/batches
- POST/api/v1/scans/bulk
- POST/api/v1/stores
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/listings
- POST/api/v1/stores/{storeId}/listings/bulk
- POST/api/v1/stores/{storeId}/members/invites
invalid_json400
- The body isn’t JSON.
76 operations answer it
- POST/api/v1/admin/announcements
- PATCH/api/v1/admin/announcements/{id}
- PATCH/api/v1/admin/catalog/{entity}/{id}
- POST/api/v1/admin/catalog/{entity}/{id}/imprints
- POST/api/v1/admin/catalog/{entity}/{id}/locks
- POST/api/v1/admin/catalog/{entity}/{id}/slug
- POST/api/v1/admin/catalog/{entity}/{id}/verify
- POST/api/v1/admin/catalog/edition-overrides/{id}/revert
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/catalog/moves/preview
- POST/api/v1/admin/code-proposals/{id}
- POST/api/v1/admin/cover-contributions/{id}
- PATCH/api/v1/admin/health/incidents/{id}
- POST/api/v1/admin/imports/conflicts/{id}
- POST/api/v1/admin/imports/sync
- POST/api/v1/admin/merges
- POST/api/v1/admin/merges/preview
- POST/api/v1/admin/moderation/{id}
- POST/api/v1/admin/plans
- POST/api/v1/admin/plans/{id}/revoke
- POST/api/v1/admin/reports/{id}
- PUT/api/v1/admin/settings
- PATCH/api/v1/admin/stores/{id}
- PATCH/api/v1/admin/support/{id}
- PATCH/api/v1/admin/users/{id}
- POST/api/v1/admin/variant-proposals/{id}
- POST/api/v1/admin/variant-proposals/{id}/resolve
- POST/api/v1/admin/variant-proposals/{id}/undo
- POST/api/v1/assistant
- POST/api/v1/assistant/preview
- PATCH/api/v1/assistant/threads/{id}
- POST/api/v1/catalog/corrections
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/identify
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- POST/api/v1/catalog/variant-proposals
- POST/api/v1/certs/lookup
- POST/api/v1/collection/imports/{id}/undo
- POST/api/v1/collection/items/{id}/cert-check
- POST/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/codes/check
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/bulk
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/confirm
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- POST/api/v1/insights/alerts
- PATCH/api/v1/insights/alerts/{id}
- POST/api/v1/me/deletion
- PATCH/api/v1/me/profile
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/hold
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- PATCH/api/v1/scans/{id}
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/{id}/process
- POST/api/v1/scans/{id}/provisional
- POST/api/v1/scans/batches
- PATCH/api/v1/scans/batches/{id}
- POST/api/v1/scans/bulk
- POST/api/v1/scans/upload-url
- POST/api/v1/store-invites/{inviteId}/respond
- POST/api/v1/stores
- PATCH/api/v1/stores/{storeId}
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/import/preview
- POST/api/v1/stores/{storeId}/listings
- PATCH/api/v1/stores/{storeId}/listings/{listingId}
- POST/api/v1/stores/{storeId}/listings/bulk
- PATCH/api/v1/stores/{storeId}/members/{userId}
- POST/api/v1/stores/{storeId}/members/invites
invalid_listing400
- The listing’s fields don’t add up (a cert number without a grader…);
detailsays which.
2 operations answer it
invalid_pending_variant409
- That pending variant isn’t yours, or isn’t of that issue.
1 operation answer it
invalid_quantity409
- Hold between 1 and 50 copies, no more than are listed.
1 operation answer it
- POST/api/v1/holds
invalid_record409
- The conflict has no title to import under.
1 operation answer it
invalid_request400
- The query or body doesn’t match the schema (see errors[]).
119 operations answer it
- POST/api/v1/admin/announcements
- PATCH/api/v1/admin/announcements/{id}
- GET/api/v1/admin/audit
- GET/api/v1/admin/catalog
- PATCH/api/v1/admin/catalog/{entity}/{id}
- POST/api/v1/admin/catalog/{entity}/{id}/imprints
- POST/api/v1/admin/catalog/{entity}/{id}/locks
- POST/api/v1/admin/catalog/{entity}/{id}/slug
- POST/api/v1/admin/catalog/{entity}/{id}/verify
- POST/api/v1/admin/catalog/edition-overrides/{id}/revert
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/catalog/moves/preview
- GET/api/v1/admin/code-proposals
- POST/api/v1/admin/code-proposals/{id}
- GET/api/v1/admin/cover-contributions
- POST/api/v1/admin/cover-contributions/{id}
- GET/api/v1/admin/health
- PATCH/api/v1/admin/health/incidents/{id}
- GET/api/v1/admin/imports
- GET/api/v1/admin/imports/conflicts
- POST/api/v1/admin/imports/conflicts/{id}
- POST/api/v1/admin/imports/sync
- POST/api/v1/admin/merges
- GET/api/v1/admin/merges/duplicates
- POST/api/v1/admin/merges/preview
- GET/api/v1/admin/moderation
- POST/api/v1/admin/moderation/{id}
- GET/api/v1/admin/plans
- POST/api/v1/admin/plans
- POST/api/v1/admin/plans/{id}/revoke
- GET/api/v1/admin/reports
- POST/api/v1/admin/reports/{id}
- PUT/api/v1/admin/settings
- GET/api/v1/admin/stores
- PATCH/api/v1/admin/stores/{id}
- GET/api/v1/admin/support
- PATCH/api/v1/admin/support/{id}
- GET/api/v1/admin/usage
- GET/api/v1/admin/users
- PATCH/api/v1/admin/users/{id}
- GET/api/v1/admin/variant-proposals
- POST/api/v1/admin/variant-proposals/{id}
- POST/api/v1/admin/variant-proposals/{id}/resolve
- POST/api/v1/admin/variant-proposals/{id}/undo
- POST/api/v1/assistant
- POST/api/v1/assistant/preview
- GET/api/v1/assistant/threads
- PATCH/api/v1/assistant/threads/{id}
- GET/api/v1/catalog/barcode
- GET/api/v1/catalog/corrections
- POST/api/v1/catalog/corrections
- GET/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/identify
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- GET/api/v1/catalog/search
- GET/api/v1/catalog/series/{slug}/go
- GET/api/v1/catalog/variant-proposals
- POST/api/v1/catalog/variant-proposals
- POST/api/v1/certs/lookup
- GET/api/v1/collection/cert-status
- GET/api/v1/collection/export
- POST/api/v1/collection/imports/{id}/undo
- POST/api/v1/collection/items/{id}/cert-check
- POST/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/codes/check
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/bulk
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/confirm
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- POST/api/v1/insights/alerts
- PATCH/api/v1/insights/alerts/{id}
- GET/api/v1/insights/alerts/preview
- GET/api/v1/insights/history
- GET/api/v1/insights/movers
- GET/api/v1/insights/report
- GET/api/v1/labels/cover
- POST/api/v1/me/deletion
- GET/api/v1/me/exports/{id}/download
- PATCH/api/v1/me/profile
- GET/api/v1/public/catalog/publishers/{slug}
- GET/api/v1/public/catalog/search
- GET/api/v1/public/catalog/series/{slug}
- GET/api/v1/public/stores
- GET/api/v1/public/stores/{slug}
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/hold
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- PATCH/api/v1/scans/{id}
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/{id}/process
- POST/api/v1/scans/{id}/provisional
- GET/api/v1/scans/{id}/search
- POST/api/v1/scans/batches
- PATCH/api/v1/scans/batches/{id}
- POST/api/v1/scans/bulk
- GET/api/v1/scans/search
- POST/api/v1/scans/upload-url
- POST/api/v1/store-invites/{inviteId}/respond
- POST/api/v1/stores
- PATCH/api/v1/stores/{storeId}
- GET/api/v1/stores/{storeId}/holds
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/import/preview
- GET/api/v1/stores/{storeId}/listings
- POST/api/v1/stores/{storeId}/listings
- PATCH/api/v1/stores/{storeId}/listings/{listingId}
- POST/api/v1/stores/{storeId}/listings/bulk
- PATCH/api/v1/stores/{storeId}/members/{userId}
- POST/api/v1/stores/{storeId}/members/invites
- GET/api/v1/stores/{storeId}/questions
- GET/api/v1/stores/catalog-search
- GET/api/v1/stores/slug
invalid_slug400
- The address isn’t allowed (reserved, too short…).
1 operation answer it
- POST/api/v1/stores
invalid_sort400
- A sort field the route doesn’t allow.
invalid_state409
- The hold isn’t in a state that allows this (already answered, closed…).
4 operations answer it
invalid_target409
- The issue or edition can’t take a copy.
1 operation answer it
invalid_tool400
- Only proposed changes have previews.
1 operation answer it
invite_closed409
- It was already answered or withdrawn.
1 operation answer it
invite_expired409
- It expired.
1 operation answer it
issue_not_found404
- No issue with that id.
1 operation answer it
known_elsewhere409
- Another edition has this code.
1 operation answer it
last_owner409
- A store needs an owner: add another before leaving.
1 operation answer it
merge_blocked409
- The merge can’t run (the details say why).
1 operation answer it
mixed_series400
- Move issues of one series at a time.
2 operations answer it
move_blocked409
- The move can’t run as asked (the details say why).
1 operation answer it
name_taken409
- A catalog publisher already has the name.
1 operation answer it
no_barcode400
- An add-on was sent for a scan without a barcode.
1 operation answer it
no_match409
- Nothing to add: the scan matched no book.
1 operation answer it
not_assigned409
- Only a suggestion matched to an edition can be undone.
1 operation answer it
not_available503
- Undo isn’t available until a database update is applied.
- Exports aren’t available on this deployment.
2 operations answer it
not_found404
- Not an admin (moderator): the same 404 as a missing route.
- Nothing at that address.
- The issue isn’t in the catalog.
- That cover isn’t available.
131 operations answer it
- GET/api/v1/admin/announcements
- POST/api/v1/admin/announcements
- PATCH/api/v1/admin/announcements/{id}
- POST/api/v1/admin/announcements/{id}/end
- GET/api/v1/admin/audit
- GET/api/v1/admin/catalog
- GET/api/v1/admin/catalog/{entity}/{id}
- PATCH/api/v1/admin/catalog/{entity}/{id}
- POST/api/v1/admin/catalog/{entity}/{id}/imprints
- POST/api/v1/admin/catalog/{entity}/{id}/locks
- POST/api/v1/admin/catalog/{entity}/{id}/slug
- POST/api/v1/admin/catalog/{entity}/{id}/verify
- GET/api/v1/admin/catalog/edition-overrides/{id}
- POST/api/v1/admin/catalog/edition-overrides/{id}/revert
- GET/api/v1/admin/catalog/issue-overrides/{id}
- POST/api/v1/admin/catalog/moves
- POST/api/v1/admin/catalog/moves/{id}/undo
- POST/api/v1/admin/catalog/moves/preview
- POST/api/v1/admin/catalog/override-reverts/{id}/undo
- GET/api/v1/admin/code-proposals
- POST/api/v1/admin/code-proposals/{id}
- GET/api/v1/admin/cover-contributions
- POST/api/v1/admin/cover-contributions/{id}
- GET/api/v1/admin/coverage
- GET/api/v1/admin/health
- PATCH/api/v1/admin/health/incidents/{id}
- GET/api/v1/admin/imports
- GET/api/v1/admin/imports/conflicts
- GET/api/v1/admin/imports/conflicts/{id}
- POST/api/v1/admin/imports/conflicts/{id}
- POST/api/v1/admin/imports/sync
- GET/api/v1/admin/merges
- POST/api/v1/admin/merges
- POST/api/v1/admin/merges/{id}/undo
- GET/api/v1/admin/merges/duplicates
- POST/api/v1/admin/merges/preview
- GET/api/v1/admin/moderation
- POST/api/v1/admin/moderation/{id}
- GET/api/v1/admin/overview
- GET/api/v1/admin/plans
- POST/api/v1/admin/plans
- POST/api/v1/admin/plans/{id}/revoke
- GET/api/v1/admin/reports
- POST/api/v1/admin/reports/{id}
- POST/api/v1/admin/reports/{id}/restore
- GET/api/v1/admin/settings
- PUT/api/v1/admin/settings
- GET/api/v1/admin/stores
- PATCH/api/v1/admin/stores/{id}
- GET/api/v1/admin/support
- PATCH/api/v1/admin/support/{id}
- GET/api/v1/admin/usage
- GET/api/v1/admin/users
- PATCH/api/v1/admin/users/{id}
- GET/api/v1/admin/variant-proposals
- POST/api/v1/admin/variant-proposals/{id}
- POST/api/v1/admin/variant-proposals/{id}/resolve
- POST/api/v1/admin/variant-proposals/{id}/undo
- GET/api/v1/assistant/threads/{id}
- DELETE/api/v1/assistant/threads/{id}
- PATCH/api/v1/assistant/threads/{id}
- POST/api/v1/catalog/corrections/{id}/withdraw
- DELETE/api/v1/catalog/cover-contributions/{id}
- GET/api/v1/catalog/issues/{id}
- GET/api/v1/catalog/series/{slug}/go
- DELETE/api/v1/catalog/variant-proposals/{id}
- POST/api/v1/collection/imports/{id}/undo
- GET/api/v1/collection/items/{id}/cert-check
- POST/api/v1/collection/items/{id}/cert-check
- GET/api/v1/collection/items/{id}/changes
- POST/api/v1/collection/items/{id}/changes/{changeId}/undo
- GET/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/codes
- DELETE/api/v1/collection/items/{id}/codes/{codeId}
- POST/api/v1/collection/items/{id}/codes/check
- GET/api/v1/collection/items/{id}/repoint
- POST/api/v1/collection/items/{id}/repoint
- POST/api/v1/holds/{holdId}/cancel
- POST/api/v1/holds/{holdId}/complete
- POST/api/v1/holds/{holdId}/confirm
- GET/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/messages
- POST/api/v1/holds/{holdId}/respond
- DELETE/api/v1/insights/alerts/{id}
- PATCH/api/v1/insights/alerts/{id}
- GET/api/v1/insights/alerts/preview
- GET/api/v1/insights/items/{id}
- GET/api/v1/labels/cover
- DELETE/api/v1/me/exports/{id}
- GET/api/v1/me/exports/{id}/download
- PATCH/api/v1/me/profile
- GET/api/v1/public/catalog/issues/{id}/listings
- GET/api/v1/public/catalog/publishers/{slug}
- GET/api/v1/public/catalog/series/{slug}
- GET/api/v1/public/catalog/series/{slug}/{issue}
- GET/api/v1/public/listings/{id}
- GET/api/v1/public/profiles/{username}
- GET/api/v1/public/stores/{slug}
- POST/api/v1/questions/{questionId}/close
- POST/api/v1/questions/{questionId}/hold
- GET/api/v1/questions/{questionId}/messages
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- DELETE/api/v1/scans/{id}
- PATCH/api/v1/scans/{id}
- POST/api/v1/scans/{id}/add
- POST/api/v1/scans/{id}/process
- POST/api/v1/scans/{id}/provisional
- GET/api/v1/scans/{id}/search
- PATCH/api/v1/scans/batches/{id}
- POST/api/v1/store-invites/{inviteId}/respond
- GET/api/v1/stores/{storeId}
- PATCH/api/v1/stores/{storeId}
- GET/api/v1/stores/{storeId}/billing
- GET/api/v1/stores/{storeId}/holds
- POST/api/v1/stores/{storeId}/import/commit
- POST/api/v1/stores/{storeId}/import/preview
- GET/api/v1/stores/{storeId}/listings
- POST/api/v1/stores/{storeId}/listings
- GET/api/v1/stores/{storeId}/listings/{listingId}
- DELETE/api/v1/stores/{storeId}/listings/{listingId}
- PATCH/api/v1/stores/{storeId}/listings/{listingId}
- POST/api/v1/stores/{storeId}/listings/bulk
- GET/api/v1/stores/{storeId}/members
- DELETE/api/v1/stores/{storeId}/members/{userId}
- PATCH/api/v1/stores/{storeId}/members/{userId}
- GET/api/v1/stores/{storeId}/members/invites
- POST/api/v1/stores/{storeId}/members/invites
- DELETE/api/v1/stores/{storeId}/members/invites/{inviteId}
- GET/api/v1/stores/{storeId}/questions
- GET/api/v1/stores/catalog-search
not_in_catalog409
- The picked book isn’t in our catalog yet; search again.
1 operation answer it
not_migrated503
- The tool needs a database update that hasn’t been applied yet.
- The database update this needs isn’t applied yet.
not_overridden409
- That field isn’t overridden (any more).
1 operation answer it
nothing_changed400
- Every value sent is what the record has.
1 operation answer it
own_content400
- You can’t report your own profile, shop or messages.
1 operation answer it
- POST/api/v1/reports
own_store409
- The book is in the caller’s own store.
2 operations answer it
- POST/api/v1/holds
- POST/api/v1/questions
owner_role409
- Owners can only leave on their own.
- Owners keep the owner role.
2 operations answer it
photo_missing409
- The photo is gone; decline this one.
- The photo is gone; approve without it or decline.
2 operations answer it
provider_not_configured409
- Metron credentials aren’t configured.
1 operation answer it
provisional_exists409
- A provisional publisher already has the name; adopt it (its id is in the details).
1 operation answer it
question_closed409
- The question is closed.
2 operations answer it
rate_limited429
- Too many messages; slow down.
- Too many previews at once.
- Signed out: too many requests from your network.
- Too many requests; wait the Retry-After seconds.
36 operations answer it
- POST/api/v1/assistant
- POST/api/v1/assistant/preview
- GET/api/v1/catalog/barcode
- POST/api/v1/catalog/corrections
- POST/api/v1/catalog/cover-contributions
- POST/api/v1/catalog/materialize
- POST/api/v1/catalog/provisional
- GET/api/v1/catalog/search
- POST/api/v1/catalog/variant-proposals
- POST/api/v1/certs/lookup
- GET/api/v1/collection/export
- POST/api/v1/collection/items/{id}/cert-check
- POST/api/v1/collection/items/{id}/codes
- POST/api/v1/collection/items/{id}/codes/check
- POST/api/v1/holds
- POST/api/v1/holds/{holdId}/messages
- GET/api/v1/labels/cover
- GET/api/v1/public/catalog
- GET/api/v1/public/catalog/issues/{id}/listings
- GET/api/v1/public/catalog/new-releases
- GET/api/v1/public/catalog/publishers/{slug}
- GET/api/v1/public/catalog/search
- GET/api/v1/public/catalog/series/{slug}
- GET/api/v1/public/catalog/series/{slug}/{issue}
- GET/api/v1/public/listings/{id}
- GET/api/v1/public/profiles/{username}
- GET/api/v1/public/stores
- GET/api/v1/public/stores/{slug}
- POST/api/v1/questions
- POST/api/v1/questions/{questionId}/messages
- POST/api/v1/reports
- POST/api/v1/scans
- POST/api/v1/scans/{id}/process
- GET/api/v1/scans/{id}/search
- GET/api/v1/scans/search
- POST/api/v1/stores/{storeId}/members/invites
repoint_rate_limited409
- Too many changes today; try again tomorrow.
1 operation answer it
scan_not_found404
- No scan of yours with that id.
7 operations answer it
self_demotion409
- Admins can’t remove their own admin access.
1 operation answer it
self_disable409
- Admins can’t disable their own account.
2 operations answer it
slug_taken409
- Another store has that address.
1 operation answer it
- POST/api/v1/stores
still_matching409
- The scan is still being matched; try again shortly.
1 operation answer it
storage_quota409
- Your photo storage is full.
1 operation answer it
store_closed409
- The store has closed.
4 operations answer it
store_inactive409
- The store is closed or suspended, so its books can’t be listed for sale.
4 operations answer it
store_limit409
- The caller already created 5 stores.
1 operation answer it
- POST/api/v1/stores
sync_running409
- A Metron sync is already running.
1 operation answer it
target_is_admin409
- The account is an admin; remove admin access first.
1 operation answer it
thread_not_found404
- No such conversation of yours.
2 operations answer it
thread_out_of_date409
- The conversation changed elsewhere; reload it.
1 operation answer it
too_large413
- The cover is over 15 MB.
1 operation answer it
too_many_holds409
- The caller has too many open holds.
1 operation answer it
- POST/api/v1/holds
too_many_invites409
- Too many open invitations.
1 operation answer it
turn_in_progress429
- One turn per collector at a time.
1 operation answer it
undo_window_passed409
- Imports can be undone for a limited time only.
1 operation answer it
unreadable422
- The cover couldn’t be read as an image.
1 operation answer it
unsupported_action400
- That action doesn’t apply to this kind of report.
1 operation answer it
upload_url_failed502
- Storage couldn’t sign the upload; try again.