Start here #
API #
571 operations across catalogue, orders, customers, pricing, and money. Call it
from any platform that can send an HTTP request.
MCP #
Point an AI client, Claude Desktop, an IDE, another agent, at one endpoint and it can read and write your live storefront.
CLI #
Pull your storefront to disk, edit it in your own editor with live preview, and publish when you’re ready.
REST API base URL for every request:
https://api.mercemur.com/api/v1 · MCP
endpoint: https://mcp.mercemur.com/mcp
The REST API in detail #
Quickstart #
Create a key and make your first call in under five minutes.
API reference #
Every endpoint, with a playground you can fire against your own store.
Rate limits #
Understand throttling and how to back off correctly.
Authentication and security #
API keys #
Secret keys, how to create them, and how to rotate one safely.
Scopes #
Read, write and delete are separate grants. 136 scopes across 66 families.
Error handling #
One envelope for every refusal, at every status.
Making requests #
Idempotency #
Every write takes an
Idempotency-Key. Retry safely.
Pagination #
Cursor paging, forward only, signed and bound to the route that issued it.
Money #
Every amount is an integer in the currency’s minor unit.
The four things that are not guessable from one endpoint #
If you read nothing else, read these. They are the conventions that a single example request will not teach you, and each one has bitten an integration.
Money is an integer in minor units, never a decimal #
1999 in a usd field is 19.99 USD. There are no fractional amounts anywhere
in this API, and no field accepts a decimal. Currencies with no minor unit,
such as JPY, take the whole number directly. See Money.
Read and write are separate grants #
Read and write are separate grants
write_products does not let a key read your catalogue, and deleting is a third grant again:
write_products:delete. A key that keeps records up to date
cannot destroy them unless you tick Delete as well. See Scopes.
Every write requires an Idempotency-Key #
Every write requires an Idempotency-Key
Not optional, and not only for retries. A request without the header is refused with
idempotency_key_required. Replaying the same key returns the stored
response rather than executing twice. See Idempotency.
Paging is by cursor, forward only #
Paging is by cursor, forward only
There is no
page or offset parameter. You send ?after= with the
page.next_cursor from the previous response for that same endpoint. A cursor from a different collection is refused. SeePagination.
Branch on code, never on message #
Every refusal on this API, at every status, has the same body:
code is the contract and is safe to switch on. The message is English prose
for a human reading a log, and its wording is not part of this contract. See
[Error envelope](/errors/envelope).