Control plane API

Error responses

The control plane's error convention and every status it returns, distinct from the inference gateway's envelope.

Shape

A non-2xx response from the control plane is a small JSON object. Most carry a human sentence under error; schema validation failures carry a structured detail:

{"error": "project not found"}
{"detail": [{"type": "missing", "loc": ["body", "payload", "id_token"], "msg": "Field required"}]}

Render error to a person as it is; treat detail as a list of field problems.

Statuses

StatusMeaning
400Bad request body or query parameters (a past expiry, an unknown route id in allowed_models, a credit limit below what the key has already spent, a bad status_category), or the account has no organisation.
401No session: the i2_access_token cookie is missing, expired or invalid. Refresh, or sign in again.
403Signed in, but missing a required role. Renaming the organisation needs owner or admin; a member gets this.
404The referenced resource does not exist or is not this organisation's. The API never distinguishes the two.
409Duplicate: an email already registered, or an organisation name already taken.
422The body failed schema validation; see detail.
503A backing service is unreachable; today only the analytics endpoints can answer this, and everything else keeps working.

The inference gateway is different

Requests to /v1/chat/completions use the OpenAI-shaped envelope, {"error": {"message", "type"}}, and their own status meanings. Those are on Errors and retries.

Something unclear or wrong on this page? Tell us. Machine-readable copies: llms.txt.