Boxes, shelves and cases: where copies are kept. Copies belong to a place by name.
/collection/locationsEvery box and shelf, by name, with how many copies are in each (all of them in one page). A place’s copies: GET /collection/items?filter[location]=<name>.
collector.listLocations()collection:readIf-None-MatchX-Request-Id200OKYour places.
object
nextCursornullrequiredAlways null: every place comes in one page.
304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
unauthorized: Not signed in (no session or token, or an expired one).
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).
/collection/locationsA box, shelf or case. Its kind is guessed from the name when left out ("Long box 12" is a long box).
collector.createLocation()collection:writeIdempotency-KeyX-Request-IdnamestringrequiredIts name, unique in your collection ("Long box 12").
at most 480 characters
kindenumGuessed from the name when left out.
long_boxshort_boxmagazine_boxboxdrawershelfslab_caseothernotesstring or nullat most 2000 characters
201CreatedAdded.
A place you keep copies (a box, a shelf). Copies belong to it by name: their location.
idstring (uuid)requirednamestringrequiredkindstringrequiredlong_box, short_box, magazine_box, box, drawer, shelf, slab_case or other.
notesstring or nullrequiredcopyCountintegerrequiredlabelCodestring or nullrequiredThe code on its printed label, if it has one.
lastAuditedAtstring (date-time) or nullrequiredcreatedAtstring (date-time)requiredinvalid_requestinvalid_jsoninvalid_idempotency_key
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.
unauthorized: Not signed in (no session or token, or an expired one).
idempotency_in_progresslocation_exists
idempotency_in_progress: The first request with this key is still running.
location_exists: You already have a place with that name.
payload_too_large: The body is over 1,048,576 bytes, this operation’s limit.
idempotency_key_reused: This key was used for a different request.
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).
/collection/locations/{id}One place, with how many copies are in it.
collector.getLocation()collection:readIf-None-MatchX-Request-Ididstring (uuid)required200OKThe place.
A place you keep copies (a box, a shelf). Copies belong to it by name: their location.
idstring (uuid)requirednamestringrequiredkindstringrequiredlong_box, short_box, magazine_box, box, drawer, shelf, slab_case or other.
notesstring or nullrequiredcopyCountintegerrequiredlabelCodestring or nullrequiredThe code on its printed label, if it has one.
lastAuditedAtstring (date-time) or nullrequiredcreatedAtstring (date-time)required304Not ModifiedNot modified: your copy (the ETag in If-None-Match) is current.
unauthorized: Not signed in (no session or token, or an expired one).
not_found: Nothing at that address.
location_not_found: No place of yours with that id.
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).
/collection/locations/{id}Removes the place and its label. Its copies keep their location text; they aren’t moved or removed.
collector.deleteLocation()collection:writeX-Request-Ididstring (uuid)required200OKRemoved.
object
ok"true"requiredunauthorized: Not signed in (no session or token, or an expired one).
not_found: Nothing at that address.
location_not_found: No place of yours with that id.
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).
/collection/locations/{id}Rename it (its copies follow the new name: Collector and Pro plans), change its kind or notes, or record when you last checked it.
collector.updateLocation()collection:writeX-Request-Ididstring (uuid)requirednamestringRenames it on its copies too.
at most 480 characters
kindenumlong_boxshort_boxmagazine_boxboxdrawershelfslab_caseothernotesstring or nullat most 2000 characters
lastAuditedAtstring (date-time) or nullWhen you last checked what’s in it.
at most 64 characters
200OKThe place as it is now.
A place you keep copies (a box, a shelf). Copies belong to it by name: their location.
idstring (uuid)requirednamestringrequiredkindstringrequiredlong_box, short_box, magazine_box, box, drawer, shelf, slab_case or other.
notesstring or nullrequiredcopyCountintegerrequiredlabelCodestring or nullrequiredThe code on its printed label, if it has one.
lastAuditedAtstring (date-time) or nullrequiredcreatedAtstring (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).
feature_required: Renaming a place (its copies follow) comes with the Collector and Pro plans.
not_found: Nothing at that address.
location_not_found: No place of yours with that id.
location_exists: You already have a place with that name.
payload_too_large: The body is over 1,048,576 bytes, this operation’s limit.
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).