Policy Behavior
Escalation Routing Configuration
escalation_routing decides who reviews an escalated request: a team queue or one user. You set it on a provider target, or on one model of a target. It does not make a request escalate. A control such as Human Oversight must return escalate first. The gateway then adds the route to the escalation event.
Syntax
Put the block on a target, or on one entry of its models list. Set exactly one of team_id or user_id:
providers:
targets:
- id: <target-id>
provider: openai
model: <model>
secret_key_ref:
env: VERDICTAN_OPENAI_API_KEY
escalation_routing:
team_id: <team-uuid>Fields
| Field | Type | Description |
|---|---|---|
team_id | string (UUID) | Team that gets the escalation in its queue. Any member can review it. |
user_id | string (UUID) | User who gets the escalation already claimed. Organization settings decide how the user is notified. |
Lint rejects a block with both fields or with neither. It does not check the UUID format or whether the team or user exists. Find the IDs with verdictan team list or verdictan user list, in the Console, or through the API.
Examples
Use a test agent, and a team or user in the same organization. Replace the example UUIDs.
Route a target to a team
pack:
name: config-escalation-routing-provider
version: 1.0.0
enabled: true
providers:
targets:
- id: openai-prod
provider: openai
model: your-openai-model
base_url: https://api.openai.com
secret_key_ref:
env: VERDICTAN_OPENAI_API_KEY
escalation_routing:
team_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
policies:
chain:
- human-oversight
policy:
human-oversight:
action: escalateApply the file to the test agent and send a request with stream: false. human-oversight escalates every response. Open Inbox in the same organization, find the request, and check that the team is correct. A person must review it; an escalation is not a finished answer. See Resolve an Escalation.
Route one model to a user
When one target serves several models, give a model its own route. A request for the model ID or one of its aliases uses that route. A model without its own block uses the route of the target.
pack:
name: config-escalation-routing-model
version: 1.0.0
enabled: true
providers:
targets:
- id: openai-production
provider: openai
base_url: https://api.openai.com
secret_key_ref:
env: VERDICTAN_OPENAI_API_KEY
escalation_routing:
team_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
models:
- model_id: your-primary-openai-model
aliases:
- primary
- model_id: your-secondary-openai-model
aliases:
- secondary
escalation_routing:
user_id: f0e1d2c3-b4a5-6789-0fed-cba987654321
policies:
chain:
- human-oversight
policy:
human-oversight:
action: escalateRequests for secondary go to the user. Requests for primary go to the team of the target.
Limits and failure behavior
- A route never starts an escalation. Human Oversight and Flagged Review are controls that can.
- The gateway picks the route from the request
model. A model that no target declares has no route. - The YAML has no default queue. When no route applies, the control plane decides what happens next.
- Lint does not check that the team or user exists. Check the ID before rollout.
Next steps
- Resolve an Escalation: claim and resolve an escalation in the Inbox.
- verdictan escalation: manage escalations from the terminal.