Skip to content

Errors and limits

Both APIs return errors in this format:

{
"error": {
"message": "<ExceptionType: Human-readable error message>",
"type": "exception_type",
"code": "error_code"
}
}

The registry API returns validation errors with a detail field instead.

StatusMeaningRetry?
400Invalid request or parametersNo, fix the request
401Missing, invalid or expired tokenOnce, after getting a new token
403Missing role, or X-Tenant-ID does not match the tokenNo
404Resource not foundNo
409ConflictNo
422The request is valid but cannot be processedNo
429Rate limit exceededYes, with backoff
500 and other 5xxServer errorYes, with backoff

When you send too many requests, the service answers with 429:

{
"error": {
"message": "<RateLimitError: You have exceeded the rate limit. Please try again later.>",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}

Contact Support if your use case needs higher limits.

Once a stream has started, the HTTP status can no longer change. Errors are then delivered inside the stream:

  • Chat completions: a notification event with type error, followed by [DONE]. See Streaming events.
  • Responses API: an error event followed by response.failed. See Responses API.
  • Retry 429 and 5xx with exponential backoff and jitter, for example after 1, 2, 4 and 8 seconds.
  • On 401, get a new token and retry once.
  • Do not retry other 4xx errors without changing the request.
  • Do not retry a chat request automatically if the agent may already have run tools that change data. Let the user decide.