Approvals API
When policy returns allow_with_obligation, the agent must request approval before executing the deferred HTTP call. Humans approve in the console.
Request approval
POST
/v1/aegis/approvals/requestBearer ingest key| Field | Type | Required | Description |
|---|---|---|---|
organization_id | uuid | Yes | Org scope |
event_id | string | Yes | Policy decision event ID |
trace_id | string | Yes | Trace to complete later |
tool_name | string | Yes | Tool awaiting approval |
deferred | { url, method? } | Yes | HTTP call to run after approval (method defaults to GET) |
json
{
"organization_id": "…",
"event_id": "evt_…",
"trace_id": "trc_…",
"tool_name": "stripe.paymentIntents.create",
"deferred": { "url": "https://api.stripe.com/…", "method": "POST" }
}| Status | Body |
|---|---|
201 | { approval_id, status: "pending", … } |
422 | Missing required fields |
Get approval status
GET
/v1/aegis/approvals/:approvalIdBearer ingest key200 response
{
"approval_id": "apr_…",
"status": "pending" | "approved" | "rejected",
"trace_id": "trc_…",
"tool_name": "stripe.paymentIntents.create",
"event_id": "evt_…"
}Complete trace
POST
/v1/aegis/approvals/:approvalId/completeBearer ingest keyCall after deferred fetch succeeds and approval is approved. Marks trace completed. Body may include trace_id and organization_id.
| Status | Body |
|---|---|
200 | { ok: true, trace_id, status: "completed" } |
409 | Approval not approved |
404 | Not found |
SDK resume
typescript
import { wrapFetchResume } from "@salanor/aegis";
await wrapFetchResume(approvalId, url, init, config);