Test mode
Test vs live on the hosted platform – a veto_test_ key (Test mode) is a full sandbox where nothing real moves, a veto_live_ key (Live mode) settles real USDC on Base. Flip the dashboard toggle and rehearse the whole flow safely.
Every store on Veto runs in two modes, and the mode is decided entirely by which key you use. Build and rehearse the whole flow in Test mode with total confidence the shapes are identical in production, then flip one toggle to take real money in Live mode.
One rule to remember.
The mode is the key. A veto_test_… key means Test mode (a sandbox – nothing real
moves). A veto_live_… key means Live mode (real USDC on Base). There's no separate flag to
pass, and the two are fully isolated: a test key can never reach a real chain, and a live key
never falls back to the sandbox.
Test mode – the sandbox
Sign in at https://merchants.veto-ai.com and you start in
Test mode. This is a complete, safe rehearsal of the real thing:
- Stores you create are test stores (
livemode: false), pinned to Base Sepolia – a testnet with no real value. - When an agent buys, settlement runs on the mock facilitator: the full acceptance gate runs (caps, rate limits, the buyer's mandate, reputation, intent), a real signed receipt is issued, but no real funds move. You don't even need a funded wallet.
- Everything else – the catalog, the discovery manifest, the checkout, the webhook payload – is byte-for-byte what production sends, so what you build here works unchanged when you go live.
The point of the sandbox is to let you watch the whole flow – an agent discovering your store, quoting a price, and settling – without anything real being at stake.
Watch it end to end with the test agent.
From the dashboard you can fire a test agent purchase against your own test store: Veto runs
a real checkout through the mock facilitator so you can watch a live-shaped order settle, land in
your dashboard, and trigger your order.settled webhook – with zero money in play. It's the
safest way to see the discover → pay → deliver arc before real dollars are involved.
Live mode – real USDC on Base
When the sandbox flow is green end to end, switch to Live mode:
- Stores are live stores (
livemode: true), on Base mainnet. - Settlement runs on the url-mode x402-rs facilitator, which moves real USDC on Base – the
buyer's balance falls by exactly the quoted amount, and the on-chain
txHashis authoritative and confirmable on BaseScan. - Your receiving address is your real Base USDC address (
chain: "base"). Veto is non-custodial – the money lands in your wallet, never Veto's.
Live mode is the last step, not the first. Build the whole thing in Test mode; flipping to live should change only the key and the receiving chain.
How to switch modes
There are two equivalent ways to flip between sandbox and real money – pick whichever fits how you work.
In the dashboard, use the Test / Live toggle (top of the page). It scopes everything you see
and do to that mode: Test mode shows only your test stores, products, and orders and issues
veto_test_… keys under Developers; Live mode shows the live side and issues veto_live_…
keys. Switching the toggle never mixes the two – test and live data are separate ledgers.
If you're scripting it, the key is the switch – there's no livemode flag to send. Send a
veto_test_… key as the Bearer token for the sandbox, or a veto_live_… key for real money.
Confirm which mode a key resolves to with GET /v1/me:
curl https://merchants.veto-ai.com/v1/me \
-H "Authorization: Bearer veto_test_..."The response tells you the resolved livemode. Both keys come from Dashboard → Developers;
each secret is shown once at creation, so store it immediately.
Test vs live at a glance
Test mode (veto_test_) | Live mode (veto_live_) | |
|---|---|---|
Store livemode | false | true |
| Settles via | the mock facilitator – full gate, no real funds | the x402-rs facilitator – real USDC on Base |
| Receiving chain | base-sepolia (testnet) | base (mainnet) |
| Signed receipt | Yes – real signed receipt | Yes – real signed receipt |
| Money actually moves | No – never | Yes – exactly the quoted amount |
| Use it to | build and rehearse the whole flow safely | take real money |
Prices are exact decimal strings in both modes.
Money is always an exact decimal string – { "amount": "5.00", "currency": "USD" }, never a
float – so the amount is identical whether it settles on the mock facilitator or on Base.
Ready to build? The full walkthrough – sign in, create a store, add a product, set receiving, publish, and watch an agent buy it – is in Set up Veto end-to-end (hosted). The real-money cutover is in Go live with x402.
Self-hosters: the same gate, offline
If you run your own checkout server with the SDK (the advanced self-host path), you get the
same acceptance gate as a fully offline rail: the SDK ships a mock rail that does structural
validation only and always "captures" successfully, so you can exercise caps, rate limits,
mandate requirements, reputation, and intent deterministically in tests and demos – no chain, no
network, no dashboard. It's the self-host analogue of hosted Test mode. See the
SDK reference for rail: 'mock' and the bundled example pair.
Most merchants never touch this – the hosted Test mode above is the sandbox. The SDK mock rail is only for people running the checkout on their own servers.
Set up Veto end-to-end (hosted)
Zero to a live agent purchase on the hosted platform – sign in, mint keys, create a merchant, add a product, set your receiving address, publish, connect your site, and watch an AI agent buy it over x402.
Concepts
The mental model behind Veto Checkout – discovery, the acceptance gate, mandates, trust tiers, policy, rails, and mutual receipts.