Your agent stops.
A person decides.
Your agent continues.
Every serious autonomous workflow eventually reaches something it shouldn't do alone. One API call sends that decision to a real person by email or Telegram, they tap a button on a page that needs no account, and your agent picks up the answer from a poll it never pays for.
One approval, start to finish
Agents can call almost anything. Not a person.
The agent writes “please confirm” into a log nobody reads, then proceeds anyway.
The run halts on an exception and waits for someone to notice it died.
A webhook, a queue, a token scheme, a page, a bot, and an expiry job — for one button.
Handoff is the fourth option, and it is one call.
Reach them where they already are
Same call, same answer shape, same price. Pick the one the person you need actually reads.
Reaches anyone, anywhere, with no setup on their side.
The message arrives with a single button. Works on a laptop, a phone lock screen, and the client your CFO refuses to change.
Telegram
For the on-call person who answers in seconds, not hours.
Delivered to a chat with a Review button. One precondition, and it is Telegram's, not ours: the person must have messaged the bot once, because a bot can never open a conversation.
No SMS, and no SMS card. There is no SMS credential on this deployment, so the rail does not exist — and a documented endpoint that returns 404 costs an autonomous caller more than a missing one ever would. When a provider lands, it will appear here and in /api/pricing at the same moment.
A closed circuit with a person inside it
Five stops, one of which is a human being. Everything else is infrastructure you don't have to write.
- 01Your agent callsPOST /api/handoff with the question and who to ask.
- 02A human gets itEmail or Telegram, with a one-time link. No account needed.
- 03They decideOne tap on a hosted page built for a phone.
- 04You poll, freeGET the request until status flips to answered.
- 05Your agent resumesWith a real answer, and a record of who gave it.
Four ways in. One answer out.
Handoff is an agent tool first. Whatever is driving — a script, Claude, the Ounie AI Team, or a wallet with no account at all — the shape is the same: one call, a free poll, a human's answer.
REST
curl -X POST https://handoff.ounie.com/api/handoff \
-H "Authorization: Bearer hnd_live_…" \
-d '{"channel":"email","to":"lead@acme.com",
"subject":"Refund $840 to order 1183?",
"message":"Customer says it arrived broken.",
"choices":["Approve refund","Ask for photos","Deny"]}'Returns a request id and a poll_url. Poll it as often as you like — reads are free.
MCP
https://handoff.ounie.com/api/mcp
Authorization: Bearer hnd_live_…
request_approval · notify_human · wait_for_answer
get_handoff · list_handoffs · cancel_handoffwait_for_answer blocks until the human replies, so an agent never has to hand-roll a polling loop around its own guardrail. Hosts that can't set headers — the Ounie AI Team among them — pass ?api_key= on the URL.
x402
POST /api/x402/handoff → 402 + terms
POST /api/x402/handoff → sign, retry
X-Payment: <signed> → deliveredNo account, no key: pay in USDC on Base per call. The poll URL that comes back is free and works without any credential but the one in it. x402 docs.
Credits, refused not overdrawn
402 insufficient_credits
{ "required_credits": 2,
"balance_credits": 0,
"buy_credits_url": "https://ounie.com/…" }Every key spends only its own owner's Ounie wallet, and the reserve happens before the send — so a runaway loop gets a clean 402, never a surprise bill. Mint keys at Dashboard → API keys.
You pay for the send. Nothing else.
per message actually delivered to a person — 2 on email, 2 on Telegram.
If the provider refuses the message while you wait — a blocked bot, an unreachable chat, an address the mail API rejects — the whole reserve goes back to the pool it came from. An email that is accepted and bounces later is asynchronous and invisible to the call, so that one does bill; it expires unanswered, which your agent must read as a no.
Everything after the send costs nothing
An agent shouldn't have to ration the checking-back. Reading a result you already paid to create is not a second product.
- Polling for the answer, as often as you like
- The human's decision page
- Reading the answer back
- Listing your history
- Withdrawing a request nobody answered
The things you'd ask before wiring this in
Does the person answering need an Ounie account?
What stops an agent from approving its own request?
What happens if nobody answers?
Can I cancel a request after sending it?
How often can I poll?
What if the send fails?
And if an email is accepted but bounces later?
Why is there no SMS option?
Is an approval here legally binding?
Do I need a subscription?
Give your agent a way to ask.
Two credits, one message, one answer you can point at afterwards. Sign in with the Ounie account you already have.