API reference / Admin
5 operations.
/api/v1/admin/mergesWith their undo window.
collector.listAdminMerges()admin:catalog:read(API keys are coming soon)If-None-MatchX-Request-Idobject
curl 'https://collection.id/api/v1/admin/merges' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminMerges();/api/v1/admin/mergesThe plan is recomputed from current data with the admin’s overrides; the database checks it again and journals every change for undo (7 days). Audited.
collector.executeAdminMerge()admin:catalog:write(API keys are coming soon)Idempotency-KeyX-Request-Idobject
entityenumrequiredOne ofseriesissueedition
winnerIdstring (uuid)requiredloserIdstring (uuid)requiredoverridesmap of string (uuid) or nulloptionaldefault {}notestringoptionalat most 1000 charactersobject
idstringrequiredinvalid_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.
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.
merge_blocked: The merge can’t run (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/merges' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.executeAdminMerge({ body: { … } });/api/v1/admin/merges/{id}/undoReverse a merge from its journal (within 7 days, newest change first).
collector.undoAdminMerge()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/merges/<id>/undo' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.undoAdminMerge({ path: { id } });/api/v1/admin/merges/duplicates?series=<id>: issues sharing a number and editions that may be the same inside that series. ?editions=1[&offset=N]: collectors’ provisional editions next to matching editions, across the catalog. Otherwise series by title (?q=), or the provisional-series check when the query is empty.
collector.findAdminDuplicates()admin:catalog:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
seriesoptional | query | string (uuid) | Look inside this series. |
editionsoptional | query | string | 1: provisional editions across the catalog. |
offsetoptional | query | integer | 0–100000 · default 0 |
qoptional | query | string | Series title. |
object or object or object
Option 1: object
Option 2: object
totalnumberrequiredoffsetnumberrequiredlimitnumberrequiredOption 3: object
curl 'https://collection.id/api/v1/admin/merges/duplicates' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.findAdminDuplicates({ query: { … } });/api/v1/admin/merges/previewChildren that merge or move, copies and refs that follow, warnings. Writes nothing.
collector.previewAdminMerge()admin:catalog:read(API keys are coming soon)X-Request-Idobject
entityenumrequiredOne ofseriesissueedition
winnerIdstring (uuid)requiredloserIdstring (uuid)requiredoverridesmap of string (uuid) or nulloptionaldefault {}notestringoptionalat most 1000 charactersmovesobjectrequiredcopiesnumberrequiredownersnumberrequiredlistingsnumberrequiredscansnumberrequiredfollowsnumberrequiredbarcodesnumberrequiredobservationsnumberrequiredcreditsnumberrequiredpullMarksnumberoptionalalertsnumberoptionalbarcodeMatchesnumberoptionalrequestsnumberoptionalproviderRefsarray of objectrequiredproviderstringrequiredentitystringrequiredexternalIdstringrequiredfillsarray of objectrequiredfieldstringrequiredvaluestringrequiredwarningsarray of stringrequiredproblemsarray of stringrequiredundecidednumberrequiredcurl -X POST 'https://collection.id/api/v1/admin/merges/preview' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.previewAdminMerge({ body: { … } });