code, a human message, and (control
plane only) a docs_url pointing back to this page. Codes are stable across releases —
build on code, not on message text.
Response shapes
Spillway returns a different envelope depending on which plane you’re calling, so client SDKs parse the shape they already expect.- Control plane (/api/*)
- Data plane (/v1/*) — plain
- Data plane — blocks
RFC-7807-ish. Always this shape.
details is present when the error carries structured context (for example, which
field failed validation).Headers on a block
Blocks also set response headers, so you can branch on the outcome without parsing the body:Error codes
Auth & keys
Governance blocks
Requests & validation
Providers & gateway
Resources (control plane CRUD)
Approvals & automation
CEL (guardrail conditionCel)
All six CEL codes are returned at authoring time —
POST/PATCH /api/policies or
POST /api/policies/lint — not discovered later against live traffic.