The lifecycle
1
Ask for a challenge
POST /v1/{merchant}/topups with a buyer and no payment returns
402 Payment Required. The response carries one payment requirement per
eligible source chain in accepts[] and per-source bounds in
topup.sources[]. Omit amount and the gateway quotes your full headroom.2
Sign a gasless authorization
Pick a source and sign an EIP-3009
TransferWithAuthorization against that
chain’s token domain. The signature fixes the token, amount, facilitator,
validity window, payer, and nonce.3
Submit and poll
Retry the same request with the base64 payment in the
X-PAYMENT header.
Same-chain payments settle directly; other sources enter bridging while
Across delivers to Base. The gateway then measures the exact Base credit and
calls the merchant contract from its relayer wallet.settlementTx, the optional Base fillTx, the
Base depositTx, and the exact credited amount, so the whole path is auditable
onchain.
Payment sources
Most sources pay in USDC; Robinhood Chain pays in USDG. Cross-chain payments are delivered as USDC on Base. Always use the token address and EIP-712 domain returned in the payment requirements rather than a local table.Why it’s gasless
Payments pass through the verified
X402ProxyFacilitator
contract on Base. The relayer holds settled funds only in the window between
settlement and merchant fulfilment, and every transaction it makes is recorded in
the top-up status.
Top-up API
Endpoints, request shapes, status codes, and reject codes.
Suppliers
Which supplier balances can be funded.