API reference / Admin
10 operations.
/api/v1/admin/code-proposalsUPCs, ISBNs, ISSNs and distributor codes collectors added that the catalog doesn’t have yet.
collector.listAdminCodeProposals()admin:moderation:write(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
statusoptional | query | enum | Which items (default pending).One of pending, approved, rejected, withdrawndefault "pending" |
countsmap of numberrequiredcurl 'https://collection.id/api/v1/admin/code-proposals' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminCodeProposals({ query: { … } });/api/v1/admin/code-proposals/{id}Onto an edition, or the series for an ISSN. A decline needs a note for the collector.
collector.reviewAdminCodeProposal()admin:moderation:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
decisionenumrequiredOne ofapprovereject
editionIdstring (uuid) or nulloptionaloverridebooleanoptionalnotestringoptionalat 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.
already_reviewed: Someone already reviewed it.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/code-proposals/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.reviewAdminCodeProposal({ path: { id }, body: { … } });/api/v1/admin/cover-contributionsBy status, with the checks’ findings and look-alike covers.
collector.listAdminCoverContributions()admin:moderation:write(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
statusoptional | query | enum | Which items (default pending).One of pending, approved, rejected, withdrawndefault "pending" |
countsmap of numberrequiredcurl 'https://collection.id/api/v1/admin/cover-contributions' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminCoverContributions({ query: { … } });/api/v1/admin/cover-contributions/{id}Approving stores the photo as the catalog cover. A decline needs a note for the collector.
collector.reviewAdminCoverContribution()admin:moderation:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
decisionenumrequiredOne ofapprovereject
notestringoptionalat 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.
already_reviewed: Someone already reviewed it.
has_cover: It has a cover now; decline this one or remove that cover first.
photo_missing: The photo is gone; decline this one.
entity_not_found: The issue is no longer in the catalog.
internal: Something went wrong on our side (quote the requestId).
storage_unavailable: Cover storage isn’t set up on this server.
curl -X POST 'https://collection.id/api/v1/admin/cover-contributions/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.reviewAdminCoverContribution({ path: { id }, body: { … } });/api/v1/admin/moderationCollectors’ corrections and proposals with field diffs, newest pending first. Moderators don’t see emails.
collector.listAdminChangeRequests()admin:moderation:write(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
statusoptional | query | enum | Which items (default pending).One of pending, approved, rejected, withdrawndefault "pending" |
countsmap of numberrequiredcurl 'https://collection.id/api/v1/admin/moderation' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminChangeRequests({ query: { … } });/api/v1/admin/moderation/{id}Approving applies it. A rejection needs a note; the collector sees it.
collector.reviewAdminChangeRequest()admin:moderation:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
decisionenumrequiredOne ofapprovereject
notestringoptionalat 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.
already_reviewed: Someone already reviewed it.
entity_not_found: The record it’s about no longer exists.
empty_patch: Nothing in it can be applied any more.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/moderation/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.reviewAdminChangeRequest({ path: { id }, body: { … } });/api/v1/admin/variant-proposalsCollectors’ variant proposals and the variants imports couldn’t place, collected books first, with candidate editions and what their cover barcodes read.
collector.listAdminVariantProposals()admin:moderation:write(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
statusoptional | query | enum | Which items (default pending).One of pending, approved, rejected, withdrawndefault "pending" |
countsmap of numberrequiredcurl 'https://collection.id/api/v1/admin/variant-proposals' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminVariantProposals({ query: { … } });/api/v1/admin/variant-proposals/{id}Approve as sent, or as the reviewer edited it (variant and edition), with or without the photo.
collector.reviewAdminVariantProposal()admin:moderation:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
decisionenumrequiredOne ofapprovereject
variantobjectoptionalnamestring or nulloptionalat most 300 characterscoverLetterstring or nulloptionalat most 20 charactersartiststring or nulloptionalat most 120 charactersprintinginteger or nulloptional1–99ratiostring or nulloptionalat most 20 charactersbarcodestring or nulloptionalat most 40 charactersisbnstring or nulloptionalat most 20 charactersisVirginbooleanoptionalisExclusivebooleanoptionalexclusiveRetailerstring or nulloptionalat most 120 characterscoverPriceCentsinteger or nulloptional0–1000000coverPriceCurrencystring or nulloptionalusePhotobooleanoptionalreleaseobjectoptionalpublisherIdstring (uuid) or nulloptionalpublisherNamestringoptionalat most 200 characters · default ""languagestring or nulloptionalcountrystring or nulloptionalreleaseYearinteger or nulloptional1900–2200numberAsPrintedstring or nulloptionalat most 40 characterstitleAsPrintedstring or nulloptionalat most 300 charactersnotestringoptionalat 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.
already_reviewed: Someone already reviewed it.
entity_not_found: The issue is no longer in the catalog.
photo_missing: The photo is gone; approve without it or decline.
import_suggestion: An import suggestion: resolve it instead.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/variant-proposals/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.reviewAdminVariantProposal({ path: { id }, body: { … } });/api/v1/admin/variant-proposals/{id}/resolveThe edition it is (optionally giving the edition the provider’s barcode), a new variant, or dismissed.
collector.resolveAdminVariantSuggestion()admin:moderation:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
decisionenumrequiredOne ofassigncreatereject
editionIdstring (uuid)optionalfillBarcodebooleanoptionalvariantobjectoptionalnamestring or nulloptionalat most 300 characterscoverLetterstring or nulloptionalat most 20 charactersartiststring or nulloptionalat most 120 charactersprintinginteger or nulloptional1–99ratiostring or nulloptionalat most 20 charactersbarcodestring or nulloptionalat most 40 charactersisbnstring or nulloptionalat most 20 charactersisVirginbooleanoptionalisExclusivebooleanoptionalexclusiveRetailerstring or nulloptionalat most 120 characterscoverPriceCentsinteger or nulloptional0–1000000coverPriceCurrencystring or nulloptionalnotestringoptionalat 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.
already_reviewed: Someone already reviewed it.
entity_not_found: The issue is no longer in the catalog.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/variant-proposals/<id>/resolve' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.resolveAdminVariantSuggestion({ path: { id }, body: { … } });/api/v1/admin/variant-proposals/{id}/undoAutomatic (by its cover barcode) or a moderator’s: it’s pending again and the edition is as it was. An undone automatic placement isn’t repeated.
collector.undoAdminVariantSuggestion()admin:moderation:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
notestringoptionalat 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.
not_assigned: Only a suggestion matched to an edition can be undone.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/admin/variant-proposals/<id>/undo' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.undoAdminVariantSuggestion({ path: { id }, body: { … } });