429 response immediately — no request is partially processed. Build your client to inspect the Retry-After header and pause before retrying, rather than hammering the endpoint in a tight loop.
Limits by endpoint
All limits are per API key and reset on a rolling 60-second window.| Limit | Endpoint(s) |
|---|---|
| 30 / min | Listings, prices, currency, balance, and order status — all standard GET endpoints |
| 30 / min | POST /v1/orders (places a buy order and spends real money) |
| 1 / min | GET /v1/prices/snapshot.ndjson.gz (bulk compressed snapshot) |
Sending more than 30 requests with invalid or missing API keys from the same IP address within one minute triggers an automatic 5-minute IP-level ban. During the ban every request from that IP returns
401 too_many_failed_auth regardless of which key is used. Rotate to a valid key and wait out the cooldown before retrying.429 response format
When you exceed a standard endpoint limit the API returns:Retry-After header value is an integer number of seconds you must wait before the next request will succeed.
The bulk snapshot endpoint uses a distinct error code when rate-limited:
Handling 429s in your client
ReadRetry-After and sleep for at least that many seconds before retrying. The example below shows a simple retry loop in bash: