/collection/items/{id}Change any of a copy’s fields; leave out what stays. Selling it: status "sold" with salePrice (soldOn defaults to today). What the copy is (its issue, edition or variant) changes with POST /collection/items/{id}/repoint, which keeps its history.
collector.updateCopy()collection:writeX-Request-Ididstring (uuid)requiredstatusenumownedsoldgradenumber or null0.5–10
gradingCompanyenum or nullWho slabbed it; null for raw.
cgccbcspsapgxegshgaothercertNumberstring or nullat most 256 characters
pageQualityenum or nullwhiteoff_white_to_whiteoff_whitecream_to_off_whitecreamlight_tantanbrittleisSignedbooleansignaturesarray of stringat most 20 items
signatureAuthenticationenum or nullcgc_signature_seriescbcs_verifiedpsa_dnacoawitnessedunverifiedisRestoredbooleancopyLabelstring or nullYour own name for this copy, e.g. "Signed at NYCC".
at most 320 characters
purchasePriceMoneyInput or nullWhat you paid. Its currency is the copy’s.
acquiredOnstring (date) or nullacquiredFromstring or nullat most 800 characters
salePriceMoneyInput or nullSold copies: what it sold for.
soldOnstring (date) or nullforTradebooleanaskingPriceMoneyInput or nullFor trade: what you’d take. In the copy’s currency.
ownValueMoneyInput or nullYour own value for it, used instead of the market estimate.
ownValueNotestring or nullat most 2000 characters
locationstring or nullWhere it is: a storage location’s name ("Long box 12"). A new name makes a new location.
at most 480 characters
readStatusenum or nullunreadreadingreadratinginteger or null1–5
tagsarray of stringat most 30 items
notesstring or nullat most 32000 characters
isHiddenbooleanHidden from your public profile.
200OKThe copy as it is now.
A copy in your collection (owned or sold).
idstring (uuid)requiredstatusenumrequiredownedsoldcoverUrlstring (uri) or nullrequiredcurrencystringrequiredThe copy’s currency: its purchase, asking and own-value amounts are in it.
gradenumber or nullrequiredgradingCompanystring or nullrequiredcertNumberstring or nullrequiredcertStatusstring or nullrequiredpageQualitystring or nullrequiredisSignedbooleanrequiredsignaturesarray of stringrequiredsignatureAuthenticationstring or nullrequiredisRestoredbooleanrequiredcopyLabelstring or nullrequiredisLabeledbooleanrequiredIt has a printed QR label.
acquiredOnstring (date) or nullrequiredacquiredFromstring or nullrequiredsoldOnstring (date) or nullrequiredforTradebooleanrequiredvalueobjectrequiredWhat it’s worth (GET /insights/items/{id} has the history and the sales behind it).
Your own value when you set one, else the market estimate.
ownNotestring or nullrequiredmethodstring or nullrequiredconfidencenumber or nullrequiredupdatedAtstring (date-time) or nullrequiredlocationstring or nullrequiredtagsarray of stringrequirednotesstring or nullrequiredreadStatusstring or nullrequiredratinginteger or nullrequiredisHiddenbooleanrequiredcodesarray of stringrequiredBarcodes and other codes on it and its edition.
sourcestring or nullrequiredcreatedAtstring (date-time)requiredupdatedAtstring (date-time)requiredinvalid_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.
copy_not_found: No copy of yours with that id.
payload_too_large: The body is over 1,048,576 bytes, this operation’s limit.
currency_mismatch: An amount isn’t in the copy’s currency (details: field, currency, expected).
invalid_copy: Values the copy can’t have together (a cert without its grader, a sale on a copy you own…).
rate_limitedtemporarily_blocked
rate_limited: Over the caller’s limit: the per-minute burst or the per-day quota (RateLimit headers; wait Retry-After seconds).
temporarily_blocked: Too many refused requests in a row: blocked for a while (Retry-After says how long).
internal: Something went wrong on our side (quote the requestId).