API reference / Admin
12 operations.
/api/v1/admin/announcementsEvery announcement, newest first, with its state and how many people dismissed it.
collector.listAdminAnnouncements()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-Idobject
curl 'https://collection.id/api/v1/admin/announcements' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminAnnouncements();/api/v1/admin/announcementsFor everyone, signed-in people, or some plans. Audited.
collector.createAdminAnnouncement()admin:ops:write(API keys are coming soon)Idempotency-KeyX-Request-Idobject
titlestringrequired1–120 charactersbodystring or nulloptionalat most 600 characterslinkUrlstring or null or ""optionalOption 1: string or null
Option 2: ""
linkLabelstring or nulloptionalat most 40 charactersseverityenumrequiredOne ofinfosuccesswarningcritical
audienceenumrequiredOne ofeveryonesigned_inplan
audiencePlansarray of enumoptionalat most 3 itemsOne offreecollectorpro
startsAtstring (date-time) or nulloptionalendsAtstring (date-time) or nulloptionalobject
invalid_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.
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/announcements' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.createAdminAnnouncement({ body: { … } });/api/v1/admin/announcements/{id}Text, link, audience and window. Audited with before and after.
collector.updateAdminAnnouncement()admin:ops:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
titlestringrequired1–120 charactersbodystring or nulloptionalat most 600 characterslinkUrlstring or null or ""optionalOption 1: string or null
Option 2: ""
linkLabelstring or nulloptionalat most 40 charactersseverityenumrequiredOne ofinfosuccesswarningcritical
audienceenumrequiredOne ofeveryonesigned_inplan
audiencePlansarray of enumoptionalat most 3 itemsOne offreecollectorpro
startsAtstring (date-time) or nulloptionalendsAtstring (date-time) or nulloptionalobject
curl -X PATCH 'https://collection.id/api/v1/admin/announcements/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.updateAdminAnnouncement({ path: { id }, body: { … } });/api/v1/admin/announcements/{id}/endAudited.
collector.endAdminAnnouncement()admin:ops:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
curl -X POST 'https://collection.id/api/v1/admin/announcements/<id>/end' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.endAdminAnnouncement({ path: { id } });/api/v1/admin/auditNewest first. Filters: action (exact, or a family like "catalog"), entity, actor (an id or an exact email), from/to dates; before pages.
collector.listAdminAudit()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
actionoptional | query | string | at most 120 characters |
entityoptional | query | string | at most 60 characters |
actoroptional | query | string | at most 200 characters |
fromoptional | query | string (date) | |
tooptional | query | string (date) | |
beforeoptional | query | integer |
nextCursornumber or nullrequiredactionsarray of stringrequiredcurl 'https://collection.id/api/v1/admin/audit' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listAdminAudit({ query: { … } });/api/v1/admin/coverageHow collectors’ copies and the catalog’s variants are covered, and the moderation queues. Aggregates only, cached for a few minutes.
collector.getAdminCoverage()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-IdcopiesobjectrequiredtotalnumberrequiredcoverednumberrequirednonenumberrequiredvariantnumberrequiredlinkedFetchednumberrequiredlinkedPendingnumberrequiredunlinkednumberrequiredunlinkedUntriednumberrequiredunlinkedNotFoundnumberrequiredunlinkedWeaknumberrequiredvariantsobjectrequiredoursnumberrequiredprovidernumberrequiredmissingnumberrequiredvariantsTiernumberrequiredadded24hobjectrequiredissuesnumberrequirededitionsnumberrequiredmoderationobjectrequiredvariantsnumberrequiredvariantsImportnumberrequiredvariantsCollectednumberrequiredcoversnumberrequiredcoversCollectednumberrequiredcodesnumberrequiredcodesCollectednumberrequiredgeneratedAtstringrequirednot_found: Not an admin (moderator): the same 404 as a missing route.
internal: Something went wrong on our side (quote the requestId).
not_migrated: The tool needs a database update that hasn’t been applied yet.
curl 'https://collection.id/api/v1/admin/coverage' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminCoverage();/api/v1/admin/healthIncidents by status, every cron job’s state, recent cron runs and capacity checks.
collector.getAdminHealth()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
statusoptional | query | enum | Which items (default open).One of open, resolved, alldefault "open" |
generatedAtstringrequiredcountsobjectrequiredopennumberrequiredresolvednumberrequiredmonitoringSincestring or nullrequiredinvalid_request: The query or body doesn’t match the schema (see errors[]).
not_found: Not an admin (moderator): the same 404 as a missing route.
internal: Something went wrong on our side (quote the requestId).
not_migrated: The tool needs a database update that hasn’t been applied yet.
curl 'https://collection.id/api/v1/admin/health' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminHealth({ query: { … } });/api/v1/admin/health/incidents/{id}Set an operations incident to resolved or back to open.
collector.updateAdminIncident()admin:ops:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
statusenumrequiredOne ofopenresolved
object
incidentobjectrequiredidstringrequiredstatusenumrequiredOne ofopenresolved
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.
internal: Something went wrong on our side (quote the requestId).
not_migrated: The tool needs a database update that hasn’t been applied yet.
curl -X PATCH 'https://collection.id/api/v1/admin/health/incidents/<id>' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.updateAdminIncident({ path: { id }, body: { … } });/api/v1/admin/overviewReal counts of rows that exist right now; nothing estimated.
collector.getAdminOverview()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-IdgeneratedAtstringrequiredpeopleobjectrequiredusersnumberrequirednewThisWeeknumberrequireddisablednumberrequiredadminsnumberrequiredpublicProfilesnumberrequiredcollectionsobjectrequiredownednumberrequiredwishlistnumberrequiredsoldnumberrequiredphotosnumberrequiredcatalogobjectrequiredpublishersnumberrequiredseriesnumberrequiredissuesnumberrequirededitionsnumberrequiredcreatorsnumberrequiredprovisionalSeriesnumberrequiredprovisionalIssuesnumberrequiredmoderationobjectrequiredpendingnumberrequiredcoversPendingnumberrequiredvariantsPendingnumberoptionalcodesPendingnumberoptionalmergesLast30DaysnumberrequiredopenReportsnumberrequiredimportsobjectrequiredactivenumberrequiredfailedLast7DaysnumberrequiredlastActivityAtstring or nullrequiredconflictsOpennumberoptionalconflictsNewLast7DaysnumberoptionalstoresobjectrequiredactivenumberrequiredunverifiednumberrequiredactiveListingsnumberrequiredopenHoldsnumberrequiredpaidSubscriptionsmap of numberrequiredoperationsobjectoptionalopenSupportnumberrequiredopenIncidentsnumberrequiredfailedRunsLast24hnumberrequiredplanGrantsmap of numberrequiredliveAnnouncementsnumberrequiredcurl 'https://collection.id/api/v1/admin/overview' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminOverview();/api/v1/admin/settingsSeller fee and hold defaults.
collector.getAdminSettings()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-IdsellerFeeobjectrequiredfeeBpsnumberrequiredminFeeCentsnumberrequiredmaxFeeCentsnumberrequiredcurrencystringrequiredholdsobjectrequireddefaultHoldDaysnumberrequiredmaxOpenHoldsPerBuyernumberrequiredupdatedAtobjectrequiredsellerFeestring or nullrequiredholdsstring or nullrequiredcurl 'https://collection.id/api/v1/admin/settings' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminSettings();/api/v1/admin/settingsValidated, then written with its audit row in one transaction.
collector.updateAdminSettings()admin:ops:write(API keys are coming soon)X-Request-Idobject
sellerFeeobjectoptionalfeeBpsintegerrequired0–3000minFeeCentsintegerrequired0–10000000maxFeeCentsintegerrequired0–10000000holdsobjectoptionaldefaultHoldDaysintegerrequired1–30maxOpenHoldsPerBuyerintegerrequired1–200sellerFeeobjectrequiredfeeBpsnumberrequiredminFeeCentsnumberrequiredmaxFeeCentsnumberrequiredcurrencystringrequiredholdsobjectrequireddefaultHoldDaysnumberrequiredmaxOpenHoldsPerBuyernumberrequiredupdatedAtobjectrequiredsellerFeestring or nullrequiredholdsstring or nullrequiredcurl -X PUT 'https://collection.id/api/v1/admin/settings' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.updateAdminSettings({ body: { … } });/api/v1/admin/usageThe activation funnel over days (30, 90 or 180), and weekly cohorts and feature use over weeks (4–26). Small counts are hidden.
collector.getAdminUsage()admin:ops:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
daysoptional | query | integer | default 90 |
weeksoptional | query | integer | 4–26 · default 12 |
generatedAtstringrequiredtodaystringrequireddaysnumberrequiredweeksnumberrequiredfunnelarray of objectrequiredstepstringrequireddetailstringrequiredusersnumber or nullrequirednull: 1-4 people, hidden.
cohortsarray of objectrequiredweekstringrequiredMonday the cohort’s week starts (YYYY-MM-DD, UTC).
stepstringrequiredusersnumber or nullrequiredfeaturesarray of objectrequiredweekstringrequiredeventstringrequireddetailstring or nullrequiredusersnumber or nullrequireduserDaysnumber or nullrequiredcurl 'https://collection.id/api/v1/admin/usage' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getAdminUsage({ query: { … } });