An open source API that adds a human checkpoint to any automation, AI agent, or script. One API call sends the approval email, and your code waits for the decision. Self-host it or try the demo.
⚠️ DESTRUCTIVE — git push origin main --force
Will overwrite upstream commits · Approve or reject…
DESTRUCTIVE · This action cannot be undone
Command
git push origin main --force
Why the agent wants this
The remote has diverged after a rebase. Force push is needed to sync the branch.
Files (2)
+ export async function POST(req) {
+ await deploy({ force: true })
- // force deploy disabled
… View full diff →
Why it exists
In July 2025, a developer told his AI agent eleven times, in ALL CAPS, not to touch production. It deleted the database anyway.
Instructions are only suggestions to an agent. A human gate that lives outside the model is not.
Read the full storyDeveloper first
const res = await fetch("https://shonin.dev/api/v1/approvals", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
action: "Deploy to production",
approver_email: "cto@company.com",
context: "PR #247 merged, 3 files changed",
}),
});
const { id } = await res.json();
// Then poll GET /api/v1/approvals/:id, or pass a webhook_url
Simple by design
POST to /v1/approvals with the action description, approver email, and optional context. You get back an approval ID immediately.
A clean, branded email arrives with Approve and Reject buttons. No login required. No account. One click.
Poll the approval by ID or receive a webhook the instant a decision is made. Act on the result however you like.
Built to be trusted
The approve and reject links go only to the person you name. The API never hands them back to your code.
Mail scanners and previews open every link in an email. A decision takes one deliberate click on a confirm page.
MIT licensed. Run it on your own Supabase and Resend, with no limits and your data in your hands.
Put a human in the loop in two minutes.