Skip to main content
All AXON runtime errors (MCP, Decision API, OpenClaw) normalize to this structure:

Policy Errors

REJECTED_POLICY

Deterministic mandate gate denied (route/path/metadata/policy constraints).

REJECTED_LIQUIDITY

Daily or monthly budget exceeded.

VAULT_ALLOCATION_UNAVAILABLE

Returned by POST /v1/wallets/:id/fund and POST /v1/orgs/:id/transfers/fund when the target org is browser-signed. Vault allocation requires the server to sign on the vault’s behalf, which is only possible when the org runs in full (server-signed) mode. Browser-signed orgs hold the vault private key in the user’s browser and must deposit directly to the pocket address instead.

REJECTED_DUPLICATE

Idempotency key already exists.

REJECTED_NETWORK

Network not allowed by mandate.

Approval Errors

APPROVAL_REQUIRED

Risk stage escalated to human approval.

APPROVAL_NOT_READY

Approval exists but is still pending or denied.

APPROVAL_EXPIRED

Approval was not consumed before expiry.

APPROVAL_ALREADY_CONSUMED

Approval token has already been used.

Auth and Surface Errors

UNAUTHENTICATED

No bearer credential was presented.

INVALID_API_KEY

The bearer was present but did not resolve to a valid static key, tenant key, or platform session.

TOOL_NOT_AVAILABLE_IN_RUNTIME_SURFACE

A wallet-scoped runtime credential tried to call an operator-surface route or tool.

TOOL_NOT_AVAILABLE_IN_OPERATOR_SURFACE

A runtime-only MCP tool was invoked on the operator surface.

WALLET_BINDING_REQUIRED

The caller reached a wallet-aware runtime surface without a wallet binding.

Provider Errors

PROVIDER_UNVERIFIED

Provider registry entry missing or attestation mismatch.

Rate & Circuit Errors

RETRY_BUDGET_EXCEEDED

Task/host exceeded max_402_retries_per_task_host.

RATE_LIMITED

Request-rate or spend-rate gate triggered.

CIRCUIT_OPEN

Host-level circuit breaker is open after repeated failures.

Scoring Errors

INTENT_MISMATCH

Risk stage flagged intent/category mismatch at escalation threshold.

ABSTAIN

Provider-search MCP tool wrapper error. The backend abstained instead of returning eligible offers.

Transport Errors

REQUEST_TIMEOUT

Upstream fetch timed out.

PAYMENT_FAILED

x402 challenge parse or signing failure.

SETTLEMENT_FAILED

Provider returned 402 even after signed payment payload.

INTERNAL_ERROR

Unexpected runtime failure.

REST-Only Errors

VALIDATION_ERROR

Request body or route parameters are missing required fields or have invalid values.

NOT_FOUND

Requested resource does not exist.

HTTP and MCP behavior

  • 400: validation failures, WALLET_BINDING_REQUIRED, and some recoverable route errors
  • 401: UNAUTHENTICATED or INVALID_API_KEY
  • 403: policy failures and capability-surface mismatches
  • 404: NOT_FOUND
  • 409: approval or idempotency conflicts
  • 429: rate limiting / retry budgets
  • 500: internal failure
  • 502 / 503 / 504: selected upstream, circuit-breaker, and timeout failures
Malformed JSON is the one shape exception: the Decision daemon returns a JSON-RPC parse envelope with error.code = -32700 so REST and MCP callers see the same parse-failure contract. Cross-surface HTTP MCP failures are framed as JSON-RPC errors with the canonical AXON envelope in error.data.

Warning Codes

Successful or escalated decisions can include warnings instead of top-level errors:

Troubleshooting Quick Map