API reference / Collectors
Slab certificates: the grader’s record for a cert, and duplicate-claim checks.
/api/v1/certs/lookupWhich grading companies’ records can be looked up here (the copy form only offers those).
collector.listCertProviders()collection:read(API keys are coming soon)If-None-MatchX-Request-Idobject
availablemap of booleanrequiredWhether each grader’s records can be looked up here.
unauthorized: Not signed in (no session or token, or an expired one).
internal: Something went wrong on our side (quote the requestId).
curl 'https://collection.id/api/v1/certs/lookup' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.listCertProviders();/api/v1/certs/lookupThe grader’s record for a cert, for the copy form before the copy is saved. Served from the shared cache while fresh; otherwise one call to the grader, within its daily budget. 60 lookups an hour.
collector.lookupCert()collection:read(API keys are coming soon)X-Request-Idobject
companyenumrequiredOne ofcgccbcspsapgxegshgaother
certstringrequired1–80 charactersrefreshbooleanoptionalAsk the grader even if the cache is fresh.
object or object or object
Option 1: object
companyenumrequiredOne ofcgccbcspsapgxegshgaother
certstringrequiredNormalized.
status"found"requiredfetchedAtstring (date-time)requiredcachedbooleanrequiredOption 2: object
companyenumrequiredOne ofcgccbcspsapgxegshgaother
certstringrequiredNormalized.
status"not_found"requiredsourceUrlstring (uri) or nullrequiredfetchedAtstring (date-time)requiredcachedbooleanrequiredOption 3: object
companyenumrequiredOne ofcgccbcspsapgxegshgaother
certstringrequiredNormalized.
status"unavailable"requiredreasonenumrequiredOne ofunsupporteddisabledbudgeterror
messagestringrequiredinvalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
invalid_cert: Cert numbers are 4–64 letters and digits.
unauthorized: Not signed in (no session or token, or an expired one).
rate_limited: More than 60 lookups an hour; wait the Retry-After seconds.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/certs/lookup' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.lookupCert({ body: { … } });/api/v1/collection/cert-statusA live duplicate check while a collector types a cert number: certificates are unique among unsold copies. Says only whether a claim exists, never whose.
collector.getCertStatus()collection:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
companyrequired | query | enum | One of cgc, cbcs, psa, pgx, egs, hga, other |
certrequired | query | string | 1–80 characters |
excludeoptional | query | string (uuid) | A copy of yours to leave out (the one being edited). |
object
companyenumrequiredOne ofcgccbcspsapgxegshgaother
certstringrequiredNormalized.
statusenumrequiredfree: nobody holds it; mine: already in your collection; claimed: another collector holds it.
One offreemineclaimed
itemIdstring (uuid) or nullrequiredinvalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_cert: Cert numbers are 4–64 letters and digits.
unauthorized: Not signed in (no session or token, or an expired one).
internal: Something went wrong on our side (quote the requestId).
curl 'https://collection.id/api/v1/collection/cert-status' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getCertStatus({ query: { … } });/api/v1/collection/items/{id}/cert-checkThe saved result of checking the copy’s slab certificate against the grader’s record, and the record from the shared cache. Never calls the grader.
collector.getCopyCertCheck()collection:read(API keys are coming soon)If-None-MatchX-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
checkobject or nullrequiredThe saved result; null when the copy hasn’t been checked.
resultenumrequiredOne ofverifiedmismatchnot_found
mismatchesarray of enumrequiredOne oftitleissueyearpublishergradelabelpage_quality
checked_atstring (date-time)requiredrecord_fetched_atstring (date-time) or nullrequiredcompanyenumrequiredOne ofcgccbcspsapgxegshgaother
cert_numberstringrequiredissue_idstring (uuid)requiredgradenumber or nullrequiredlabel_typestring or nullrequiredpage_qualitystring or nullrequiredThe grader’s record from the shared cache.
lookupobjectrequiredavailablebooleanrequiredreasonenum or nullrequiredOne ofunsupporteddisabled
messagestring or nullrequiredoutcomeobject or object or nullrequiredWhat a POST did; null for GET.
Option 1: object
statusenumrequiredOne ofcheckedno_certgone
Option 2: object
status"unavailable"requiredreasonenumrequiredOne ofunsupporteddisabledbudgeterror
messagestringrequiredunauthorized: Not signed in (no session or token, or an expired one).
not_found: Nothing at that address.
internal: Something went wrong on our side (quote the requestId).
curl 'https://collection.id/api/v1/collection/items/<id>/cert-check' \
-H "Authorization: Bearer $COLLECTOR_TOKEN"await collector.getCopyCertCheck({ path: { id } });/api/v1/collection/items/{id}/cert-checkChecks the copy’s cert against the grader’s record (“Verify with PSA”): from the shared cache while it’s fresh, unless refresh: true. The body is optional. 60 an hour.
collector.checkCopyCert()collection:write(API keys are coming soon)X-Request-Id| Name | In | Type | About |
|---|---|---|---|
idrequired | path | string (uuid) |
object
refreshbooleanoptionalAsk the grader even if the cache is fresh.
object
checkobject or nullrequiredThe saved result; null when the copy hasn’t been checked.
resultenumrequiredOne ofverifiedmismatchnot_found
mismatchesarray of enumrequiredOne oftitleissueyearpublishergradelabelpage_quality
checked_atstring (date-time)requiredrecord_fetched_atstring (date-time) or nullrequiredcompanyenumrequiredOne ofcgccbcspsapgxegshgaother
cert_numberstringrequiredissue_idstring (uuid)requiredgradenumber or nullrequiredlabel_typestring or nullrequiredpage_qualitystring or nullrequiredThe grader’s record from the shared cache.
lookupobjectrequiredavailablebooleanrequiredreasonenum or nullrequiredOne ofunsupporteddisabled
messagestring or nullrequiredoutcomeobject or object or nullrequiredWhat a POST did; null for GET.
Option 1: object
statusenumrequiredOne ofcheckedno_certgone
Option 2: object
status"unavailable"requiredreasonenumrequiredOne ofunsupporteddisabledbudgeterror
messagestringrequiredinvalid_request: The query or body doesn’t match the schema (see errors[]).
invalid_json: The body isn’t JSON.
unauthorized: Not signed in (no session or token, or an expired one).
not_found: Nothing at that address.
rate_limited: More than 60 checks an hour; wait the Retry-After seconds.
internal: Something went wrong on our side (quote the requestId).
curl -X POST 'https://collection.id/api/v1/collection/items/<id>/cert-check' \
-H "Authorization: Bearer $COLLECTOR_TOKEN" \
-H 'Content-Type: application/json' \
-d @body.jsonawait collector.checkCopyCert({ path: { id }, body: { … } });