Public networks

Arbitrum Sepolia

The Base Sepolia example on another EVM testnet, settling in the network's built-in USDC.

The Base Sepolia example on another EVM testnet, eip155:421614. The config leaves out the asset fields, so payments settle in Arbitrum Sepolia's USDC with the EIP-712 domain and decimals from the built-in profile.

Not yet runThe smoke suite has not run on Arbitrum Sepolia.

The facilitator must list eip155:421614 in its /supported response. On 2026-10-07 PayAI's facilitator listed it, and x402.org's listed only Base Sepolia among EVM networks. Check before use:

bash
node -e "fetch('https://facilitator.payai.network/supported').then(r=>r.json())
  .then(d=>console.log(d.kinds.filter(k=>k.network==='eip155:421614')))"
examples/arbitrum-sepolia/config.yamlyaml
version: 1

merchant:
  id: arbitrum-sepolia-example
  name: Arbitrum Sepolia Example
  publicBaseUrl: ${GATEWAY_PUBLIC_BASE_URL:-http://localhost:8080}

server:
  port: ${GATEWAY_PORT:-8080}
  host: 0.0.0.0
  # Operator routes (receipts, events) 404 without this. Uncomment and set it
  # before exposing the gateway anywhere.
  # adminToken: ${ADMIN_TOKEN}

storage:
  receipts:
    driver: sqlite
    path: ${RECEIPT_STORE_PATH:-./data/receipts.sqlite}

protocols:
  http:
    enabled: true
  mcp:
    enabled: true
    mountPath: /mcp

resources:
  premium_report:
    name: Premium Report
    description: One paid endpoint, settled in USDC on Arbitrum Sepolia.
    input:
      type: object
      properties: {}
      additionalProperties: false
    backend:
      type: http
      method: GET
      url: ${MERCHANT_API_BASE_URL:-http://localhost:3000}/api/report
      timeoutMs: 10000
    pricing:
      type: fixed
      amount: "0.01"
      currency: USDC
    expose: [http, mcp]
    payments: [x402]

payments:
  x402:
    enabled: true
    network: eip155:421614
    # No asset fields: Circle's USDC on Arbitrum Sepolia, from the built-in profile
    payTo: ${MERCHANT_WALLET}
    networks:
      # Only for health checks; the facilitator does the chain work
      eip155:421614:
        rpcUrl: ${X402_RPC_URL:-https://arbitrum-sepolia-rpc.publicnode.com}
    maxTimeoutSeconds: 300
    facilitator:
      mode: remote
      # Listed eip155:421614 in /supported on 2026-10-07; x402.org's did not
      url: ${X402_FACILITATOR_URL:-https://facilitator.payai.network}
      auth:
        type: none

What you need

A merchant addressMERCHANT_WALLET — any address you control. Never a key.
A funded buyerArbitrum Sepolia USDC from faucet.circle.com. No ETH: the facilitator pays gas.

Run it

bash
MERCHANT_WALLET=0xYourMerchantAddress \
  npm run agent-commerce -- validate --config examples/arbitrum-sepolia/config.yaml

Run it as in the Base Sepolia example, with AGENT_COMMERCE_CONFIG=examples/arbitrum-sepolia/config.yaml.

Prove it settles

bash
X402_SMOKE_TARGETS=arbitrum-sepolia \
X402_TESTNET_BUYER_PRIVATE_KEY=0x... \
X402_TESTNET_MERCHANT_ADDRESS=0xYourMerchantAddress \
  npm run test:testnet

The run verifies the receipt's USDC Transfer; see smoke tests.

Source: examples/arbitrum-sepolia