Overview
The Arcus API enforces rate limits per API key to ensure fair usage across all integrations. Limits are applied using a sliding-window bucket per key.Default limits
| Tier | Requests per minute | Requests per second (burst) |
|---|---|---|
| Test mode keys | 60 | 10 |
| Live mode keys (standard) | 300 | 50 |
| Live mode keys (elevated) | 1,200 | 100 |
Rate limit headers
Every response includes these headers:| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (seconds) when the window resets |
429 Too Many Requests with an additional header:
| Header | Description |
|---|---|
Retry-After | Seconds to wait before retrying |
Handling rate limits
SDK auto-retry
All SDKs handle 429 responses automatically using theRetry-After header:
Best practices for high-volume integrations
- Bulk endpoints: prefer batch operations (e.g. bulk product import) over individual creates in a loop
- Pagination: use
limit=100to minimize list requests - Concurrency: keep concurrent requests below 10 per key; spread load across multiple keys if needed
- Backpressure: implement exponential backoff even for retries that are not rate-limit-related
- Webhooks over polling: subscribe to webhook events instead of polling list endpoints; polling is the most common cause of rate limit exhaustion
Idempotency and retries
Always includeIdempotency-Key on POST/PATCH/DELETE requests before retrying. If you hit a 429 and retry without an idempotency key, you may create duplicate records after the window resets.
