Introduction
Confirm.dev is the human-in-the-loop layer for AI agents: a hosted pause button your code calls before an agent does anything sensitive. The agent yields, a human decides, and a signed webhook resumes the run — with an immutable audit trail of the whole exchange.
Why this exists
Autonomous agents are good enough to act and not good enough to act unsupervised. The failure mode isn't hypothetical: a support agent refunds $10,000 instead of $10, a sales agent invents a funding round in a cold email, an ops agent drops a table that billing still reads. Teams either ship agents with no brakes, or bolt approval flows onto Slack threads and spreadsheets that satisfy no auditor.
Confirm gives you the brakes as infrastructure: one API to pause, one review surface for the human, one webhook to resume, one log for compliance.
The request lifecycle
- Create. Your code calls
POST /v1/requestswith a human-readable summary, the exact action payload, and who should approve it. The response is aPENDINGrequest. - Notify. The approver gets an email with a single-purpose magic link. No account, no app — the 256-bit token in the link is the credential.
- Decide. The approver sees the summary and payload, then approves, rejects, or edits the payload first. Identity, timestamp, IP, and note are recorded.
- Resume. We fire an HMAC-signed webhook to your endpoint. Your code executes
effectivePayload— the human-edited version when one exists, otherwise the original. - Expire. If nobody answers within the TTL, the request becomes
EXPIREDand a webhook tells your system. Silence never becomes consent.
Request statuses
| Status | Meaning |
|---|---|
| PENDING | Waiting on a human. The agent should stay paused. |
| APPROVED | A human said yes. Execute effectivePayload. |
| REJECTED | A human said no. Do not execute; the rejection note explains why. |
| EXPIRED | The TTL elapsed with no decision. Treat as a rejection. |
PENDING is the only non-terminal state. Terminal states never change — a request can't be re-approved, un-rejected, or resurrected after expiry.
NEXT