Skip to main content

Error codes

Every failure is a problem+json body with a stable type URI. This page enumerates the ones you'll actually see.

type slugHTTPMeaningUsual fix
unauthenticated401No valid auth headerSend a bridge key, device key, or delegation.
bad_header401Header shape wrongCheck for truncation or quoting.
scope_mismatch403Device key bound to a different agentUse the right key, or request a delegation.
not_found404Row or resource absent (or not visible to you)Confirm agent_id and IDs.
conflict409Unique constraint collisionUse the existing row or pick a different key.
quota_exceeded429postbox.send_quotas trippedWait for the window, or raise the tunable.
suppressed451Recipient is on postbox.outbound_suppressionsRemove the block after investigation.
quarantined451Inbound scored above injection thresholdReview body; promote manually if safe.
budget_exhausted402Governor budget hitTop up the budget or wait.
policy_denied403Governor /check returned denyAdjust the policy or the request.
chain_broken503Audit verifier saw a bad rowStop writes; page the on-call.
internal500UnhandledFile a report with the request id.

Response shape

{
"type": "https://agentpack.dev/errors/scope_mismatch",
"title": "scope mismatch",
"status": 403,
"detail": "device key bound to 'agent-hello' cannot act for 'agent-triage'",
"instance": "req_01hxyz..."
}

Always log instance — it matches the request_id tag in Firebase function logs.