Some responses add extra top-level fields. For example, a rate-limited
evaluate or verify call carries
retry_after_ms:
Previous error shape removed. The
{ error: { code, details } } nested
envelope and the bare { code, details } shape are no longer returned by any
endpoint. All error paths use { error, message, status }.A policy denial is not an HTTP error. When
/v1/evaluate reaches a
deny, hold, or escalate decision, it returns HTTP 200 with the
decision, deny_code, and deny_reason in the body — see
Deny codes. Likewise, /v1-verify-permit reports an
expired, revoked, already-consumed, or mismatched permit in its response body
(valid: false with a verify_error_code such as PERMIT_EXPIRED or
PERMIT_ALREADY_USED). In both cases the protected action must not run.Code reference
Fail-closed rule
If you get 5xx or a network error from/v1/evaluate, your agent must treat the call as deny — never as “allow by default.” This is non-negotiable for regulated deployments.