Rate Limits
All RxScale APIs enforce rate limits to ensure fair usage and system stability. The limits are per second — there is no separate per-minute quota. Every API uses the same throttle, so the rules below apply identically to all of them; only the number of requests per second differs.How the limit is counted
The limit is keyed on the client IP address — never on your API key, organisation
or user. Two API keys calling from the same outbound IP share one budget, and the same
API key used from two different outbound IPs gets two separate budgets. If several of
your systems share one outbound IP (for example behind a single NAT gateway), they
share a single budget.
Rate limit counters are held in memory on each API server instance, and every API runs on
multiple auto-scaled instances. The effective throughput you observe can therefore be
somewhat higher than the documented limit, because your requests may be spread across
instances. Treat the documented requests per second per IP as the guaranteed budget
you should design against — do not rely on the extra headroom, as it varies with how
traffic is distributed.
Limit per API
Limits are configured per API and may change. If your integration needs a higher limit, contact your RxScale account manager.
Rate Limit Response
When you exceed the rate limit, the API returns429 Too Many Requests.
Retry-After and no X-RateLimit-* headers are sent. Because the window is a fixed
one second, waiting one second is enough to get a fresh allowance — see Best Practices
below.
Request Size Limit
Every RxScale API also caps the size of a single request body.
A larger request is rejected before it is processed, with
413 Content Too Large:
Best Practices
- Use webhooks instead of polling for real-time updates. Register webhook subscriptions to receive notifications when orders or stock levels change.
- Cache responses where appropriate. Product catalogs and SKU lists change infrequently.
- Back off on
429. Wait at least one second — a full window — before the first retry, then increase the delay if you are still being throttled. Never retry immediately in a tight loop. - Check the status code before parsing the body. A
429is HTML, so code that always callsresponse.json()will fail on exactly the response it was written to handle. - Spread a bulk job over time rather than firing a burst. All your systems behind one outbound IP share a single budget.
- Batch operations when possible rather than making individual requests for each item.