Rejection Reasons
X-Fairvisor-Reason is set on reject responses.
Core reasons
| Reason | Meaning |
|---|---|
no_bundle_loaded | No active bundle is loaded |
kill_switch | Request matched an active kill switch |
token_bucket_exceeded | Token bucket denied request |
budget_exceeded | Cost budget exhausted |
circuit_breaker_open | Policy circuit breaker is open |
loop_detected | Loop detector threshold exceeded |
LLM-specific reasons
| Reason | Meaning |
|---|---|
prompt_tokens_exceeded | Prompt estimate exceeded max prompt limit |
max_tokens_per_request_exceeded | Prompt + completion reservation exceeded per-request cap |
tpm_exceeded | Tokens-per-minute budget exhausted |
tpd_exceeded | Tokens-per-day budget exhausted |
Streaming reason
completion_tokens_exceeded may appear in streaming SSE error payloads when mid-stream completion limit is hit. It is not emitted as X-Fairvisor-Reason header in the normal reject path.
Shadow mode
In shadow mode, would-reject reasons are kept in internal decision metadata while HTTP response is allow (200).