x402 is live on mainnet, and agents have already paid

# x402 is live on mainnet, and agents have already paid

As of 20 July 2026 the hosted gateway at `api.mapmap.ai` accepts x402 payments on mainnet. A 402 from the payment path carries USDC payment requirements for Base and Solana, a stock x402 client retries with an `X-PAYMENT` header, and the gateway serves the request once a facilitator confirms the payment. This is not a capability announcement. The first two settlements are already on-chain: 0.10 USDC each, paid by an unmodified `x402-fetch` client during the go-live check, [verifiable on Basescan](https://basescan.org/tx/0x6227750e4b88261431fbd528223f9b128e7a08c831f67dafdd8ca48158546d44).

## What changed today?

The flip was configuration, not code. The payment path has been built, tested and documented since early July: [x402 machine payments: what is live, what is not](/news/x402-machine-payments) described the wire format and ended with an honest list of what was switched off. Today the hosted gateway's `SN_X402_*` values are set, so that list shrank:

- The hosted 402 now carries two `PaymentRequirements` in `accepts[]`: USDC on Base and USDC on Solana, in the same response. An agent pays on whichever chain its wallet holds USDC.
- Payments verify and settle through the PayAI facilitator. The gateway fails closed: no confirmed payment, no served request.
- Dynamic per-call quoting and the top-up bridge are live with it. The 402 quotes your exact request, itemised, and `POST /v1/x402/topup` converts one settlement into prepaid credit at list prices.

The wire format is unchanged from what we published on 2 July. If you built against it then, nothing breaks now. `accepts[]` is simply no longer empty.

## What did the first real payment teach us?

That mainnet is not testnet, which is exactly why we ran the smoke test before announcing anything. Our full rehearsal harness had settled real testnet USDC on Base Sepolia against a real facilitator, 23 checks green, twice. The first mainnet attempt still failed.

The facilitator rejected the payment with `invalid_exact_evm_token_name_mismatch`. The `exact` EVM scheme signs an EIP-712 message whose domain comes from the token contract, and the USDC contract on Base mainnet declares its domain name as `USD Coin`. The testnet contract declares `USDC`. Our 402 advertised the testnet name, the client signed what we advertised, and the signature could never match the mainnet contract. One config value later (`SN_X402_ASSET_NAME=USD Coin`, read on-chain from the contract's `name()` rather than guessed), the same stock client paid, the facilitator verified, and 0.10 USDC landed in the receiving wallet.

We are writing this down because it is the second interop bug that only a real facilitator could catch. Mocked tests pass with any domain name. If you are shipping an x402 merchant, run a paid call against the network you will actually charge on before you tell anyone you are live.

The go-live check then passed 11 of 11: quote exact at `100000` atomic for the $0.10 bundle, payment verified, ledger credited 6,666 millipence, [second settlement](https://basescan.org/tx/0x5b812b42599482dd18f339c590f74561fd4d4a8b974ea09254dbfb665abbd96f) confirming repeat purchases, both transactions in the gateway's settlement table with the payer's IP country recorded for VAT evidence, and the nightly reconciliation job seeing both on its first run.

## What can an agent actually buy?

Everything metered, at published prices, with no human in the loop. The loop from nothing to a paid route:

```sh
# 1. A key in one call. No card, no CAPTCHA, no magic-link click required.
curl -sS -X POST https://api.mapmap.ai/v1/keys \
-H 'Content-Type: application/json' \
-d '{"email": "agent@example.com", "accept_tos": true}'

# 2. Buy credit with one x402 settlement (the 402 quotes the exact amount).
curl -sS -X POST "https://api.mapmap.ai/v1/x402/topup?usd=5" \
-H "Authorization: Bearer snk_..."
```

The $0.10 micro-bundle exists because a stock `x402-fetch` client caps spending at 0.1 USDC until someone reconfigures it, and the whole point is that nobody is there to reconfigure it. Standard calls list at 0.05p at the entry band, truck and ADR dangerous-goods calls at 1p, and the per-call rail floors any quote at $0.005 because facilitator fees exceed the cost of a sub-cent call. For standard-class volume, prepaid credit is strictly cheaper than paying per call. The [x402 docs](/docs/x402) carry the full quote arithmetic and the [pricing page](/pricing) the tier tables.

One state rule worth hard-coding: a provisional key (email not yet verified) can pay per-call via `X-PAYMENT`, but banked prepaid credit only spends once the email is verified. So the fully autonomous flow is pay-per-call; the cheaper credit flow costs one verification click.

## Is anyone else on x402 doing this?

Routing exists on x402; production routing does not. We swept the full public discovery catalogue on the day we went live, all 24,820 services in it. There are driving-distance wrappers around public OSRM instances, a Mapbox Directions proxy and one router with a truck travel mode that accepts no dimensions, no weight and no dangerous-goods declaration. As of that sweep there is no other dimensioned truck routing (weight, height, width enforced in costing), no ADR dangerous-goods routing at all, and no other navigation platform you can self-host. A mode toggle cannot route a 4 m, 26-tonne petrol tanker around a low bridge or a category C tunnel. Our costing can, and the price of asking is published.

## What this does not prove yet

- **Update, same day: the Solana rail is now mainnet-proven too.** A few hours after the Base settlements, the same check paid the $0.10 bundle with a stock Solana signer: [settlement on Solscan](https://solscan.io/tx/2oUpZtKtxd8gkELsj12gR4ZZgpoVQBtHaXQdfT8MJ2k7y1dWbnE15mP7334Qup9qvXmVb8jM9b8Y4z7FKbmY1ids), 0.10 USDC to the Solana treasury, ledger credited. Both advertised rails have now carried real money.
- **We are not in Coinbase's Bazaar.** That catalogue indexes services settling through Coinbase's own facilitator; we settle through PayAI. Discovery today is `llms.txt`, `/.well-known/x402.json` and the directories we list in manually.
- **There is no settlement-status endpoint.** Settlement is asynchronous. If it lands after the response window you get no `X-PAYMENT-RESPONSE` header; a 2xx still means the payment verified and the call is final. Reconcile on-chain.
- **The per-call floor is real money at small sizes.** A $0.005 minimum charge on a 0.05p call is a poor deal by design; the 402's `extra` says `minChargeApplied: true` when it happens, and the honest answer is to buy a bundle instead.

## Try it

Issue a key with one `POST /v1/keys`, make requests until the 402 arrives, and let your client pay it. The [x402 docs](/docs/x402) are authoritative on the wire shapes, [maps for AI agents](/news/maps-for-ai) covers discovery from a cold start, and the earlier [x402 status post](/news/x402-machine-payments) explains the 402-versus-429 rules that tell a never-paid agent to top up rather than wait. The receiving wallet is in every 402 we serve, so the settlement trail is public by construction: every claim in this post can be checked against the chain.

Routing derives from OpenStreetMap. Credit "© OpenStreetMap contributors" when you render or republish it.