Get started
Rate limits
Each API key has a budget of requests per minute, tighter on the endpoints that read large volumes.
Requests are counted per API key, in fixed one-minute windows: a window opens with the first request counted and resets one minute later.
| Endpoints | Limit per key |
|---|---|
| Every endpoint, by default | 60 per minute |
| Lists of orders, fans and publications, fan note read | 30 per minute |
| Sent messages and analytics | 20 per minute |
| Fan note edit | 10 per minute |
| Batch AI locks (acquire, release) and AI request acknowledgement | 120 per minute each |
| Webhook replay | 30 per minute |
| Webhook test delivery | 10 per minute |
Every endpoint page states its own limit. Endpoints without a limit of their own share the default budget of the key; an endpoint with its own limit has a separate budget.
Headers
A counted request tells you where you stand in its response headers.
| Header | Meaning |
|---|---|
x-ratelimit-limit | The budget of the current window |
x-ratelimit-remaining | Requests left in the window |
x-ratelimit-reset | Seconds until the window resets |
A request refused before the rate limit check is not counted and carries none of these headers: a missing or unknown version, an invalid parameter or body, a missing or invalid key, a missing scope, an unknown path.
When you exceed it
The API answers 429 rate_limited with a Retry-After header, in seconds. Wait that long, then retry. Requests sent sooner are refused too, without extending the wait.
To export history, page through lists with limit=200 and spread the calls over time. For charts, prefer the analytics endpoints: one call returns aggregates that would take hundreds of order pages.