Errors and limits
Errors come back in the format of the API you call: OpenAI's {"error": {"message", "type", "code"}} on the OpenAI-style endpoints, Anthropic's {"type": "error", "error": {...}} on /v1/messages.
Error codes
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request, unsupported |
The body is not valid or asks for something that is not offered |
| 401 | invalid_api_key |
No key, or a key that is revoked |
| 403 | access_disabled |
The AI service is suspended or cancelled |
| 404 | model_not_found |
The model does not exist or is switched off |
| 429 | rate_limit_exceeded |
Too many requests per minute, or too many at the same time |
| 429 | insufficient_quota |
A monthly limit is reached |
| 502 | upstream_error, upstream_unavailable |
The model failed or could not be reached |
| 503 | provider_unavailable |
The model is not available right now |
Rate limits
60 requests per minute per key, and at most 8 requests of one AI service running at the same time. A 429 for the rate limit has a Retry-After header.
Spending limits
There are three monthly limits: per organisation, per service and per key. Before a request starts, its worst case is set against what is left. If it does not fit, max_tokens is lowered to what the budget allows; if nothing is left you get insufficient_quota until the next month.
Stopped streams
If you close a stream early, the tokens produced until then are billed.
Availability
Requests are processed in the EU. Your organisation can switch on a fallback to a second EU datacenter in My Typno; it is off by default. Without it, an outage gives a 502.