Limits
Limits are per key and per workspace, set by plan, shown on the key in the Console and reported in the response headers. Every number is a placeholder until decided Not decided yet.
| Limit | Scope | Value | Over the limit |
|---|---|---|---|
| Requests per minute | Key, workspace | Not decided yet by plan | 429 rate_limit_exceeded, param: "requests" |
| Tokens per minute (language models) | Key, workspace | Not decided yet | 429 rate_limit_exceeded, param: "tokens" |
| Task units per minute | Key, workspace | Not decided yet | 429 rate_limit_exceeded, param: "units" |
| Concurrent streams | Key | Not decided yet | 429 concurrency_limit_exceeded, param: "streams" |
Jobs in queued, assigned or running | Workspace | Not decided yet | 429 concurrency_limit_exceeded, param: "jobs" |
| Request body size | Request | Not decided yet | 400 request_too_large |
| Inline input bytes per request (task API) | Request | Not decided yet and the model's hips.limits | 400 input_too_large (send it as an upload) |
| Inputs per task request | Request | The model's hips.limits.max_inputs Not decided yet | 400 too_many_inputs |
messages size and context_length | Request | The model's context_length | 400 context_length_exceeded; the prompt is never truncated |
max_tokens | Request | The model's max_output_tokens | 400 max_tokens_exceeded |
tools per request, json_schema size, stop entries | Request | Not decided yet | 400 invalid_value naming the field |
| Upload size, uploads per day | Upload, workspace | Not decided yet by plan | 400 upload_too_large, 429 rate_limit_exceeded param: "uploads" |
| Body arrival | Connection | A stalled body is closed after Not decided yet | 400 request_timeout |
| Job result retention | Job | Not decided yet | 404 result_expired |
| Synchronous task time | Request | Not decided yet | 400 use_jobs before start; timed_out after |
- Limit
- Requests per minute
- Scope
- Key, workspace
- Value
- Not decided yet by plan
- Over the limit
- 429
rate_limit_exceeded,param: "requests"
- Limit
- Tokens per minute (language models)
- Scope
- Key, workspace
- Value
- Not decided yet
- Over the limit
- 429
rate_limit_exceeded,param: "tokens"
- Limit
- Task units per minute
- Scope
- Key, workspace
- Value
- Not decided yet
- Over the limit
- 429
rate_limit_exceeded,param: "units"
- Limit
- Concurrent streams
- Scope
- Key
- Value
- Not decided yet
- Over the limit
- 429
concurrency_limit_exceeded,param: "streams"
- Limit
- Jobs in
queued,assignedorrunning - Scope
- Workspace
- Value
- Not decided yet
- Over the limit
- 429
concurrency_limit_exceeded,param: "jobs"
- Limit
- Request body size
- Scope
- Request
- Value
- Not decided yet
- Over the limit
- 400
request_too_large
- Limit
- Inline input bytes per request (task API)
- Scope
- Request
- Value
- Not decided yet and the model's
hips.limits - Over the limit
- 400
input_too_large(send it as an upload)
- Limit
- Inputs per task request
- Scope
- Request
- Value
- The model's
hips.limits.max_inputsNot decided yet - Over the limit
- 400
too_many_inputs
- Limit
messagessize andcontext_length- Scope
- Request
- Value
- The model's
context_length - Over the limit
- 400
context_length_exceeded; the prompt is never truncated
- Limit
max_tokens- Scope
- Request
- Value
- The model's
max_output_tokens - Over the limit
- 400
max_tokens_exceeded
- Limit
toolsper request,json_schemasize,stopentries- Scope
- Request
- Value
- Not decided yet
- Over the limit
- 400
invalid_valuenaming the field
- Limit
- Upload size, uploads per day
- Scope
- Upload, workspace
- Value
- Not decided yet by plan
- Over the limit
- 400
upload_too_large, 429rate_limit_exceededparam: "uploads"
- Limit
- Body arrival
- Scope
- Connection
- Value
- A stalled body is closed after Not decided yet
- Over the limit
- 400
request_timeout
- Limit
- Job result retention
- Scope
- Job
- Value
- Not decided yet
- Over the limit
- 404
result_expired
- Limit
- Synchronous task time
- Scope
- Request
- Value
- Not decided yet
- Over the limit
- 400
use_jobsbefore start;timed_outafter
x-ratelimit-limit-requests, x-ratelimit-remaining-requests and x-ratelimit-reset-requests carry the key's request limit in the current window, what remains, and the time to reset in OpenAI's duration format; the token equivalents do the same for tokens on language-model routes, and for task units on the task API under the same header names. Clients that already read them keep working.
A limit is never a 5xx. rate_limit_exceeded names the dimension in param (requests, tokens, units, uploads); concurrency_limit_exceeded names streams or jobs. Both carry Retry-After in seconds: wait that long, then retry; nothing was charged on the refusal, and the retry is a new quote. Rate-limit windows and burst behavior are the gateway's and will be documented with the numbers.
Related sheets
- Sheet
- 12 of 13
- Detail
- A
- Updated
- 2026-10-21
- Status
- Preview