The full Mercemur REST API: 487 operations across 349 endpoints, grouped by resource in the sidebar.
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:
Create one in Settings, API keys in your dashboard. It is shown once, at creation. See API keys.

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 gets 403 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 with 400, 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.

Finding an endpoint

Use the sidebar, grouped by resource, or search. The largest families are products, orders, customers, discounts, marketing campaigns, digital products and returns.