Impri is the approval inbox between your agent and the real world. Your agent proposes a refund, an email, a deploy — a human approves, edits or rejects it from the web inbox, Slack, Telegram, Discord, email or their phone, and only then does it execute. Think of it as the imprimatur your agent needs before anything ships.
Free: 100 approvals a month · no card · no email · self-host instead
Wire it into your agent
Get notified wherever you already are
Impri never executes anything itself. It holds the queue and the decision — your agent proposes, a human decides, your agent executes only on approve.
Your agent POSTs an action with a preview — a refund, an email, a deploy, a publish — before it does anything.
A human approves, edits the draft, or rejects it — from the web inbox, Slack, Telegram, Discord, email or their phone.
The decision returns via webhook or polling. Your agent executes the approved (possibly edited) version — never the original draft.
Optional: a watcher can kick off step one automatically by polling RSS, Reddit or a page for changes.
New to this? Read What is an approval inbox? and Human-in-the-loop for AI agents, explained.
Pending and expired actions never execute. The code path that sends the email or issues the refund is unreachable until an explicit human approve comes back.
A reviewer can tweak the draft before approving. The diff against the original ships inside the same signed payload your agent already receives.
Every decision is append-only — no update or delete route exists for an audit row. GDPR erase leaves a tombstone showing an erasure happened, not a gap.
Every decision webhook carries an HMAC-SHA256 signature, timestamp and nonce — verify it before you trust the payload, or just poll instead.
One POST puts a draft in the inbox. Your agent polls (or gets a webhook) and only acts on the decision — approved, rejected, or edited. Same flow from an MCP tool.
How to add human approval →$ curl -X POST https://api.impri.dev/v1/actions \ -H "Authorization: Bearer im_…" \ -H "Content-Type: application/json" \ -d '{ "kind": "payment.refund", "title": "Refund $84.00 — order #10432", "preview": { "body": "Item arrived cracked, ticket #6021" }, "payload": { "order_id": "10432", "amount_cents": 8400 }, "editable": ["payload.amount_cents"] }' → 201 { "id": "act_5jf8", "status": "pending" } # …human approves the amount in the inbox… → approved agent executes the refund ✓
Six places where a human decision belongs between an AI agent and a real-world side effect.
Require human sign-off before an AI support or billing agent issues a refund or charge, with the amount and reason visible in the approval card.
Read more →Hold every outbound email, Slack message, or SMS an AI agent drafts for a human to read and approve before it reaches a real inbox.
Read more →Kick off a long coding agent run before bed, gate every risky step behind Impri, and approve or reject each one from your phone in the morning.
Read more →Gate deploys, Terraform applies, and other infrastructure changes an AI agent proposes behind a human decision, without slowing down everything else it does.
Read more →Put human approval in front of every INSERT, UPDATE, DELETE or schema change a text-to-SQL or coding agent generates, before it touches production.
Read more →Put a human review step in front of AI-drafted blog posts, social media, and marketing copy before it goes live, without slowing down the drafting itself.
Read more →Signed webhooks, full data export, and email / ntfy / push notifications are on every tier — security is never a paid add-on.
The full core is MIT-licensed and free to run yourself — no watcher limit, no approval quota, no telemetry. Same API surface as the hosted cloud, just a different base URL.
$ git clone https://gitlab.com/sekera.radim/impri.git $ cd impri $ docker compose up -d # API on :8484, web inbox on :8080 — bootstrap key printed to the server log
Wire the MCP server or REST API into your agent today, and keep a human in the loop.