Skip to main content
Orq.ai enforces limits at three layers. Every request to the AI Gateway passes a plan-based platform rate limit, any Budget limits that match the request, and finally the upstream provider’s own quotas. Knowing which layer rejected a request is the first step to fixing it.

Platform rate limits

Each workspace is limited to a fixed number of requests per minute based on its subscription. When the limit is reached, requests are rejected with 429 Too Many Requests until the rolling 60-second window resets.
  • Limits use a rolling 60-second window, the same window that applies to budget requests-per-minute limits.
  • The daily cap applies to the Free plan only.
  • Custom plans can arrange higher per-minute limits with Orq.ai.
  • On-premise deployments are licensed rather than metered: plan-based limits do not apply. A single system-wide cap can be enforced with the ORQ_SYSTEM_RPM_LIMIT environment variable.
Platform limit rejections return 429 with a Retry-After header and the X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.

Budget limits

Budgets apply configured limits to a named target. A budget defines one or more limits: Cost in USD, Tokens, and Requests per minute. See Budgets for how to configure them. Requests per minute always uses a rolling 60-second window, independent of the reset period. A monthly budget’s 50 req/min still allows 50 requests in any single minute and resets its request counter 60 seconds after the first request in the window, not at month end. The reset period (Daily, Weekly, Monthly, Yearly, One-time) applies to cost and token limits only.

Limits on an API key

API keys do not carry limit fields of their own. Set cost, token, or requests-per-minute limits on a key by creating a Budget scoped to that API Key. The key’s remaining capacity is visible in the budget’s detail page, and its cost and token capacity in the X-RateLimit-*-Cost and X-RateLimit-*-Tokens response headers.
The unsuffixed X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers report the plan’s platform rate limit on a successful request, not a budget’s requests-per-minute limit, because the platform limiter writes them last. A budget’s requests-per-minute values appear in these headers only on a 429 raised by that budget. Read budget request consumption from the budget’s detail page instead.
Legacy API keys, created before the current unified key model, do not support budget-based cost, token, or rate limits. Create a current API key and scope a Budget to it instead.

Multiple limits on one request

A request can match several budgets at once: for example, a budget scoped to the workspace and another scoped to the calling API key. Every matching budget is enforced, and each tracks its own usage. The most restrictive applicable limit binds. See Budget levels and interaction for the full rules and worked examples.

The 429 response

When any limit is exceeded, the gateway returns 429 Too Many Requests with an OpenAI-compatible error body. Budget rejections carry scope_kind, scope_target_id, and dimension:
Budget rejection (requests per minute)
The code and dimension identify the exceeded limit: scope_kind and scope_target_id identify which budget rejected the request and are present only on budget rejections. The message text varies by limit type; use the code field for programmatic matching.

Rate limit headers

Rate limit headers are emitted per dimension, and each group of three is present only when that dimension applies to the request. A response therefore carries some of these headers, not all of them. Headers appear on successful requests (showing remaining capacity) as well as on rejections. Two cases drop headers that the table otherwise lists as always present. The unsuffixed X-RateLimit-* triplet is omitted when the request carries no workspace context, and in on-premise deployments unless ORQ_SYSTEM_RPM_LIMIT is set. Retry-After is omitted when a rejected budget never resets on a clock, such as a One-time budget.

Retries and fallbacks

429 is retryable. The gateway’s Retries feature retries on 429 by default with exponential backoff and honors the Retry-After header, and fallbacks route to a backup model when the primary is rate-limited. Retries run inside the gateway on a single incoming request (the platform rate limiter counts inbound client requests, not upstream calls), so they do not consume additional platform or budget quota.

See also

Budgets

Create budgets with cost, token, and requests-per-minute limits and configure alerts.

Budget levels

How budgets at different levels interact when several apply to the same request.

API Keys

Create and manage AI Gateway API keys, then scope a budget to cap usage.

Fallbacks & Retries

Retry rate-limited requests with backoff and route to fallback models.