Rate limits
Every limit GET /v1/rate-limits publishes, with the value it enforces today and what you get when you reach it. The figures on this page are read from the gateway as it renders.
No x-ratelimit header is sent with a response. Reaching a request-rate or queue ceiling answers 429; request-rate limits include Retry-After, while the open-stream cap does not.
The rate limits and caps
Each limit applies to traffic sharing your account, key or address. Clients behind the same address share its public allowance. A price-locked request can still be turned away for capacity inside its window; that is the market rather than a limit, and the next section says so.
| Limit | Value | When you reach it |
|---|---|---|
| Inference requests per minute, per API key | 1,200 | 429 rate_limit_error with Retry-After. |
| Batch submissions per minute, per account | 1,200 | 429 rate_limit_error with Retry-After. |
| Order, batch, account and usage operations per minute, per account | 2,400 | 429 rate_limit_error with Retry-After. |
| File uploads, reads and deletes per minute, per account | 1,200 | 429 rate_limit_error with Retry-After. |
| Public requests per minute, per address | 600 | 429 rate_limit_error with Retry-After. |
| Open market streams, per address | 5 | 429, and the stream is refused. Close one to open another. |
| Queued orders, per account | 2,000 | 429 rate_limit_error. Counted across every model. Batch lines have a cap of their own in this table. |
| Request body | 8 MB | 413. |
| Downloads per hour, per account: results, batch files and request logs together | 4 GB | 429 rate_limit_error with Retry-After. One download may finish past the line; the next waits. |
| Active API keys, per account | 50 | 403 when making another. Revoke one first. |
| Order timeout | 10 seconds to 30 days | A max_wait from one second up to the floor is raised to the floor, and one above the configured ceiling is lowered to it. The request schema accepts at most 2592000; larger values, zero and fractions are refused with 400. The account setting is refused with 400 outside the range. |
| Price lock execute window | 10 seconds | A locked request that has not started by then expires, with status expired and 429 capacity_unavailable. Nothing is charged. |
| Batches running at once, per account | 5 | 429 rate_limit_error on the next create, with Retry-After. |
| Queued batch orders, per account | 5,000 | The batch stays in validating and fans out the rest as lines finish. Never an error. |
| Requests per batch input file | 10,000 | The batch fails validation, with the count in its error. |
| Batch input file size | 50 MB | 413 on upload. |
| Data storage, longest period | 30 days | 400 on the setting. A per-request retention_days is clamped to the account setting. |
| Data storage, total size | 100 GB | The oldest stored bodies are deleted to make room. Never an error. |
| Shortest time batch output is kept | 1 day | A floor rather than a limit: batch output is kept at least this long whatever your storage setting. |
| Top-up | $10 to $10,000 | 400 on the top-up form. |
What is a rate limit and what is the market
A request that waits because the level is above its price limit has hit no rate limit. It is in the book, ranked by its price limit, and it runs when the fleet has room for it, even if the published level is still above its price. It waits until your timeout, and pays the lower of the level and its price limit when it runs. The rows above are the constants; the wait is the product.
Two refusals look like limits and are the market instead: 402 when your balance cannot cover a request at the current level, and 429 capacity_unavailable when a price-locked request misses its window. On a fixed-price model the same two answer for its prices and its capacity: 402 when your balance cannot cover the request at those prices, and 429 capacity_unavailable when no slot comes free before its timeout. Neither is charged, and both are on errors and retries.
Request budgets start full and refill continuously at the published rate. A burst can spend the available tokens; Retry-After reports when another token is expected. Inference includes Messages token counting. Account operations also include repricing, deleting results and changing account defaults.
Reading them from code
GET /v1/rate-limits needs no key and answers with every figure above, so a client can pace itself instead of learning a ceiling from a 429.
curl https://api.openfill.ai/v1/rate-limitsTo request a higher limit, email [email protected] with your workload and the limit concerned. Each request is reviewed individually.