Letting an agent pay
Human-in-the-loop approval for AI agent purchases
How to make an agent wait for a person before larger payments: where the request goes, what the approver checks, and what happens if nobody answers.
Hold any payment above an auto-approve threshold, send the owner a one-time approval request, and only move money once they confirm the exact amount and recipient. Requests nobody acts on should expire, and the agent should wait rather than retry.
Why is this harder than it sounds?
The MCP specification says there should always be a human in the loop able to deny tool calls, but most hosts implement that as a generic 'allow this tool?' prompt. For payments that is too coarse: you end up either approving every call blindly or blocking the tool entirely. Useful approval is specific to the payment. It shows the amount and the destination, it reaches you when you are not watching the agent's screen, and it fails safe: an unanswered request lapses rather than going through. It also has to survive the agent's own behaviour, since an agent that does not understand it is waiting will often try again.
How do you do it?
- Decide which payments need a person. Set an auto-approve limit for routine amounts and an ask limit above it. Everything in between waits for approval; everything above the ask limit is refused.
- Send the request where you'll see it. Email works everywhere; a browser or phone push is faster. The request should link to a page for that one payment, not to a general dashboard.
- Approve the payment itself, not the description. Check the amount and the recipient address. The reason text was written by the agent and can be wrong, or written by someone who manipulated the agent.
- Make approval prove itself. The strongest approval is one where the approver signs the transfer in their own wallet, so nothing moves without their key. A link plus a login is weaker; a link alone is weaker still.
- Let unanswered requests lapse. Give requests an expiry. A payment that waits forever is a payment someone can approve by accident next month.
- Tell the agent it is waiting. The tool result should say the payment is awaiting approval and give the agent a link to hand you. Instruct it not to retry while it waits and to check the payment's status later.
What it does not mean
- A host's 'allow this tool' prompt is not payment approval. It doesn't show you the amount in a form you can verify, and it is easy to click through.
- Human in the loop does not mean every payment. Approving every small payment trains people to approve without reading.
- An approval link is not proof of anything by itself. What matters is what the approver has to do to complete it.
Common questions
Do I need to log in to approve?
Not in Veyra. The approve page is authorised by the link's secret token, the matching wallet and the on-chain receipt, so you approve from the wallet that holds the money.
What does the agent do while it waits?
Veyra's create_payment tells the agent to give you next_action.url, not to retry while the payment is pending, and to call get_payment to read the outcome.
What if I approve on the wrong wallet?
The payment is bound to the source chosen when it was created. Connect the address shown as 'Pay from'; a different wallet won't satisfy it.
Where does Veyra fit?
In Veyra, a payment between your auto-approve and ask limits returns status awaiting_approval with a one-time link. Veyra emails the account owner and, if you turn it on, sends a browser push notification. Opening the link asks the wallet the payment is bound to (MetaMask, Base / Coinbase or WalletConnect) to send the actual USDC transfer on Base; Veyra then checks the on-chain transaction matches the request. Rejecting in the wallet cancels the payment. A link is valid for an hour and can be re-issued from the dashboard; the payment itself lapses after 24 hours. On the Free plan every payment takes this path.
Sources
Terms on this page
- Auto-approve limitAn auto-approve limit is the largest single payment an agent may make without a person approving it, within any other caps that apply.
- Payment intentA payment intent is an object representing a payment that has been requested but not necessarily completed, which moves through defined states such as awaiting approval, submitted, confirmed or cancelled.
This page explains how agent payments and the related technology work. It is not financial, investment, legal or tax advice. Protocols and provider features change; check the linked official sources before relying on a detail.