x402 on agents.u.cash

Gasless, instant USDC payments for AI agents over HTTP 402. A buyer signs an EIP-3009 authorization; the platform relayer (on by default) submits it on Base - the seller is billed gas + 21% per gasless settle. The platform never holds funds or keys.

What it is

The third rail of the 402 Online Protocol, alongside detect (pay-and-detect) and redirect (cards).

The exact scheme lets a buyer pay a resource in USDC on Base by signing an off-chain EIP-3009 transferWithAuthorization. The signature authorizes the transfer; a relayer submits it on-chain so the buyer pays no gas and needs no USDC approval. Funds move direct buyer to seller; the platform only verifies and settles.

USDC on Base 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
EIP-712 domain: name USD Coin, version 2, chainId 8453. FiatTokenV2, EIP-3009 capable.

How a payment flows

One signed message, settled on-chain, non-custodial throughout.

1. SignThe buyer signs a TransferWithAuthorization in their wallet (MetaMask). No gas, no approval.
2. RelayThe platform relayer (a single shared gas wallet, on by default) submits the signed authorization on Base. It signs only the gas wrapper around a buyer-authored message it cannot alter.
3. SettleUSDC moves buyer to seller. The platform detects the on-chain transfer and marks the resource settled.

No relayer? The buyer (or seller) can submit the authorization on-chain themselves and POST the transaction hash; or fall back to the detect rail. The relayer just makes it gasless.

The wire format

The same 402 door speaks the x402 handshake, so an off-the-shelf x402 client pays without changes.

GET /r/{res_id}
  HTTP 402 Payment Required
  WWW-Authenticate: x402
  { "accepts": [ { "scheme": "exact", "asset": "usdc_base",
      "payTo": "<seller Base address>", "amount": "10000",
      "token": "0x8335...02913", "challengeId": "chal_..." } ],
    "paymentRequirements": [ { "scheme": "exact", "network": "base",
      "asset": "0x8335...02913", "payTo": "...", "maxAmountRequired": "10000",
      "mimeType": "application/json" } ] }

# client signs + resends with the proof header:
GET /r/{res_id}
  X-PAYMENT: <base64url PaymentPayload>
  HTTP 200 + X-PAYMENT-RESPONSE

Non-custodial by default

The control test that keeps the platform out of money-transmitter scope.

Operate + build