Human approval for AI agents
Let your AI agent ask before it acts.
Gate is a simple API that sends your agent's risky actions to a person for a yes or no, and tells your agent the answer.
Agents can send emails, spend money and delete data on their own. One wrong move can cost you money or a customer's trust. With Gate, a person approves first, straight from their email, and your agent only goes ahead on a yes.
Free for 25 approvals a month. No credit card. Nothing to install.
- Your agentPOST /approvals
"Refund $450 to customer #1832" - Gatestatus: "pending" · asks your approver
- Your approverTaps Approve
- Your agentGET /approvals/apr_…
status: "approved" → does the refund
Give your agent more power, without losing control
You don't have to choose between an agent that can't do anything useful and one that does things nobody checked.
A person says yes first
Risky actions wait for a real approval. Your agent sees exactly one answer: approved, rejected or expired.
Safe by default
If nobody answers in time, the request expires and your agent should not act. Silence never counts as a yes.
Know who said yes
Every answer comes back with who decided and when (decided_by, decided_at). A decision is final and can't be changed later.
Nothing to install
No SDK and no dashboard. Paste one block into your agent's instructions, or make two HTTP calls from your code.
How to use Gate
Three steps, about two minutes. Nothing to install.
See it in 48 seconds
-
Get a free key
Enter your email in the sign-up form. Your key appears right away and is shown once, so save it. No credit card. Approving your first approval email confirms your address.
-
Paste one block into your agent
Copy this into your agent's instructions: its bot instructions, system prompt or rules file. Put your key in place of
YOUR_GATE_KEYand the approver's email in place ofyou@example.com. When you sign up, we fill in both for you. On the Free plan the approver is the email you signed up with; Pro can ask anyone.Gate approval rule Before you send any message or email, spend or move money, change or delete data, or make any API call that changes something outside this chat, ask a person for approval through Gate first. Read-only actions don't need approval. Step 1. Ask. Send this HTTP request: POST https://gateapprove.com/approvals Authorization: Bearer YOUR_GATE_KEY Content-Type: application/json {"title": "<one short line: what you want to do>", "description": "<why, and anything the approver should know>", "action_payload": {<the exact action and its details>}, "requester_name": "<your name as an agent>", "channel": "email", "approver_email": "you@example.com", "expires_in_seconds": 3600} Save the "id" from the answer. Step 2. Wait for the answer. Every 15 seconds, send: GET https://gateapprove.com/approvals/{id} Authorization: Bearer YOUR_GATE_KEY - "status": "approved" means go ahead. Do exactly the action you described, nothing more. - "status": "rejected" or "expired" means stop. Do not act, and tell me it was not approved. - "status": "pending" means keep waiting. Never act without "approved". If Gate returns an error or can't be reached, do not act. API reference: https://gateapprove.com/docs -
Approve from your inbox
When your agent wants to do something risky, Gate emails the approver an "Approval needed" message with Approve and Reject. They tap one and confirm. See what they get.
Your agent goes ahead only on
approved. If the request isrejected, or nobody answers in time, it stops.
For developers: the same calls with curl
Get a key
curl -X POST https://gateapprove.com/signup \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
Answer
{"api_key": "<your new key>", "plan": "free", "monthly_limit": 25,
"email_verified": false, "unverified_email_limit": 3,
"note": "Store this key now; it is shown once. Approving your first approval email confirms your sign-up address; until then this key can send 3 approval emails. No email within a minute? Check your junk or spam folder."}
Ask for approval
Before the risky action, your agent describes what it wants to do and who should decide. Gate emails it to the approver. On the Free plan, approver_email must be the email you signed up with; on Pro it can be any address.
curl -X POST https://gateapprove.com/approvals \
-H "Authorization: Bearer YOUR_GATE_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Refund $450 to customer #1832",
"description": "Customer reports a double charge on order 5521.",
"action_payload": {"action": "stripe.refund", "amount_cents": 45000, "currency": "usd"},
"requester_name": "support-bot",
"channel": "email",
"approver_email": "you@example.com",
"expires_in_seconds": 3600
}'
Answer (201 Created)
{"id": "apr_x7k2m9q4w8e1r5t3y6u0i2o7", "status": "pending", "channel": "email",
"approver_email": "you@example.com", "expires_at": "2026-10-28T11:15:00Z",
"decided_at": null, "decided_by": null, ...}
Check the answer
Check every 5 to 30 seconds until the status is no longer pending. Act only if it is approved.
curl https://gateapprove.com/approvals/apr_x7k2m9q4w8e1r5t3y6u0i2o7 \
-H "Authorization: Bearer YOUR_GATE_KEY"
Answer (200 OK)
{"id": "apr_x7k2m9q4w8e1r5t3y6u0i2o7", "status": "approved",
"decided_by": "email:you@example.com", "decided_at": "2026-10-28T10:17:42Z", ...}
All fields and errors are in the API reference.
Works with your agent
Gate is a plain HTTPS API, so it works with any agent that can make web requests and follow instructions.
If it can call a URL, it works with Gate.
- Grok bots
- Claude Code
- Claude apps with tools
- ChatGPT and OpenAI agents
- Custom GPT actions
- Cursor and Cursor agents
- LangChain and LangGraph
- CrewAI
- AutoGen
- n8n
- Zapier
- Make
- Your own Python or Node agent
Grok bots
Paste the block from step 2 into your bot's instructions. That's the whole setup.
Coding agents
Claude Code, Cursor and similar: paste the block into the system prompt or a rules file, such as CLAUDE.md or your Cursor rules.
n8n, Zapier and Make
Add an HTTP Request step that sends the approval request, then one that checks it until the status isn't pending. Continue only on approved.
Your own code
LangChain, CrewAI, AutoGen or plain Python and Node: add the two calls as a tool, or paste the block into your agent's system prompt.
Your agent needs a way to make web requests, such as a tool, an action or an HTTP step. Names are products you can use Gate with; no official partnership implied.
When to use it
Use Gate for anything you would want a person to check first. Let everything else run as normal.
Your agent wants to send an email
A reply to a customer, an invoice batch or a message to your whole list.
"Send the weekly invoice batch (12 invoices)"Your agent wants to spend money
A refund, a purchase or a payment to a supplier.
"Refund $450 to customer #1832"Your agent wants to delete data
Removing records, closing accounts or changing a database.
"Delete 2,300 inactive users"What the approver sees
A short request with everything needed to decide, and two choices.
- By email: a message titled "Approval needed" with Approve and Reject links. Each link opens a page with one confirm button, so a stray click or a link preview can't decide by accident.
- In Slack (coming soon, not self-serve yet): a message in a channel with Approve and Reject buttons. Tell us if you want it.
- They see the title, who is asking, the details and when the request expires.
- No account or app needed for email approvers.
Simple pricing
Start free. Move to Pro when your agent needs more. No overage charges and no surprise bills.
Free
To try Gate and for small agents
US$0 / month
- 25 approvals per month
- Email approvals to your own sign-up address
- No credit card
Pro
For agents doing real work every day
US$29 / month, flat
Prices are in US dollars. Taxes such as GST are added at checkout where they apply.
- Up to 1,000 approvals per month
- Email approvals to any address
- Slack approvals coming soon (not self-serve yet). Tell us if you want it
- No overage charges
- Cancel any time
Payments are handled by Stripe.
For agents: call POST /billing/checkout with your key and open the returned link instead. Manage or cancel with POST /billing/portal.
Limits are per API key and reset each calendar month (UTC). When a key reaches its limit, POST /approvals returns HTTP 402 plan_limit_reached and nothing is created. Checking an existing approval is never limited.
Questions
How do I install it?
There is nothing to install. Get a free key with your email, then paste the block from step 2 into your agent's instructions, system prompt or rules file. From then on your agent asks before risky actions. Developers can call the two HTTP endpoints directly instead.
How long does it take to set up?
About two minutes: get a key, paste one block into your agent, done. There is no SDK to install and nothing to configure for email approvals.
Will it slow my agent down?
Only the actions you send to Gate wait, and only until a person answers. Everything else your agent does runs as before. You choose how long a request stays open, from 1 minute to 7 days (24 hours if you don't say).
What happens if nobody responds?
The request expires at the time you set. Its status becomes expired, the Approve and Reject options stop working, and your agent should not act.
What does it cost?
Free gives you 25 approvals a month. Pro is US$29 a month, flat, for up to 1,000. Prices are in US dollars. Taxes such as GST are added at checkout where they apply. There are no overage charges: at the limit, new requests are refused with HTTP 402 until the next month or an upgrade.
Which channels can approvers use?
Email is the self-serve channel. On the Free plan, approval emails go only to the address you signed up with, so you approve your own agent's actions; on Pro they can go to any address. Slack is coming soon but isn't self-serve yet, so you can't connect your own Slack workspace today. If you want them, email hello@gateapprove.com. Each request uses one channel.
How is my API key stored?
Gate keeps only a SHA-256 hash of your key, so the key is shown once, when you sign up, and can't be shown again. Keep it in your agent's secret settings, not in your code. One key per email.
Can a decision be changed, or made twice?
No. Once a request is approved, rejected or expired, that is final. If two people click at the same moment, exactly one decision counts. Your approvals are only visible to the key that created them.
Can Gate tell my agent instead of it checking?
Yes, Gate can send a signed webhook to your server when a request is approved or rejected. Setting a webhook up for a key isn't self-serve yet; checking with GET /approvals/{id} always works.
Put a person in front of your agent's next risky action
Get a free API key now. One key per email. The key is shown once, so keep it somewhere safe.
Free for 25 approvals a month. No credit card.
Lost your key?
Replace it by email. Your old key stops working only after you confirm. Your plan and usage stay the same.
Your API key: store it now, it is shown once
Copy this key into your password manager or your agent's secrets now. Gate keeps only a hash, so it can't show it again.
Approving the first approval email Gate sends you confirms your email address. Until then, this key can send 3 approval emails. No email within a minute? Check your junk or spam folder and mark it Not junk. Outlook and Hotmail often file the first one there.
Next: paste this into your agent
Your key is already filled in, and your email is set as the approver. On the Free plan it must stay your sign-up email; upgrade to Pro if someone else should decide. Copy the whole block into your agent's instructions, system prompt or rules file. That's the install.
This block contains your key. Paste it only into your own agent's private instructions or settings, never anywhere public. To upgrade to Pro later, use the Upgrade to Pro button under Pricing, or call POST /billing/checkout with your key and open the returned URL.