Rate Limiting

Request limits, response headers, and retry strategies.

The API enforces per-tenant rate limits to ensure fair usage and service stability.

Current limits

WindowLimit
Per minute40 requests
Per hour5,000 requests

Limits are applied per API key (per tenant). All endpoints share the same quota.

Rate limit headers

Every authenticated response includes these headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per minute
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.
  • Monitor the headers — check X-RateLimit-Remaining proactively to avoid hitting the limit.