Rate Limits
Requests are counted over a 15-minute window. A recognized API key is counted on its own, so one customer’s traffic never uses up another’s. Anything else is counted by IP address.
The allowance that applies to a call is in the
RateLimit-Limit header of its response, so read it there instead of hard-coding a number. The partner ceiling is there to stop a runaway loop, not to meter a platform that serves hundreds of thousands of its own users.
Rate Limit Headers
Responses that were counted include rate limit information:
The older
X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers are sent as well, for clients that still read them. The first two carry the same numbers. X-RateLimit-Reset does not: it is the time the window ends, in Unix seconds, not a number of seconds to wait. Read the RateLimit-* headers.
When Rate Limited
If you exceed a limit, you’ll receive a429 Too Many Requests response with a Retry-After header. Retry-After and error.retryAfter are the same number, in whole seconds:
error.code tells you which limit it was. See Rate Limits for every code and for how to retry.
Endpoint-Specific Limits
Some operations have a limit of their own, on top of the allowance on your key. Each one is counted for each person, across all of their keys and sessions: a partner key and the same person’s dashboard session count together. A refusal has the codeRATE_LIMIT_USER_EXCEEDED.
Each gateway server counts these on its own, so when several servers answer, the number let through can be higher than the figure shown.
AI generations are also held to a usage budget per hour and per day, and to a number of generations running at once. A refusal says which (
COST_LIMIT_EXCEEDED or CONCURRENCY_LIMIT_EXCEEDED).
Usage Quotas
Plan Allowances
One credit pays for one AI generation. See Credits & Billing for what spends credits.
Largest single file. The same on every plan: a file can be up to 250 MB, whether it is uploaded from the app (a resumable upload) or saved to the media library by an AI assistant. A file sent in one API request (
POST /uploads) can be up to 10 MB. GET /uploads/limits returns both limits (multipart_max_bytes for one request, tus_max_bytes for a resumable upload).
Checking Your Credits
Read the credit balance of the account behind your key. Credits left arebalance minus reservedBalance: