Control
A person approves, rejects or answers before the step runs, routed to the right role, department or on-call person, with escalation when nobody answers in time.
Core API
Put a person in front of a risky step in any agent, company workflow or internal system, record every step, and get signed evidence. One API call and a callback handler, no MCP server required.
Updated Sep 28, 2026
The API is for everything that runs its own steps: internal systems, company workflows and agents you build, including the ones with no MCP server or clean API of their own. Your code keeps doing the work; Contro1 decides who approves it, records it and proves it.
Most of what a company wants to govern is not an AI app with an MCP server. It is its own software: an internal refund tool, a back-office script, an n8n or Airflow workflow, a deploy pipeline, an agent a team built. Many of these have no MCP server and no clean API of their own, and they are exactly the places where one wrong step is expensive.
The Contro1 API is how those get governed without being rebuilt. Your code keeps doing the work. Before a risky step it asks Contro1, a person decides, and your code continues only on an approval.
A person approves, rejects or answers before the step runs, routed to the right role, department or on-call person, with escalation when nobody answers in time.
Every step is recorded, gated or not, per agent and per workflow, so you can see what each one actually does and how often it needs a person.
Who asked, who decided, what they saw and what happened next, as a signed record you can hand to an auditor.
| Use case | Example | What you call |
|---|---|---|
| Internal systems and back-office tools | A refund tool, an admin panel, a script that edits the customer database | POST /v1/requests before the step |
| Company workflows and automations | n8n, Zapier, Airflow, a cron job, an RPA bot | A request at the risky node, an audit record for every other node |
| Deploys and infrastructure | A production deploy in CI, a database migration, rotating a key | A request as a pipeline gate that fails closed |
| Money movement | Refunds, payouts, a change to a vendor's bank details over a threshold | A request with risk_level and an approval policy of two approvers |
| Data access and exports | Exporting customer records, opening a restricted dataset | A request routed to the data owner's department |
| Content before it goes out | An AI-written email, post, reply or contract clause | request_type review, with the draft in the context |
| Asking a person, not approving | A missing detail, a choice between options | request_type input or decision |
| Steps that need no approval | Low-risk autonomous actions you still want counted | POST /v1/audit-records, measured on Activity |
| Compliance evidence | Human oversight records for the EU AI Act or an internal audit | GET /v1/requests/:id/evidence |
Three ways in, by who performs the step.
| If | Use | Because |
|---|---|---|
| Your own code performs the step | The Requests API (this page) | Contro1 decides and records; your system keeps its own credentials and does the work. |
| The application is in Contro1's catalog | The Action Gateway | Contro1 holds the account and makes the call, so there is nothing to integrate and the record is what Contro1 observed. |
| A person works through an AI app | The Contro1 MCP | Claude, ChatGPT or Cursor act with that person's access. |
| You only want it recorded | Audit records | No person in the loop, still measured and searchable. |
Your code creates a request when it reaches a risky or policy-sensitive step. Contro1 routes it to the right person by required_role, department, shift coverage and priority, and escalates if nobody answers within the SLA.
If your code waits for the answer, set its own timeout longer than the Contro1 SLA. A 10 minute SLA needs a wait above 10 minutes, so your code does not give up before Contro1 can return timed_out or escalate.
The request moves through these states:
The context in the example ("Customer requests a $2,400 refund after a shipping failure") is not something the reviewer should hope your code volunteers. Build it from three sources: the exact input your code intercepted (machine-observed fact), the event that triggered the run, and, for an agent, its own justification, which you get reliably by making reason a required parameter of the risky tool.
Keep the two apart: facts your code observed, and text a model wrote. Model-written justification helps the reviewer decide, but it must never change routing or risk_level, because a prompt-injected agent writes very persuasive reasons.
The API returns at once with a pending request. Store the request id and wait for the signed callback.
When a person decides, Contro1 sends a signed POST to your callback_url. Always verify the signature and timestamp before acting on the decision.
New handlers can read the top-level status and response. protocol_response and structured_response are there for protocol adapters and compatibility.
Handle every final state. The default is always to fail closed: anything other than an approval means the step does not run.
The gated step is one step. Record the others as audit records, with one trace_id for the run, so the whole workflow is measured: what it did, how often it needed a person, and where it failed. Steps from agents can be reported automatically by a hook in their runtime.
Complete API guide · API endpoint index · Webhooks: signature verification · Requests API reference · Audit records and cases · Authentication and credentials
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. Your code calls Contro1 before the step and waits for the decision. The system being governed does not need to expose anything, which is why the API suits internal tools, legacy systems and workflows.
Before a step that is high-impact, irreversible, financially sensitive or policy-sensitive. Record the other steps as audit records so they are still measured.
Yes. The usual start is one API call and a callback handler around one risky step. Nothing else changes.
The request ends as timed_out. Your code should fail closed by default, and can route to a fallback approver.
No. Any HTTP client works. The Python and TypeScript SDKs, and the guides for LangGraph, OpenAI Agents, CrewAI, n8n and others, save you writing the calls yourself.
A practical walkthrough of the Contro1 runtime API: which endpoint an agent calls, when to call it, what to send, and how approvals, audit records, traces, and evidence fit together.
Know which agent did what: identity from the credential, sub-agents that register themselves, one trace per run with every tool call, hooks and OpenTelemetry that report without relying on the model, and HMAC-signed evidence.
Validate signed Contro1 callbacks and safely resume AI workflows after approvals, rejections, expirations, or escalations.
Learn how to create, inspect, and cancel Contro1 requests for approvals, clarifications, and escalations.