Approval Workflows
Not every AI agent action should execute autonomously. For sensitive operations — accessing production data, executing financial transactions, modifying infrastructure — VeraID provides human-in-the-loop approval workflows that pause agent execution until a designated reviewer approves or rejects the request. This gives your organization the speed of automation with the judgment of human oversight where it matters.
When to Use Approvals
Approval workflows are designed for operations where the cost of an error is high and the latency of human review is acceptable. Common use cases include:
- Production data access — Agents requesting access to customer PII, financial records, or regulated data
- High-cost operations — LLM calls exceeding a cost threshold or agents approaching budget limits
- Infrastructure changes — Agents that modify cloud resources, DNS records, or security configurations
- External communications — Agents sending emails, Slack messages, or API calls to third-party services on behalf of the organization
- Flagged prompts — Prompts that scored above the review threshold in prompt injection detection but below the block threshold
Multi-Stage Approval
VeraID supports multi-stage approval pipelines where a request must be approved by multiple reviewers, optionally in sequence or in parallel.
Sequential Approval
Stages are evaluated in order. The request advances to the next stage only after the current stage is approved.
{ "approvalWorkflow": { "stages": [ { "name": "Team Lead Review", "approvers": ["user:alice@example.com", "group:team-leads"], "requiredApprovals": 1, "slaMinutes": 30 }, { "name": "Security Review", "approvers": ["group:security-team"], "requiredApprovals": 2, "slaMinutes": 60 } ], "mode": "sequential" }}Parallel Approval
All stages are evaluated simultaneously. The request is approved when every stage has received its required number of approvals.
{ "approvalWorkflow": { "stages": [ { "name": "Engineering Approval", "approvers": ["group:engineering-leads"], "requiredApprovals": 1, "slaMinutes": 30 }, { "name": "Compliance Approval", "approvers": ["group:compliance-team"], "requiredApprovals": 1, "slaMinutes": 60 } ], "mode": "parallel" }}SLA Tracking
Every approval stage has a configurable SLA (Service Level Agreement) defined in minutes. VeraID tracks the elapsed time from when the approval request was created and takes action when the SLA is breached.
| SLA Status | Description |
|---|---|
| Within SLA | The stage has not yet exceeded its configured slaMinutes |
| SLA Warning | The stage is within 20% of its SLA deadline (e.g., 24 minutes into a 30-minute SLA) |
| SLA Breached | The stage has exceeded its slaMinutes without a decision |
When an SLA is breached, VeraID triggers the configured escalation rules.
Escalation Rules
Escalation rules define what happens when an approver does not respond within the SLA window.
Escalation Strategies
| Strategy | Behavior |
|---|---|
escalate | Route the request to a higher-tier approver group |
auto-approve | Automatically approve the request after the SLA expires |
auto-reject | Automatically reject the request after the SLA expires |
notify | Send additional notifications but take no automated action |
{ "approvalWorkflow": { "stages": [ { "name": "Team Lead Review", "approvers": ["group:team-leads"], "requiredApprovals": 1, "slaMinutes": 30, "escalation": { "strategy": "escalate", "escalateTo": ["group:engineering-directors"], "escalationSlaMinutes": 60, "finalAction": "auto-reject" } } ] }}In this configuration:
- Team leads have 30 minutes to respond
- If no response, the request escalates to engineering directors
- Directors have 60 minutes to respond
- If still no response, the request is automatically rejected
Agent Status Lifecycle
AI agent identities have an extended status lifecycle that integrates with approval workflows.
┌──────────┐ approval ┌──────────┐│ │ required │ ││ ACTIVE │───────────────────►│ APPROVED ││ │◄───────────────────│ ││ │ approval │ ││ │ granted │ │└────┬─────┘ └──────────┘ │ │ suspend / policy violation ▼┌──────────┐ revoke ┌────────────┐│SUSPENDED │───────────────────►│ TERMINATED ││ │ │ │└──────────┘ └────────────┘| Status | Description |
|---|---|
ACTIVE | Agent is operational and can execute actions within its policies |
APPROVED | Agent has received approval for a specific pending operation and can execute it |
SUSPENDED | Agent is temporarily disabled due to policy violation, budget breach, or manual action |
TERMINATED | Agent is permanently decommissioned. All credentials are revoked and the agent cannot be reactivated |
Status Transitions
- ACTIVE to APPROVED — An approval request is granted, and the agent proceeds with the approved operation
- APPROVED to ACTIVE — The approved operation completes or expires, and the agent returns to normal operation
- ACTIVE to SUSPENDED — An administrator suspends the agent, a policy violation is detected, or a budget limit is exceeded with
blockaction - SUSPENDED to ACTIVE — An administrator reactivates the agent after investigation
- SUSPENDED to TERMINATED — An administrator permanently decommissions the agent
- ACTIVE to TERMINATED — An administrator directly terminates an active agent
Configuring Approval Requirements
Enable approval workflows by setting requireApproval in the agent’s monitoring configuration.
Global Approval
Require approval for all operations performed by this agent:
{ "agentConfig": { "monitoring": { "logAllRequests": true, "logResponses": true, "requireApproval": true } }}Conditional Approval
Require approval only for operations that match specific conditions:
{ "agentConfig": { "monitoring": { "logAllRequests": true, "logResponses": true, "requireApproval": false }, "approvalRules": [ { "condition": "cost > 5.00", "description": "Require approval for LLM calls estimated above $5" }, { "condition": "dataAccess in ['customer-pii', 'financial-records']", "description": "Require approval for sensitive data access" }, { "condition": "promptRiskScore > 0.4", "description": "Require approval for flagged prompts" }, { "condition": "operation == 'function-calling' && tool in ['send-email', 'modify-infrastructure']", "description": "Require approval for sensitive tool calls" } ] }}Approval Request API
Submit an Approval Request
curl -X POST https://app.veraid.io/api/v1/approvals \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agentId": "idt_9c3a8b7e-4f21-4d6a-b8e1-a2c5d9f07e3b", "operation": "function-calling", "tool": "send-email", "context": { "recipient": "customer@example.com", "subject": "Account Update Notification", "estimatedCost": 0.02 }, "urgency": "normal" }'Approve or Reject
# Approvecurl -X POST https://app.veraid.io/api/v1/approvals/{approvalId}/approve \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "justification": "Verified recipient and content are appropriate" }'
# Rejectcurl -X POST https://app.veraid.io/api/v1/approvals/{approvalId}/reject \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "reason": "Recipient not in approved contact list" }'Check Approval Status
curl https://app.veraid.io/api/v1/approvals/{approvalId} \ -H "Authorization: Bearer $API_KEY"{ "id": "apr_1a2b3c4d-5e6f-7a8b-9c0d-e1f2a3b4c5d6", "agentId": "idt_9c3a8b7e-4f21-4d6a-b8e1-a2c5d9f07e3b", "status": "pending", "operation": "function-calling", "stages": [ { "name": "Team Lead Review", "status": "pending", "slaMinutes": 30, "elapsedMinutes": 12, "approvers": ["user:alice@example.com"], "decisions": [] } ], "createdAt": "2026-03-19T14:30:00Z", "expiresAt": "2026-03-19T15:30:00Z"}What’s Next
- MCP Server Governance — Govern which tools and resources agents can access
- Prompt Injection Detection — Configure review thresholds for flagged prompts
- Budget Controls — Trigger approvals for high-cost operations