/dashboard/guardrails or via the REST API.
Components
- Budget — USD limit per period (daily/weekly/monthly). When the period spend hits the limit, the guardrail blocks until the next reset.
- Allowed models — allowlist by
model id. Empty = all. - Allowed providers — allowlist by provider id (
openai,anthropic, …). - ZDR per group — independent toggle per group. Same concept as the org-level setting but applied per guardrail.
- Prompt injection detection — regex for common patterns (
ignore previous instructions,reveal system prompt). - PII detection —
off/redact/block. Detects email, phone, RFC, CURP, credit cards, IPv4. - Custom patterns — array of
{ name, pattern, action }. Case-insensitive regex, actionredactorblock.
Combining multiple guardrails
When several apply to the same request:| Dimension | Rule | Example |
|---|---|---|
| Allowed models | INTERSECTION | A=[gpt5,sonnet], B=[sonnet,opus] → [sonnet] |
| Allowed providers | INTERSECTION | A=[openai,anthropic], B=[anthropic,google] → [anthropic] |
| ZDR (per group) | UNION | If A requires ZDR for openai, all openai requests require it |
| Budget | INDEPENDENT | Any guardrail with budget-at-limit blocks |
| Custom patterns + PII | UNION; block > redact | A=redact email, B=block email → block |
| Prompt injection | OR | If any enables it, on |
Block format
The message describes the high-level reason; it does not expose internal config or individual guardrail names (prevents policy doxing to users without admin permission).