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:
node -e "fetch('https://facilitator.payai.network/supported').then(r=>r.json())
.then(d=>console.log(d.kinds.filter(k=>k.network==='eip155:421614')))"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: noneWhat you need
| A merchant address | MERCHANT_WALLET — any address you control. Never a key. |
| A funded buyer | Arbitrum Sepolia USDC from faucet.circle.com. No ETH: the facilitator pays gas. |
Run it
MERCHANT_WALLET=0xYourMerchantAddress \
npm run agent-commerce -- validate --config examples/arbitrum-sepolia/config.yamlRun it as in the Base Sepolia example, with AGENT_COMMERCE_CONFIG=examples/arbitrum-sepolia/config.yaml.
Prove it settles
X402_SMOKE_TARGETS=arbitrum-sepolia \
X402_TESTNET_BUYER_PRIVATE_KEY=0x... \
X402_TESTNET_MERCHANT_ADDRESS=0xYourMerchantAddress \
npm run test:testnetThe run verifies the receipt's USDC Transfer; see smoke tests.
Source: examples/arbitrum-sepolia