Rate limits
Three independent limits apply. The media caps and the per-key request rate share the same 429 rate_limit_exceeded error, so the table below separates them.
Per-key request rate
Each key is limited to 120 requests per minute. Over the limit returns 429 rate_limit_exceeded with a Retry-After header (seconds). Back off and retry after that interval.
In-flight media cap
Separately from the request rate above, each user (not each key, so spreading work across several keys does not raise it) may have only a limited number of image or video jobs generating at once:
| Endpoint | Max in-flight |
|---|---|
POST /images/generations | 8 |
POST /videos | 8 |
Submitting past the cap also returns 429 rate_limit_exceeded. Wait for an in-flight job to finish, not for a clock to reset.
This cap and the per-key request rate above return the same status and type: 429 rate_limit_exceeded. The remedy differs. The request rate requires waiting out Retry-After, and this cap requires an in-flight job to finish. Check which limit was reached before choosing how to back off.
IP-level backstop
Underneath both limits above, every request to /v1/*, regardless of key, also passes through a coarse throttle of 60 requests per minute per IP. Ordinary use never reaches it, but a shared NAT or proxy serving many keys from one IP might.
Spend
Spend is bounded by the wallet balance and, optionally, a per-key monthly cap set when the key is created. At a zero balance or over the cap, calls return 402 insufficient_quota until a top-up is made or the cap is raised.