Requests API reference for AI agent approvals
Learn how to create, inspect, and cancel Contro1 requests for approvals, clarifications, and escalations.
Core API
Give every agent a verified identity, scope its authority (least agency), reconstruct any run end-to-end (tools, sub-agents, retrieved context), and export HMAC-signed evidence.
The technical reference for the agent identity, least-agency, and traceability layer: which fields to send, how identity is verified, how runs are traced, and how to verify the signed evidence packet. For the concepts, see the Agent Traceability and Verified AI Agents pages.
You can do everything below, and you can adopt it one rung at a time. Each step is a small addition to the request you already send — start at the top and go as deep as you need.
| Step | What you add | Why it matters |
|---|---|---|
| 0. Minimal request | POST /v1/requests | A human is asked to approve, decide, or provide input. |
| 1. Identity | Bind your API key to an agent (one settings action) | Every request is attributed to a verified agent automatically. |
| 2. Trace a run | trace_id (+ parent_trace_id for sub-agents) | Links every step of one agent run into a single trace. |
| 3. Tool calls | tool_calls[] on the request or as tool.call audit records | Reviewers see exactly what the agent tried to do. |
| 4. Grounding | retrieved_context[] | Shows the data the decision was based on. |
| 5. Least agency | Set the agent's scopes | The agent can only act within the authority you grant. |
| 6. Evidence | GET /requests/:id/evidence | A signed, verifiable record of identity, action, context, and decision. |
For a pilot, create one API key in Settings and send your first request. Contro1 creates a verified base agent for that key, then discovers any actor.agent_id values as claimed child agents in Agent Inventory.
After traffic appears, open Agent Inventory and promote the agents you trust: verify them, assign an owner or department, set least-agency scopes, define who can approve risky actions, and export signed evidence when you need proof.
Identity starts with the authenticated API key. When you create a key in Settings it is bound to a verified base agent, created from the integration or label unless you bind the key to an existing agent.
For onboarding, one key can front many agents. If a request or audit record carries actor.agent_id that differs from the key's base agent, Contro1 records it as a claimed child under that base. The admin then reviews it in Agent Inventory, verifies or blocks it, assigns ownership, and sets scopes and approval paths.
A runtime caller cannot turn itself into another verified agent just by sending that agent_id. If the declared identity belongs somewhere else, Contro1 keeps it as a claimed child/alias under the authenticated key so the conflict is visible instead of trusted.
trace_id (format trc_...) groups every request and audit record from one agent run. parent_trace_id attaches a sub-agent run to its parent, forming the span tree behind GET /v1/traces/:trace_id. These are distinct from thread_id (conversation) and correlation_id (business case) — send whichever you have.
Attach the traceability arrays to turn an audit trail into real traceability — what happened, why, which tools ran, and on what data.
Provenance matters for evidence quality. tool_calls, retrieved_context, and the triggering event are machine-observed when your gate or middleware recorded them from the runtime; any justification or summary the model wrote is agent-reported. Record both, label them apart, and never let agent-reported text raise or lower routing, risk_level, or approval policy. An auditor reading the packet later must be able to tell which statements are facts your code captured and which are the agent's own claims.
Contro1 is always discovery-first: an unknown agent is recorded as claimed and shown in the inventory, so teams can connect quickly without pre-registering every agent. Shadow agents surface on their own.
For production, graduate important agents into verified identities with owners, department scopes, approval hierarchy, and evidence expectations. When you do not trust an agent, block it. A blocked agent joins the Blocked list and every subsequent call it makes is rejected with HTTP 403. Unblock it at any time.
GET /v1/requests/:id/evidence returns a JSON evidence packet that now includes the verified agent block, the trace, tool_calls, sub_agents, retrieved_context, and an integrity signature. GET /v1/agents/:id/evidence returns a signed bundle of every packet for one agent (or ?format=csv).
The integrity block is an HMAC-SHA256 signature over the canonical packet, computed with your organization webhook secret — the same secret used for signed callbacks. Recompute it to prove a packet has not been altered.
Webhooks & signed callbacks · Audit records & cases · API endpoint index
The signed webhook is cryptographic proof of a human decision. Verify it inside the system that executes the action - not inside the agent. Any tool that must never run without human sign-off (payments, deploys, data deletion) should refuse to act without a verified approval; that way no agent, including shadow agents nobody registered, can trigger it by skipping Contro1.
No. You can start with one quick-start key and let agents appear in the inventory the first time they call. You only act when you want to verify a claimed agent, scope its authority, route approvals by owner or hierarchy, or block it.
No. The verified identity is derived from the authenticated API key. A caller-supplied actor.agent_id can only ever create a claimed sub-agent, which is clearly marked until an admin verifies it.
Recompute the HMAC-SHA256 over the canonical packet (excluding the integrity field) using your organization webhook secret and compare it to integrity.signature. The SDKs expose a helper, or use the same routine as signed webhook verification.
Learn how to create, inspect, and cancel Contro1 requests for approvals, clarifications, and escalations.
Use Contro1 audit records to log actions that agents are authorized to run autonomously, and correlation_id to connect requests and logs into one case timeline.
Validate signed Contro1 callbacks and safely resume AI workflows after approvals, rejections, expirations, or escalations.
Secure your Contro1 integrations with environment-based API keys, role-aware routing, and clear ownership boundaries.
A compact map of the public Contro1 runtime API: request creation, Control Map preview, audit records, and thread timelines.