One Facilitator, Every Stablecoin Rail

Agents do not pick a chain. They hold whatever stablecoin their owner funded them with, and they expect to pay with it. A merchant that only settles on one network turns away every agent that happens to live somewhere else.
That is why the Mesh x402 facilitator is multi-chain by design. As of this week it settles on three mainnets from one endpoint: USDC on Base, USDG on Robinhood Chain, and now USDC on Arc, Circle's new stablecoin L1.
What a facilitator does
x402 splits a payment into two jobs. The resource server quotes a price with HTTP 402 and receives a signed payment from the buyer. The facilitator does the on chain work: it verifies the signature, checks the payer can cover it, and broadcasts the transfer.
Mesh runs that second job as a public service at facilitator.meshgateway.co. Three endpoints cover it:
- GET /supported lists every network and scheme the facilitator settles, plus the signer address.
- POST /verify checks a payment without moving funds: signature recovery, expiry window, payer balance, and a full on chain simulation.
- POST /settle re-verifies, broadcasts, and returns the transaction hash.
Any x402 v2 server SDK can point at it. There is no chain infrastructure to run and no gas wallet to fund.
Three mainnets, two transfer methods
Stablecoins do not all speak the same signed transfer standard, so a real multi-chain facilitator has to handle more than one.
EIP-3009 on Base and Arc. USDC implements transferWithAuthorization natively. The buyer signs an authorization for the exact amount, made out to the merchant, and the facilitator submits it. One call, no approvals.
Permit2 on Robinhood Chain. USDG has no EIP-3009, which is why no 402 payment could settle on Robinhood Chain until Mesh built the rail. Buyers sign a Permit2 witness transfer with the spender pinned to the canonical x402 Permit2 proxy and the recipient pinned in the witness, so the payment can only ever land at the merchant.
The facilitator reads the payload and routes it to the right method automatically. The resource server does not care which one runs; it just names the network in its payment requirements.
| Network | CAIP-2 | Asset | Method |
|---|---|---|---|
| Base | eip155:8453 | USDC | EIP-3009 |
| Robinhood Chain | eip155:4663 | USDG | Permit2 |
| Arc | eip155:5042 | USDC | EIP-3009 |
| Base Sepolia (testnet) | eip155:84532 | USDC | EIP-3009 |
Why Arc
Arc is Circle's Layer 1 for stablecoin finance, and it went live on mainnet on September 16. Three things make it a natural fit for machine payments:
USDC is the gas token. An agent on Arc holds one asset. It pays for services in USDC and, if it ever sends its own transaction, pays gas in USDC too. No second token to top up.
Sub-second finality. Settlement confirms fast enough that the paid response does not wait on the chain.
Standard EVM. USDC on Arc is a native predeploy with the same EIP-3009 interface as everywhere else, so it slots into the existing rail with no new contracts. Adding Arc to the facilitator was a network registry entry, not a new code path.
For a merchant, accepting Arc is one more entry in the accepts list of its 402 challenge. For a buyer, it is a signature, exactly like on Base.
Same guarantees on every chain
Adding networks does not change the rules. They hold everywhere the facilitator settles:
Gasless for buyers. A payment is a signature. The facilitator's relayer pays settlement gas on every chain, one address across all of them.
Non-custodial. Funds move payer to merchant through the payer's own authorization. The relayer can spend gas, never the payment.
Simulated before broadcast. Every settle runs an on chain simulation first. A drained payer or a spent nonce fails in simulation instead of reverting on chain.
Replay safe. EIP-3009 and Permit2 nonces are enforced by the token contracts themselves. A payload settles at most once.
Honest about latency. If confirmation outlasts the request deadline, the facilitator returns the broadcast hash with a pending status instead of failing a payment that already went out.
Use it
Point any x402 v2 resource server at the facilitator and name the network you want to be paid on:
import { x402HTTPResourceServer } from '@x402/core/http';
const server = new x402HTTPResourceServer({
facilitator: { url: 'https://facilitator.meshgateway.co' },
routes: {
'GET /report': { price: '$0.01', network: 'eip155:5042' },
},
});Swap eip155:5042 for eip155:8453 to be paid on Base, or eip155:4663 for USDG on Robinhood Chain. Merchants listed on MeshMarket get all of this without writing any code: the gateway issues the 402, and the facilitator settles it.
The machine economy will not live on one chain. Neither will its payments.
Links
- Facilitator: facilitator.meshgateway.co/supported
- Facilitator docs: docs.meshgateway.co/facilitator
- Arc network docs: docs.meshgateway.co/networks/arc
- Marketplace: meshgateway.co/marketplace
- MeshScan: scan.meshgateway.co
- GitHub: github.com/meshgateway