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).