Rate Limiting

Per-environment request limits, response headers, and retry strategies.

The API enforces per-tenant 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

EnvironmentWindowLimit
SandboxPer minute40 requests
SandboxPer hour5,000 requests
ProductionPer minute60 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:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the window resets

When a rate limit is exceeded, the response also includes:

HeaderDescription
Retry-AfterSeconds to wait before retrying

Handling a 429 response

When you exceed the limit, the API returns:

HTTP 429
Retry-After: 42
X-RateLimit-Limit: 40
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705312260
{
  "success": false,
  "requestId": "...",
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please retry after 42 seconds."
  }
}

Recommended retry strategy

  1. Read the Retry-After header value.
  2. Wait for the specified number of seconds.
  3. 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 simulationId and retrieve results with GET /simulations/{simulationId}/pdf instead of re-running the simulation.
  • Use sourceReferenceId — sending the same sourceReferenceId returns the previously persisted simulation, which is free against the rate limit budget compared to a duplicated run.
  • Monitor the headers — check X-RateLimit-Remaining proactively to avoid hitting the limit.