Skip to main content
Policy outcomes return HTTP 200 with a gate status. Transport and platform failures use non-2xx responses with a structured error envelope. Rate and quota responses may include, in the response body:
  • code
  • message
  • request_id
  • next_step ("upgrade", "retry", or "wait")
And in response headers:
  • X-Usage-Scope, X-Usage-Plan, X-Usage-Limit, X-Usage-Total, X-Usage-Remaining, X-Usage-Reset-At: monthly plan/token quota.
  • X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset: the separate per-org burst limiter. Present on every gate request, not only 429s.
  • X-Request-Id
  • Retry-After: seconds, on 429/503 only.
There is no reset_at field in the response body. Reset timing is header-only: X-Usage-Reset-At for plan/token quota, X-RateLimit-Reset for the burst limiter.

Safe error logging

Log the error code, request ID, action ID, and idempotency key. Do not log full API keys, sensitive recipient content, or unredacted policy matches.
A scanner exception fails closed as a blocking decision. A missing policy snapshot returns 503; DataVibe does not evaluate without an auditable snapshot.
Last modified on July 24, 2026