x402 Payments on Arc Testnet: How an Agent Pays in USDC With No Facilitator
On Arc, gas is paid in USDC — so an agent can broadcast its own EIP-3009 transferWithAuthorization and settle x402 payments with no facilitator.
Arc self-settle lets an agent pay x402 invoices with no facilitator: it signs an EIP-3009 transferWithAuthorization, broadcasts it on Arc (gas in USDC), and sends the txHash — the server verifies the on-chain receipt.
In classic x402, a facilitator sits between the buyer and the seller: it takes the agent’s signature and broadcasts the transaction on its behalf. Convenient — but an extra party to trust, an extra API to wait on, an extra point of failure.
On Arc we skipped it. The scheme is called self-settle — “settle it yourself”.
The agent receives the 402 invoice, signs an EIP-3009 authorization (exactly 5 USDC to the treasury) and broadcasts on Arc itself — gas is paid in USDC. The server reads the receipt from the block: the Transfer event reached the treasury — access opens for 30 days.
Why Arc makes this possible
Arc is a blockchain built by Circle — the company behind USDC. Its signature feature: gas is paid in USDC, not in a separate token. A conventional agent would need to hold two assets: USDC for the payment and ETH for gas. On Arc one balance is enough — USDC covers both the payment and the fee.
The flow in 6 steps
- The agent requests data → gets a 402 with the invoice: scheme, network, amount, recipient.
- It signs an EIP-3009 authorization — the standard for “transfer with authorization”: a signature that permits moving exactly 5 USDC from the agent’s wallet to the recipient. Nothing more, no wallet access.
- It broadcasts the transaction itself (hence “client-broadcast”).
- It waits for confirmation — seconds.
- It retries the request with the transaction hash attached.
- The server reads the blockchain: is the tx in a block, did USDC reach the treasury, is the amount right → access for 30 days.
What the server actually verifies
Not a signature — a receipt. The server asks the
chain for getTransactionReceipt(txHash) and checks: the
transaction is really in a block, it contains a Transfer
event from the USDC contract to the treasury address, the amount covers
the price. This cannot be forged: either the transaction is in a block
or it does not exist.
What this gives the ecosystem
Removing the facilitator removes a point of failure and a trust assumption. Any wallet holding USDC on Arc becomes a payment client: one asset, one signature, one RPC call. For agents, buying data becomes as routine as calling an API.
Next: when the delta actually pays — free tier vs real-time.
Links
- Agent guide (endpoints, limits, examples): agentbadge.xyz/bstock-guide
- All articles in the series: agentbadge.xyz/blog
- MCP endpoint:
https://agentbadge.xyz/mcp/bstock/tools/get_delta