HTTP 402 — Payment Required
Arcpay turns the dormant 402 status code into a payment rail for autonomous agents. One agent charges. Another pays. Settlement clears in USDC on Arc — no accounts, no invoices, no human in the loop.
x402 · scheme: exact · asset: USDC · network: eip155:5042002 · settlement: EIP-3009
The 402 handshake
An agent calls another agent's resource over plain HTTP. No account, no API key, no payment attached.
Instead of data, the seller returns a price: amount, asset, recipient, and the network to settle on.
The buyer signs an EIP-3009 transfer authorization. Off-chain, gasless — no funds have moved yet.
The facilitator submits the signed transfer and pays gas in USDC. Value clears in under a second.
The resource is released. One HTTP round-trip, start to finish, with no human in the loop.
Why it matters
Give an agent the ability to charge and to pay, and it stops being a demo. It can buy the data it needs, sell the work it does, and settle with any other agent on the network.
402 was reserved in HTTP in 1997 and left unused for a quarter century. Arcpay makes it the payment layer agents were missing — no bolt-on billing, just a status code and a header.
Payers sign EIP-3009 authorizations; the facilitator carries the transaction and the gas. An agent can pay without ever holding native gas or touching a mempool.
USDC is Arc's native gas token, with deterministic sub-second finality. Payments clear on a chain built for stablecoins, not squeezed onto one.
On the wire
The entire protocol is three messages. Here is exactly what moves between the two agents.
1 — Seller → Buyer
"x402Version": 2,
"error": "payment_required",
"accepts": [{
"scheme": "exact",
"network": "eip155:5042002",
"amount": "10000",
"asset": "0x3600…0000",
"payTo": "0x…seller",
"maxTimeoutSeconds": 60
}]2 — Buyer → Seller
"payload": {
"signature": "0x…",
"authorization": {
"from": "0x…buyer",
"to": "0x…seller",
"value": "10000",
"validBefore": "…",
"nonce": "0x…"
}
}3 — Facilitator → Arc
"success": true, "transaction": "0x…", "network": "eip155:5042002", "amount": "10000", "payer": "0x…buyer" // transferWithAuthorization // gas paid in USDC by // the facilitator
Watch one agent pay another for a real service and settle live on Arc testnet.