API endpoint index
A compact map of the public Contro1 runtime API: request creation, Control Map preview, audit records, and thread timelines.
Core API
Learn how to create, inspect, and cancel Contro1 requests for approvals, clarifications, and escalations.
The Requests API is the core surface agents use to ask humans for approval, clarification, or escalation in production.
Use the API host for runtime traffic. The canonical base URL is https://api.contro1.com/api/centcom/v1.
The marketing site remains at https://contro1.com, but production create/get/delete calls should target api.contro1.com.
Keep the question short and decisive.
Put policy detail, transaction facts, or execution context in the context field so the operator can understand the risk without opening another system.
Send policy_trigger when your own policy logic decides a human must review. Send policy_context when any policy source, risk service, rules engine, or framework tells you why review is required. This can be Microsoft AGT, OPA, Cedar, a homegrown risk classifier, a YAML rule file, or simple application code.
Contro1 records the policy evidence, routes the human decision, enforces reviewer comment rules, and returns the signed outcome. It does not need to own your policy logic.
For US AI governance programs, these optional fields help preserve NIST-style risk management evidence without moving impact assessments, bias testing, notices, or legal classification into Contro1.
Treat timeouts as real outcomes. An unanswered request is not an approval - it is a decision your workflow must still handle.
Set the agent or SDK wait timeout longer than the request SLA plus callback/escalation buffer. If the request uses sla_minutes: 10, the agent should wait more than 10 minutes, otherwise the local run may auto-cancel before Contro1 reaches the SLA outcome.
A reviewer who sees "Approve transfer?" with nothing else cannot exercise judgment - they can only rubber-stamp. Every gated request should answer three questions before a human opens it: what exactly will run, why the agent wants to run it, and what happened before this moment. That context comes from four sources:
Separate the two kinds of context and label them. Facts your gate observed (the payload, the triggering message, prior tool calls) are machine-observed. Text the model wrote (justification, summary) is agent-reported: useful to the reviewer, but generated by the same model that decided to act. A prompt-injected agent writes very persuasive justifications.
Two hard rules follow. First, agent-reported text must never change routing, risk_level, or approval policy - it informs the human and nothing else. Contro1 enforces this server-side: nothing inside agent_reported is read by routing, risk, or policy logic. Second, when a high-risk request arrives without its required context (no payload, no trigger, no justification), fail closed: reject it or bounce it back to the agent instead of asking a human to guess.
All three provenance keys (action, machine_observed, agent_reported) are optional. The smallest request still works with a plain string context; send the structured keys when you want the reviewer view, evidence packet, and Activity log to carry the provenance split. context.action is shorthand for tool_name/tool_input and is normalized into them on ingestion. agent_reported is capped at 4,000 serialized characters, machine_observed at 10,000. When present, the fields are stored on the request, included in the signed evidence packet, and summarized in the Activity entry for request_created (tool, trigger, and a clipped agent justification).
policy_context is a general evidence envelope for the reason a human was required. Use it with any system that evaluates risk or policy before the agent acts.
If you do not run a formal policy engine yet, you can still send a source such as custom_rules, finance_service, support_risk_classifier, internal_policy, opa, cedar, or workflow_guard. The important part is that future auditors can see which rule, version, and reason caused the human review.
Decision context fields are optional. Existing clients can ignore them, and low-risk audit-only actions should still use logAction instead of creating an approval request.
Use them when your runtime already decided a human must review the action. This makes the request easier to audit without moving policy logic into Contro1.
The same fields also fit governance evidence: risk_level maps to risk classification, policy_trigger explains why review was required, policy_context preserves the policy source and rule, approval_requirements captures expected reviewers, and correlation_id/case_id connects records to a broader case or AI use case inventory.
Agents can call POST /api/centcom/v1/requests/control-map with the same approval policy shape to preview whether routing is currently satisfiable.
Control Map returns known departments, requested external role mappings, unmapped roles, on-shift capacity, fallback or manual routing targets, and warnings such as insufficient distinct approvers.
Use this to understand setup gaps, such as an unmapped CFO role or a two-person approval that cannot be satisfied with the current shift.
If a real request is sent with an unknown external role, Contro1 can keep the request pending while workspace admins choose who should receive it. Once the mapping is saved, future requests for that role route automatically.
A single member can hold multiple internal roles in the database, and the external role mapping popup can map multiple external roles to the same person. Separation-of-duties still checks for distinct approvers when the policy requires it.
Create and get responses include both the operational state machine and protocol adapter fields so SDKs can consume one shape across runtimes.
routing_source explains where routing came from. api_key_default means the request used the default routing configured for the API key in Settings -> APIs & Webhooks unless the request body supplied an override.
Use external_request_id for one external action and idempotency. Use correlation_id (shown in the dashboard as Case ID) for the broader business case. Use in_reply_to when a new request or audit record directly follows a prior Contro1 item.
Every request and audit record that shares a correlation_id appears together in one case timeline. In the UI, a single-item case shows the Case ID; multi-item cases show an Open case button.
Use audit records for actions that do not need a human before execution, but still need durable evidence in the same timeline.
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.
approval is better for higher-risk actions because it supports approve or reject semantics and a comment, while yes_no is better for simpler binary prompts.
No. If the agent is already authorized to act, use logAction or POST /audit-records. Create a request only when a human must decide before the workflow continues.
Use it whenever the decision has ownership boundaries, such as HR, finance, security, or management approvals.
Send a stable external_request_id. Retries that reuse the same value return the original request instead of creating a new one.
Yes. Call DELETE /api/centcom/v1/requests/{id} - the operator view closes and your callback receives a cancelled status.
Make the justification a required parameter of the risky tool itself, for example transfer_money(to, amount, reason). The model fills it in at decision time and your gate forwards it with the action. Label it agent-reported in context, and never let it change routing or risk_level - a prompt-injected agent writes very persuasive reasons.
A compact map of the public Contro1 runtime API: request creation, Control Map preview, audit records, and thread timelines.
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.
Secure your Contro1 integrations with environment-based API keys, role-aware routing, and clear ownership boundaries.
Validate signed Contro1 callbacks and safely resume AI workflows after approvals, rejections, expirations, or escalations.
A US-first playbook for putting human review, audit trails, and accountability around AI agents, without turning governance into a year-long program.
A practical guide to monitoring, routing, escalation, audit trails, and execution control for production AI agents.