Errors

All errors return OpenAI-shaped JSON:

{ "error": { "message": "...", "type": "...", "code": "..." } }
HTTPcodetypeRetryableWhat to do
400missing_modelinvalid_request_errornoAdd "model" to the body or use a prompt that pins one.
400unknown_modelinvalid_request_errornoSlug not in catalog. See platform models list.
503vendor_unavailableservice_unavailablewaitA dependency inside odnoga is failing. The message is deliberately generic and never carries the provider's own text: a supplier-account problem is ours, not yours. x-odnoga-ticket carries the ticket already open with the odnoga team at highest priority. Retry shortly or send another model.
400model_deprecatedinvalid_request_errornoThe model is retired. The message names the retirement date and the replacement; move to it. An organisation admin can instead enable Organisation → Defaults → Retired models so the same-vendor replacement serves the old name automatically (the response then carries x-odnoga-model-fallback).
400model_not_allowedinvalid_request_errornoWorkspace allowlist rejected this model. Add it under Routing → Allowed models.
400missing_messagesinvalid_request_errornoSend messages (or prompt).
400invalid_promptinvalid_request_errornoPrompt slug not found or label/version mismatch.
401invalid_api_keyauthentication_errornoWrong / revoked virtual key. Mint a new one.
402budget_exhaustedbilling_errorwaitActive budget window is full. Wait for reset or raise cap.
402end_user_exhaustedbilling_errornoThat end user's wallet is empty. Nothing was sent to a vendor and nothing was charged. Expected, not an incident — catch it and show your own top-up or upgrade screen. The message names the unit you configured. Credit the wallet with wallets.adjust, or turn off "block at zero" to meter without enforcing.
402subscription_inactivebilling_errornoWorkspace billing canceled/unpaid. Fix in Pay odnoga.
402no_vendor_keybilling_errornoNo vault key for that vendor. Add one in Routing → Vault keys.
429rate_limitedrate_limit_erroryes (backoff)Honor x-ratelimit-reset. Exponential backoff.
502upstream_errorapi_erroryesVendor returned an error. Check Request Inspector.
504timeoutapi_erroryesVendor didn't respond in time. Retry with backoff.
500internalapi_erroryesOpen a ticket with the x-airouter-request-id.

Retry policy (consumer)

  • Never retry 4xx other than 429 and 408.
  • Retry with exponential backoff for 429, 5xx, network errors. Cap at 3 attempts.
  • Always respect x-ratelimit-reset when present.

See Retries and timeouts for a tested helper.