VetoVetoDocs
Getting Started

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 txHash is 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:

who am I
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 livemodefalsetrue
Settles viathe mock facilitator – full gate, no real fundsthe x402-rs facilitatorreal USDC on Base
Receiving chainbase-sepolia (testnet)base (mainnet)
Signed receiptYes – real signed receiptYes – real signed receipt
Money actually movesNo – neverYes – exactly the quoted amount
Use it tobuild and rehearse the whole flow safelytake 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.