Every page in this reference has a playground. Paste your secret key into it and the
request runs against your own store, so the response you see is your real data.
Requests from the playground count against your rate limit,
and writes made from it are real writes.
Before you start
Four conventions apply to every endpoint here, and none of them are visible from a single example request. Each one has cost an integration real time.Money is integer minor units
1999 with usd is 19.99. Sending 19.99 is refused, sending 19 charges 19 cents.Writes need an Idempotency-Key
Required on every write, not just retries. It is what makes a retry after a timeout safe.
Read, write and delete are separate
write_products does not grant reads, and deleting needs write_products:delete.Paging is by cursor, forward only
No
page or offset. Pass page.next_cursor back as after.Authentication
Every request carries a secret key as a bearer token:What every operation shares
Branch on
error.code, never on error.message. See Error envelope.
Scopes on each endpoint
Every operation lists the scope it requires. A key missing that scope gets403 with a
message naming the exact scope to add, so you can develop against a minimal key and grant
scopes as you hit them rather than guessing up front.
Unknown fields are refused
A body field or query parameter this API does not define is refused with400, at every
nesting depth. It is not silently dropped.
A typo that is ignored looks like a working integration until someone notices the field
never took effect. Being refused on the first call is the cheaper failure. See
Query parameters.
