API reference / Admin
14 operations.
/api/v1/admin/catalogA pasted catalog link, an id, "Title #12" or a series title.
collector.searchAdminCatalog()admin:catalog:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
qoptional | query | string | What to look for. |
object
curl 'https://collection.id/api/v1/admin/catalog' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.searchAdminCatalog({ query: { … } });/api/v1/admin/catalog/{entity}/{id}One publisher, series, issue or edition with its editable fields, status, slugs, locks and children.
collector.getAdminCatalogRecord()admin:catalog:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
entityrequired | path | enum | publisher, series, issue or edition.One of publisher, series, issue, edition |
idrequired | path | string (uuid) |
object
curl 'https://collection.id/api/v1/admin/catalog/<entity>/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminCatalogRecord({ path: { entity, id } });/api/v1/admin/catalog/{entity}/{id}Set fields directly, validated like reviewed corrections; only changed fields need to be sent. Locks each changed field against imports. Audited; expires the catalog pages.
collector.updateAdminCatalogRecord()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
entityrequired | path | enum | publisher, series, issue or edition.One of publisher, series, issue, edition |
idrequired | path | string (uuid) |
object
valuesmap of anyrequirednotestringoptionalat most 1000 charactersobject
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
nothing_changed: Every value sent is what the record has.
not_found: Not an admin (moderator): the same 404 as a missing route.
entity_merged: The record was merged into another one; edit the one that was kept.
internal: Something went wrong on our side (quote the requestId).
audit_failed: The change was made, but writing its audit row failed.
curl -X PATCH 'https://collection.id/api/v1/admin/catalog/<entity>/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.updateAdminCatalogRecord({ path: { entity, id }, body: { … } });/api/v1/admin/catalog/{entity}/{id}/imprintsCreates a verified imprint under a top-level publisher, or adopts a provisional publisher with that name as it (adopt). Audited.
collector.createAdminImprint()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
entityrequired | path | "publisher" | |
idrequired | path | string (uuid) |
object
namestringrequired1–200 characterswebsiteUrlstringoptionalat most 500 charactersfoundedYearinteger or nulloptional1800–2200adoptstring (uuid)optionalnotestringoptionalat most 1000 charactersobject
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
not_found: Not an admin (moderator): the same 404 as a missing route.
provisional_exists: A provisional publisher already has the name; adopt it (its id is in the details).
name_taken: A catalog publisher already has the name.
internal: Something went wrong on our side (quote the requestId).
audit_failed: The change was made, but writing its audit row failed.
curl -X POST 'https://collection.id/api/v1/admin/catalog/<entity>/<id>/imprints' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.createAdminImprint({ path: { entity, id }, body: { … } });/api/v1/admin/catalog/{entity}/{id}/locksLock a field at its current value (imports leave it alone) or remove its lock. Audited.
collector.setAdminCatalogFieldLock()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
entityrequired | path | enum | publisher, series, issue or edition.One of publisher, series, issue, edition |
idrequired | path | string (uuid) |
object
fieldstringrequiredlockedbooleanrequiredreasonstringoptionalat most 1000 charactersobject
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
invalid_field: That field can’t be locked.
not_found: Not an admin (moderator): the same 404 as a missing route.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/catalog/<entity>/<id>/locks' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.setAdminCatalogFieldLock({ path: { entity, id }, body: { … } });/api/v1/admin/catalog/{entity}/{id}/slugThe old slug keeps redirecting. Audited.
collector.changeAdminCatalogSlug()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
entityrequired | path | enum | One of series, issue |
idrequired | path | string (uuid) |
object
slugstringrequiredat most 120 charactersobject
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
not_found: Not an admin (moderator): the same 404 as a missing route.
already_exists: Another record has that slug.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/catalog/<entity>/<id>/slug' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.changeAdminCatalogSlug({ path: { entity, id }, body: { … } });/api/v1/admin/catalog/{entity}/{id}/verifyMark a provisional record verified, with the evidence it was checked against. Audited.
collector.verifyAdminCatalogRecord()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
entityrequired | path | enum | publisher, series, issue or edition.One of publisher, series, issue, edition |
idrequired | path | string (uuid) |
object
evidencestringrequired3–1000 charactersobject
curl -X POST 'https://collection.id/api/v1/admin/catalog/<entity>/<id>/verify' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.verifyAdminCatalogRecord({ path: { entity, id }, body: { … } });/api/v1/admin/catalog/edition-overrides/{id}Fields an admin overrode on an edition, the known versions of each (previous, Metron, GCD) and recent reverts.
collector.getAdminEditionOverrides()admin:catalog:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
entity"edition"requiredidstringrequiredlookupsobjectrequiredcurl 'https://collection.id/api/v1/admin/catalog/edition-overrides/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminEditionOverrides({ path: { id } });/api/v1/admin/catalog/edition-overrides/{id}/revertPut one overridden field back to a known version (its lock goes too). Audited; can be undone.
collector.revertAdminEditionOverride()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
fieldstringrequiredversionenumrequiredOne ofpreviousmetrongcd
notestringoptionalat most 1000 charactersentity"edition"requiredidstringrequiredlookupsobjectrequiredinvalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
not_found: Not an admin (moderator): the same 404 as a missing route.
entity_merged: The record was merged into another one; edit the one that was kept.
not_overridden: That field isn’t overridden (any more).
version_unavailable: That version can’t be read right now.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/catalog/edition-overrides/<id>/revert' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.revertAdminEditionOverride({ path: { id }, body: { … } });/api/v1/admin/catalog/issue-overrides/{id}For each edition of the issue, how many of its fields an admin has overridden (the marks in the catalog editor), keyed by edition id.
collector.getAdminIssueOverrideCounts()admin:catalog:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
countsmap of numberrequiredOverridden fields per edition id.
curl 'https://collection.id/api/v1/admin/catalog/issue-overrides/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminIssueOverrideCounts({ path: { id } });/api/v1/admin/catalog/movesChecked again from current data (numbers the target has are refused). The database journals the move, so it can be undone for 7 days. Audited.
collector.moveAdminIssues()admin:catalog:write(API keys are coming soon)Idempotency-KeyX-Request-Idobject
issueIdsarray of string (uuid)required1–500 itemstargetSeriesIdstring (uuid)requirednotestringoptionalat most 1000 charactersobject
idstringrequiredThe move’s journal id (undo within 7 days).
movednumberrequiredrenamedarray of objectrequiredidstringrequiredfromstringrequiredtostringrequiredinvalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
invalid_idempotency_key: The Idempotency-Key isn’t 1–255 visible ASCII characters.
mixed_series: Move issues of one series at a time.
not_found: Not an admin (moderator): the same 404 as a missing route.
idempotency_in_progress: The first request with this key is still running.
move_blocked: The move can’t run as asked (the details say why).
idempotency_key_reused: This key was used for a different request.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/catalog/moves' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.moveAdminIssues({ body: { … } });/api/v1/admin/catalog/moves/{id}/undoPut a move back from its journal (within 7 days).
collector.undoAdminIssueMove()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
Journal entries put back, and ones skipped because the data changed since.
appliednumberrequiredskippednumberrequiredcurl -X POST 'https://collection.id/api/v1/admin/catalog/moves/<id>/undo' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.undoAdminIssueMove({ path: { id } });/api/v1/admin/catalog/moves/previewSlugs, what follows the issues, collisions and warnings. Writes nothing.
collector.previewAdminIssueMove()admin:catalog:read(API keys are coming soon)X-Request-Idobject
issueIdsarray of string (uuid)required1–500 itemstargetSeriesIdstring (uuid)requirednotestringoptionalat most 1000 charactersobject
previewobjectrequiredfromobjectrequiredidstringrequiredlabelstringrequiredpublisherstring or nullrequiredtoobjectrequiredidstringrequiredlabelstringrequiredpublisherstring or nullrequiredissuesarray of objectrequiredidstringrequiredlabelstringrequiredslugstringrequirednewSlugstringrequiredcollisionsarray of stringrequiredwarningsarray of stringrequiredcarriedobjectrequirededitionsnumberrequiredcopiesnumberrequiredlistingsnumberrequiredbarcodeMatchesnumberrequiredproblemsarray of stringrequiredWhy the move can’t run as asked, if anything.
invalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
mixed_series: Move issues of one series at a time.
not_found: Not an admin (moderator): the same 404 as a missing route.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/catalog/moves/preview' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.previewAdminIssueMove({ body: { … } });/api/v1/admin/catalog/override-reverts/{id}/undoThe override and its lock come back.
collector.undoAdminOverrideRevert()admin:catalog:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
entity"edition"requiredidstringrequiredlookupsobjectrequiredcurl -X POST 'https://collection.id/api/v1/admin/catalog/override-reverts/<id>/undo' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.undoAdminOverrideRevert({ path: { id } });