(Docs)
Errors & limits
Errors are JSON with a single
error message. Only answered requests are charged.Status codes
| Status | Meaning | What to do | Charged |
|---|---|---|---|
| 200 | Answered | — | yes |
| 400 | Invalid request (message says which field) | Fix the request; do not retry unchanged. | no |
| 401 | Missing, unknown or revoked key | Check the Authorization header and the key. | no |
| 402 | Plan allowance used up, or balance too low | Upgrade, top up, or allow pay-as-you-go in the console. | no |
| 413 | Body larger than 256 KB | Send less state. | no |
| 429 | Rate limit exceeded | Wait for Retry-After seconds, then retry. | no |
| 502 | Model temporarily unavailable | Retry with exponential backoff. | no |
{ "error": "free allowance used up — top up your balance or choose a plan" }Rate limits
Limits apply per API key and per minute, with short bursts allowed. Each response carries x-ratelimit-limit and x-ratelimit-remaining; a 429 also carries Retry-After.
| Plan | Requests / minute / key |
|---|---|
| Free | 30 |
| Starter | 120 |
| Pro | 600 |
| Business | 2,000 |
Retrying
Retry 429 and 502 only. Start at one second, double each time, add jitter and give up after about five attempts. Requests have no side effects, so retrying is always safe.