Early access · free for 100 approvals a month
Human approval your AI agents can't skip.
When an agent is about to move money, issue a refund or change an account, AI Approvel puts the decision in front of a person on WhatsApp or SMS, then hands your agent a signed record that anyone can verify.
No credit card · WhatsApp & SMS · Ed25519-signed audit trail
AI Approvel
WhatsApp · Business account
Approval needed
Your agent payments-bot wants to:
Wire $18,500.00 to Contoso Ltd
- Amount
- 18,500.00 USD
- Expires
- in 15 minutes
- Ref
- req_9f2a
Do you approve?
12:04
Audit trail
req_9f2a · 3 events
- 1created12:04:02
- 2delivered12:04:05
- 3decided12:06:11
- event_type
- decided
- payload.outcome
- approved
- payload.decided_via
- prev_hash
- a41c9e…93be
- hash
- 7f0e2d…21d4
- signature
- 3e91c7…7fd0
- key_id
- k1 · ed25519
hash = sha256( prev_hash | event_type | canonical_json(payload) | created_at )
Illustrative example. Hashes are shortened; the shapes match the API.
- WhatsApp & SMS via Twilio
- Ed25519-signed hash chain
- HMAC-SHA256 webhooks
- 60 requests / min per project
How it works
One API call. One person. One receipt.
Three steps, the same shapes you will find in the API reference.
- 01
Your agent asks
One POST when the agent reaches a risky action. The call returns 202 with an id while the message is delivered in the background. Nothing runs until someone decides.
bash# APPROV_API_BASE = https://<project>.supabase.co/functions/v1/approvals curl -X POST "$APPROV_API_BASE/" \ -H "Authorization: Bearer $APPROV_KEY" \ -H "Content-Type: application/json" \ -d '{ "approver_id": "apr_...", "action": "Wire $18,500.00 to Contoso Ltd", "amount": 18500, "currency": "USD", "callback_url": "https://agent.example.com/hooks/approv" }' # 202 Accepted # { "id": "req_9f2a…", "status": "pending", "expires_at": "2026-07-14T12:19:02Z", "replayed": false } - 02
A person decides
The approver you chose gets the action, the amount and two buttons on WhatsApp, or the same request by SMS. The first reply is the decision. Unanswered requests expire.
12:04AI Approvel
WhatsApp · Business account
Approval needed
Your agent payments-bot wants to:
Wire $18,500.00 to Contoso Ltd
Do you approve?
Approve Reject12:04
Approve12:06Decision recorded · first reply wins - 03
You get a signed record
The decision is POSTed to your callback_url with an HMAC signature, and every step, from created to decided, is appended to a hash chain signed with Ed25519.
httpPOST https://agent.example.com/hooks/approv Content-Type: application/json X-Approv-Timestamp: 1752494771 X-Approv-Signature: 5f1d3c8e… # hex HMAC-SHA256 of "<timestamp>.<raw body>" { "event": "approval.decided", "id": "req_9f2a…", "outcome": "approved", "decided_via": "whatsapp", "decided_at": "2026-07-14T12:06:11Z", "action": "Wire $18,500.00 to Contoso Ltd", "amount": 18500, "currency": "USD", "context": { "ticket": "FIN-2210" } }
Poll GET /:id instead of using webhooks if you prefer. Full API reference
What you get
"Sent" is not "approved."
A notification can be ignored, spoofed or answered twice. AI Approvel is a control: the action waits for a recorded decision.
WhatsApp first, SMS fallback
Messages go out on WhatsApp through Twilio and fall back to SMS. Delivery is recorded as its own signed event, so you can see when the message landed.
Links that bots cannot trigger
Approval links open a confirmation page and the decision is recorded only when the approver taps. Link previewers and security scanners that follow URLs cannot decide on anyone's behalf.
First reply wins
An approval is decided exactly once. A late or duplicate reply does not flip it, and the decision is bound to the request your agent created.
Signed webhooks
approval.decided is POSTed to your callback_url with an HMAC-SHA256 signature over the timestamp and raw body. Non-2xx responses retry with backoff, and every attempt is logged.
A trail anyone can verify
Each event hashes the one before it and is signed with Ed25519. The API returns the public key and the exact formula, so you or an auditor can verify the chain offline. Download it as JSON from any approval.
Keys and limits you can reason about
API keys are scoped to one project, stored as a hash and shown once. Each project may create 60 approvals a minute; past that you get 429 with a Retry-After header.
Built for compliance
The oversight step and the log, as code.
Article 26 of the EU AI Act sets obligations for deployers of high-risk AI systems. Two of them map directly onto what AI Approvel produces.
Whether the Act applies to your system, and in which risk class, is a question for your counsel. This describes the product; it is not legal advice.
Art. 26(2) · human oversight
A named person decides
Deployers must assign human oversight to natural persons with the necessary competence, training and authority. AI Approvel routes each decision to an approver you choose and records who decided, over which channel, and when.
Art. 26(6) · logs
A log you can keep and prove
Deployers must keep the logs their high-risk system generates, for at least six months unless law provides otherwise. Every approval produces a hash-chained, Ed25519-signed trail you can export and verify offline.
Security
Built so you don't have to take our word for it.
The record of every decision has to be trustworthy, and provably so. These are the mechanisms, not promises.
Hash-chained, Ed25519-signed events
Change any past record and the chain breaks. The response ships the public key and the hashing formula so verification never depends on us.
HMAC-signed webhooks with replay protection
X-Approv-Signature covers the timestamp and the raw body. callback_url must be https on a public host; private and metadata addresses are rejected.
Encrypted in transit and at rest
TLS everywhere, encryption at rest in Postgres, and signing keys held in an isolated vault separate from application data.
Hardened by default
Strict Content-Security-Policy, HSTS with preload, X-Frame-Options DENY, a Referrer-Policy and a Permissions-Policy on every response.
SOC 2 Type II is on the roadmap. Read the security page
Pricing
Start free. Pay when agents go to production.
Usage is counted per approval created. Reads, reminders and the approver's reply are never counted.
Free
$0/ month
100 approvals a month
1 approver, community support
- Most popular
Growth
$99/ month
5,000 approvals a month
Unlimited approvers, webhooks, export
Scale
Custom
Volume approvals
Retention, dedicated signing key, SLA
Put a person in the loop before your agent ships.
Create an account, add an approver, send your first approval. Free for 100 approvals a month.