Reference

Error catalog

Every failure Janus originates carries a stable code. Branch on the code, not on the message text. Errors from a provider are passed through unchanged.

policy.token_invalid

HTTP 401 Not retryable

When: The bearer token is absent, malformed, revoked, or belongs to a deleted account.

What to do: Create a new token on the API Tokens page and update the tool that failed.

policy.user_disabled

HTTP 403 Not retryable

When: The account behind the token has been deactivated by an administrator.

What to do: Contact a Janus administrator. Tokens stay valid but every call is refused while the account is disabled.

policy.model_not_granted

HTTP 403 Not retryable

When: The caller asked for a model that is not enabled, or that they hold no grant for.

What to do: Call GET /v1/models to see what you can use, and ask an administrator for a grant if the model is missing.

policy.endpoint_blocked

HTTP 403 Not retryable

When: A policy blocking rule matched the request. The reason field names the rule and the clause that fired.

What to do: Read the reason. If the block is wrong, an administrator can adjust the rule in Admin → Policy rules.

policy.security_blocked

HTTP 403 Not retryable

When: A Security Gateway policy refused the request or withheld the response. error.param names the check kind (secrets, pii, terms, shape, prompt_injection); the rule and the matched text are never returned. On a stream this arrives as a final in-band error frame followed by [DONE]. If the message says the policy fails closed, the classifier behind a check was unreachable — nothing matched. Child Safety uses the same code when a model or endpoint is blocked for a child account.

What to do: Remove the flagged material and retry. If you believe this is a mistake, an administrator can look the request up by request_id under Admin → Security → Violations.

policy.quota_exceeded

HTTP 429 Retryable

When: A tokens, spend, or request quota is used up for the current window.

What to do: Wait until reset_at, or ask an administrator to raise the limit. Retrying earlier will fail the same way.

policy.rate_limit

HTTP 429 Retryable

When: A per-endpoint rate limit was exceeded.

What to do: Back off for the number of seconds in retry_after and try again.

policy.response_too_large

HTTP 500 Not retryable

When: A streamed response grew past the gateway's response size cap (JANUS_MAX_RESPONSE_BYTES). The text before this point was delivered and this arrives as a final in-band error frame (the HTTP status was already 200). A non-streamed response over the cap is delivered whole.

What to do: Ask for a shorter answer (lower max_tokens, or split the task). If large responses are expected, an administrator can raise JANUS_MAX_RESPONSE_BYTES.

policy.service_token_scope

HTTP 403 Not retryable

When: A service token was used outside the /v1 inference API, for example against a dashboard or admin endpoint. Service tokens only authenticate model calls.

What to do: Use the service token only for /v1 requests. For the web API, sign in with a user account.

policy.service_token_expired

HTTP 401 Not retryable

When: The service token has passed the expiry date set when it was created. This is different from a revocation: nobody turned it off, it aged out.

What to do: Ask a Janus administrator to issue a replacement under Admin → Service tokens and update the integration.

policy.managed_model_unavailable

HTTP 503 Retryable

When: The managed model (alias) you called points at a model that is missing or disabled. Your request is correct; the alias needs repairing.

What to do: Contact a Janus administrator. Until it is fixed, call another model from GET /v1/models directly.

policy.managed_model_fallback_exhausted

HTTP 503 Retryable

When: The managed model's target is unavailable and the fallback configured for exactly that case cannot take over either. The message names both reasons.

What to do: Retry in a few minutes; if it persists, contact a Janus administrator with the request_id so they can fix the target or the fallback.

policy.subscription_reauth_required

HTTP 403 Not retryable

When: The call used one of your personal provider subscriptions (my/… models) and its stored sign-in no longer works: it expired, was revoked at the provider, or the password changed.

What to do: Open the Subscriptions page and connect that subscription again, then retry.

upstream.unavailable

HTTP 503 Retryable

When: The provider behind the requested model could not be reached, or its credentials could not be decrypted.

What to do: Retry shortly. If it persists, an administrator should check Admin → Settings → System status for that upstream.

upstream.stream_interrupted

HTTP 502 Retryable

When: The provider ended a streaming response early: its connection dropped, or it closed the stream without a [DONE], finish_reason or usage block. The HTTP status was already 200, so this arrives as a final in-band error frame (502 is the status inside that frame) and the text before it is incomplete.

What to do: Retry the request. If it keeps happening, an administrator should check the upstream server (restarts, out-of-memory kills, proxies with short idle timeouts). The request log shows these with this code.

upstream.rate_limit

HTTP 429 Retryable

When: The provider throttled the gateway itself.

What to do: Back off and retry. Janus never retries generative calls for you, because a retry is a second charge.

invalid_request_error

HTTP 400 Not retryable

When: The request body was malformed, or a required field such as model was missing. The same code is used, with HTTP 413, when a body is too large for the provider adapter to rewrite, and with HTTP 409 when an admin change conflicts with things that depend on it.

What to do: Read the message and param field, fix the request, and send it again. For 413, send a smaller payload; for 409, deal with the dependents the message names first.

not_found_error

HTTP 404 Not retryable

When: The path does not exist on this gateway, or the item it names (a token, model, request, team…) was not found or is not visible to you.

What to do: Check the URL and the id. For model calls the base URL must end in /v1; for model names call GET /v1/models.

authentication_error

HTTP 401 Not retryable

When: A browser request reached an API route without a valid session, or the session expired or idled out.

What to do: Sign in again. Sessions last 24 hours, or 4 hours of inactivity, whichever comes first.

permission_error

HTTP 403 Not retryable

When: The signed-in account lacks the role required for an administrative action.

What to do: Ask an administrator to perform the action or to grant you the role.

license.required

HTTP 402 Not retryable

When: An administrator tried to create something new (an upstream, token, model…) while the gateway has no valid license. Everything already configured keeps working.

What to do: An administrator installs or renews the license key under Administration → Settings → License & updates.

license.feature_not_licensed

HTTP 402 Not retryable

When: An administrator tried to switch on a feature the installed edition does not include (for example load balancing or guardrail enforcement).

What to do: Install a key for an edition that includes the feature under Administration → Settings → License & updates, or leave the feature off.

license.seats_exhausted

HTTP 402 Not retryable

When: An administrator tried to create a new local account, or turn a disabled account back on, while every licensed seat is in use. A seat is a user active in the last 30 days.

What to do: Add seats to the license under Administration → Settings → License & updates, or wait for an inactive user to free a seat.

audit.write_failed

HTTP 500 Retryable

When: The gateway runs the STIG profile (JANUS_STIG_PROFILE=true), and an administrative change was refused because its audit record could not be written. The change was not saved.

What to do: Check the database (disk space, permissions, connectivity) and the gateway log, then make the change again. Reads keep working.

server_error

HTTP 500 Retryable

When: The gateway hit an unexpected internal failure.

What to do: Retry once. If it recurs, quote the request_id from the response to whoever operates the gateway.