Letting an agent pay

How to test AI agent payments without real money

Run an agent's payment flow end to end on a simulated rail: what to test, how to tell simulated from real, and what a testnet does and doesn't prove.

Point the agent at a simulated payment source that settles instantly and moves nothing, with the same limits you plan to use for real. Test the approved, held and blocked paths, retries and duplicate calls, then switch the source and keep everything else the same.

Why is this harder than it sounds?

Agent payment bugs are rarely in the transfer itself. They are in the agent's behaviour around it: retrying a payment it thinks failed, splitting a payment to fit under a limit, reporting success when a payment is still waiting, or misreading a blocked result. You only see those by letting the agent run, and you don't want to learn them with real funds. The other trap is a test result that looks like a real one. If a simulated payment comes back as plain 'confirmed', sooner or later someone, or the agent, will report it as money that moved.

How do you do it?

  1. Use realistic limits. Configure the same auto-approve, ask, per-payment and daily limits you intend to use, or scaled-down versions such as 2, 5, 5 and 25.
  2. Exercise every decision. Ask the agent for one payment under the auto-approve limit, one in the approval band, one over the per-payment cap, and enough small ones to hit the daily cap.
  3. Force a retry. Interrupt the agent mid-payment or tell it the first attempt failed. Check that it reuses the same idempotency key or checks the payment's status, rather than paying twice.
  4. Check what the agent tells you. Read the agent's own summary. It should distinguish paid, waiting for approval, blocked, and simulated, and should never present a simulated payment as real.
  5. Review the log. Look at the audit trail for the run. Every decision you saw should be there, with the reason.
  6. Switch the source, not the code. When you are happy, attach a real source. The agent's tools and your limits should stay exactly the same.

What it does not mean

  • A simulated payment is not a payment. Nothing moved, and its reference is not a transaction anyone can verify.
  • A testnet is not the same as a simulated rail. A testnet exercises real signing and confirmation with valueless tokens; a simulated rail tests your agent and policy logic without any chain.
  • Passing on the simulated rail does not prove your wallet is funded or set up for real transfers, which need USDC and a little ETH for gas on Base.

Common questions

Will the agent know it is a simulation?

In Veyra, yes: the status is confirmed_simulated and the tool description tells the agent never to report that as a real payment or offer its reference as proof.

Do simulated payments count towards my plan's auto-pay allowance?

No. Veyra's monthly auto-pay limit counts only real on-chain executions, never the simulated rail.

Where does Veyra fit?

Veyra has a simulated source for exactly this. It settles instantly and moves no money on any chain, and it is labelled everywhere: the agent receives status confirmed_simulated with simulated: true, and the dashboard shows Simulated instead of Confirmed. Approval links on the simulated source are a single click instead of a wallet signature. The veyra-examples repository has runnable agents (Claude tool runner, Vercel AI SDK, plain curl) that use it. When you attach a real wallet, the tools and limits stay the same.

Sources

Terms on this page

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.