Skip to content
Documentation menu

Errors reference

Every non-2xx response uses one envelope. The code is stable; the message is for humans.

Envelope

json
{
  "error": {
    "code": "insufficient_balance",
    "message": "Add funds to continue making requests.",
    "request_id": "…",
    "retryable": false,
    "billing_state": "none",
    "upstream_status": 402,
    "details": { }
  }
}

retryable says whether the same request can be retried unchanged (with the same Idempotency-Key). billing_state tells you whether anything was reserved or charged before the failure — check it before assuming a failed call was free.

Codes

HTTPCodeMeaning
400invalid_inputThe input did not match the tool’s input schema. details lists the fields.
400invalid_jsonThe body is not valid JSON.
400missing_idempotency_keyBillable calls require an Idempotency-Key header.
401invalid_api_keyThe key does not exist or the secret does not match.
401session_requiredDashboard route called without a valid session cookie.
401unauthorizedNo credentials or an unrecognised credential type.
402insufficient_balanceAdd funds to continue making requests. Nothing was reserved.
402spend_limit_exceededA workspace, project or key limit would be exceeded.
403csrf_rejectedOrigin or X-Requested-With check failed.
403forbiddenThe principal exists but may not perform this action.
403insufficient_scopeThe key lacks the scope this route needs.
403key_expiredThe key passed its expiry.
403key_revokedThe key was revoked.
403sudo_requiredAdmin action needs a recent wallet re-signature.
404not_foundResource does not exist in this workspace.
404tool_not_foundUnknown tool key.
409idempotency_conflictSame Idempotency-Key with a different body.
409idempotency_in_progressThe first attempt with this key is still running; retry shortly.
409quote_expiredRequest a new quote.
409quote_mismatchInput differs from the quoted input.
409state_conflictThe resource is not in a state that allows this action (e.g. cancelling a finished job).
413payload_too_largeBody exceeds the size limit.
422ceiling_too_lowYour max_charge_usd is below the tool’s minimum charge.
422tool_unavailableThis API is not available yet (not activated, paused, or unconfigured).
422unsupportedThe operation is not supported by this tool or adapter.
422unsupported_batchJSON-RPC batch arrays are rejected.
422unsupported_rpc_methodThe JSON-RPC method is not on the allow-list.
422upstream_validation_errorThe supplier rejected the input.
429rate_limitedSlow down; see Retry-After.
500internalUnexpected error; quote the request_id to support.
502upstream_errorThe supplier returned an error. billing_state tells you whether anything was charged.
503supplier_unavailableThe supplier is down or paused by a circuit breaker.
503supplier_unconfiguredThe supplier is not configured in this deployment.
504upstream_timeoutThe supplier did not answer in time; the request is reconciling.