Rate Limiting
Per-environment request limits, response headers, and retry strategies.
The API enforces rate limits to ensure fair usage and service stability. Limits are applied per API key — your sandbox and production keys each have their own budget.
Current limits
| Environment | Window | Limit |
|---|---|---|
| Sandbox | Per minute | 40 requests |
| Sandbox | Per hour | 5,000 requests |
| Production | Per minute | 60 requests |
Higher production throughput can be granted on request — contact the Call+ team with your expected volume and tenant id.
Rate limit headers
Every authenticated 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 |
When a rate limit is exceeded, the response also includes:
| Header | Description |
|---|---|
Retry-After | Seconds to wait before retrying |
Handling a 429 response
When you exceed the limit, the API returns (sandbox example — production is identical with its 60-request limit):
HTTP 429
Retry-After: 17
X-RateLimit-Limit: 40
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1786356017{
"success": false,
"requestId": "...",
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Limit: 40 requests per minute."
}
}Recommended retry strategy
- Read the
Retry-Afterheader value. - Wait for the specified number of seconds.
- Retry the request.
For automated integrations, implement exponential backoff as a fallback:
wait = min(2^attempt * 1 second, 60 seconds)
Tips
- Batch your work — run simulations sequentially rather than in parallel bursts.
- Cache results — simulation results don't change. Store the
simulationIdand retrieve results withGET /simulations/{simulationId}/pdfinstead of re-running the simulation. - Use
sourceReferenceId— sending the samesourceReferenceIdreturns the previously persisted simulation instead of running a new one. Note the request itself still counts toward your rate limit budget. - Monitor the headers — check
X-RateLimit-Remainingproactively to avoid hitting the limit.
Updated 2 months ago
Did this page help you?