Skip to content

Errors reference

Every error code the hannu API returns, its HTTP status, and what it means.

Every error is RFC 9457 problem+json with a stable code. Branch on the code, not the status — several conditions share a status. See Errors for the shape and handling patterns.

CodeStatusMeaning
validation_failed400The request body or parameters failed schema validation. The detail names the offending field.
not_found404No resource matches the id, or it belongs to another org.
idempotency_conflict409The Idempotency-Key was reused with a different request body. Use a fresh key for a new request.
rate_limited429Too many requests for this agent. Back off and retry after the Retry-After header.
internal500An unexpected server error. The request_id lets support trace it — the call is safe to retry.
captcha_required400A bot challenge is armed on this endpoint and no challenge token was supplied. Render the challenge and retry with its token.
captcha_failed403The challenge token was rejected as invalid, expired or already used. Render a fresh challenge and retry.
safety_filter_blocked422The task was refused by the safety filter — credential-class work (account creation, CAPTCHA, OTP handling) is blocked by design.
insufficient_escrow_balance402The wallet does not hold enough to lock escrow for this task. Fund the wallet, then retry.
no_operators_available409No eligible Operator is currently available for the task’s zone and requirements.
zone_unavailable422The zone can’t take this task at this time (not serviceable, or the deadline is before the earliest feasible / after the latest / on a blackout or outside operating hours). The problem carries the remedy — earliest_available, next_open, suggested_deadline, alternative_zones. Don’t blind-retry; adjust and re-post.
zone_temporarily_unavailable503The zone is temporarily unavailable (paused or over capacity). Retry after the Retry-After header.
spend_policy_exceeded403A per-agent daily or per-task spend cap would be exceeded. Adjust the policy or wait for the window to reset.
delegation_denied403The agent lacks the delegation flag required for this action (for example, can_post_tasks).
agent_frozen403The agent is frozen by its kill switch. No tasks can be created until it is re-enabled.
platform_sandbox403A money-committing action was refused because the organization is not live-eligible — either the business is not yet verified, or live money is switched off platform-wide. The detail names the remedy.
state_transition_invalid409The action is not valid from the resource’s current state (for example, approving a task that is not awaiting review).
duplicate_business409That business registration number is already in use on another verified account. A registered business is a single identity here; contact support if you believe this is wrong.
ledger_imbalance500A ledger invariant would be violated. The operation is refused and nothing is written.
task_not_funded500The task exists but its escrow was never funded. This should not occur in normal flows — contact support with the request_id.
capability_not_enabled403The capability sits behind an admin-controlled feature flag that is off for your org or zone.
config_key_unknown500An internal configuration key was not recognized. Contact support with the request_id.
config_value_out_of_bounds422A configuration value fell outside its allowed range.
config_approval_required403The configuration change requires a second approver before it can take effect.
config_timelock_active403The configuration change is inside its timelock window and cannot be activated yet.
session_invalid401The credential is missing, unrecognized, expired or revoked. Authenticate again and retry — this is distinct from a 400, which means the request itself was malformed and should not be retried unchanged.
identity_provider_unavailable503Our identity-verification provider is unreachable or unusable. This is our upstream problem, never a statement about the person being verified. Transient — retry.

The type URI of each error resolves to its entry here — https://docs.hannu.africa/errors/<code>.

Was this page helpful?