Guide
Pay a route. Read the body.
Every service on this desk is an HTTP resource. An unpaid call returns 402 with a USDC price on Arc testnet.
A wallet signs transferWithAuthorization, the desk settles it, and the same URL returns 200.
Pay on this site
- Open the desk and choose a service.
- Press Dispatch agent. The handshake shows HTTP 402 and the amount in atomic units. USDC has 6 decimals, so 0.040 USDC is
40000. - Press Pay with wallet. Approve Arc testnet if the wallet asks, then sign the typed data. Do not send a normal transfer.
- When settlement lands, the return pane shows the body and an ArcScan link.
The cap and gate on the desk are the agent’s spend policy. They do not block a wallet payment. The server accepts the posted price.
Arc testnet
Add this network in the wallet before signing. Gas on Arc is USDC.
- Network
- Arc Testnet
- Chain id
- 5042002 · eip155:5042002
- RPC
- https://rpc.testnet.arc.network
- Explorer
- https://testnet.arcscan.app
- USDC
- 0x3600000000000000000000000000000000000000
- Scheme
- exact · EIP-3009 · name USDC · version 2
Testnet USDC
Take USDC from faucet.circle.com and choose Arc Testnet. The paying wallet needs enough USDC for the price. The desk wallet also needs a little USDC, because it pays gas when it submits the authorization. The client panel on the home page shows that gas balance.
Routes
Prices are exact. Call any of them with GET and Accept: application/json.
GET /v1/brief— Research brief — 0.040 USDCGET /v1/evidence— Evidence pack — 0.020 USDCGET /v1/embed— Embedding batch — 0.012 USDCGET /v1/board— Direction board — 0.060 USDCGET /v1/calendar— Calendar hold — 0.010 USDCGET /v1/voice— Transcription — 0.018 USDCGET /v1/micro— Microstructure — 0.090 USDCGET /v1/patch— Patch review — 0.070 USDCGET /v1/search— Bazaar search — 0.005 USDCGET /v1/dossier— Long dossier — 0.140 USDCGET /v1/legal— Legal translation — 0.025 USDCGET /v1/receipt— Receipt explain — 0.030 USDC
GET /api/desk lists the payee, network, and prices.
GET /facilitator/supported lists what this desk can settle: exact payments on eip155:5042002.
POST /facilitator/verify and POST /facilitator/settle are the facilitator endpoints. The resource server calls them for you when you retry with PAYMENT-SIGNATURE.
Call it from code
First request, unpaid:
curl -i https://YOUR_HOST/v1/brief
The response status is 402. Decode the PAYMENT-REQUIRED header. It is base64 JSON. accepts[0] holds the scheme, network, amount, asset, and payee.
Sign EIP-712 typed data with primary type TransferWithAuthorization:
domain name USDC version 2 chainId 5042002 verifyingContract 0x3600000000000000000000000000000000000000 message from the payer to payTo from the 402 value amount from the 402 validAfter 0 validBefore now + maxTimeoutSeconds nonce 32 random bytes, hex
Retry the same URL with the signature. The header value is base64 JSON:
{
"x402Version": 2,
"resource": { "url": "...", "description": "Research brief", "mimeType": "application/json" },
"accepted": { "scheme": "exact", "network": "eip155:5042002", "amount": "40000", "asset": "0x3600…", "payTo": "0x…" },
"payload": {
"authorization": { "from": "0x…", "to": "0x…", "value": "40000", "validAfter": "0", "validBefore": "…", "nonce": "0x…" },
"signature": "0x…"
}
}
curl -i https://YOUR_HOST/v1/brief \ -H "PAYMENT-SIGNATURE: <base64>"
A paid response is 200 with PAYMENT-RESPONSE. That header is base64 JSON and includes transaction, the Arc transaction hash.
Official clients can do the same dance. Register @x402/evm/exact/client for eip155:5042002 and point the resource URL at this origin. The 402 already carries the EIP-712 domain, so the client does not need a separate asset list for Arc.
$Aroex rewards
Each settled payment is USDC. The desk sends that USDC to the Aroex contract and calls sync().
Holders share it in proportion to their balance. Look up an address on the desk, then call claim() from that wallet.
The supply starts with the desk treasury. A transfer of $Aroex is what makes a new holder.
What you get
The JSON body is the goods: service, name, and body. Settlement does not change the price. One authorization pays one call. A second call needs a new 402 and a new nonce.
If it fails
- 402 again after signing. The signature did not verify, or the payer has less USDC than the amount. Read the response body for
invalidReason. - Desk gas is 0. The payee address on the home page must hold a little Arc testnet USDC so it can submit the transaction. Drip that address from the faucet.
- Wrong network. The typed data chain id has to be 5042002. A signature from another chain will not verify.
- Expired authorization.
validBeforemust be at least a few seconds in the future. Sign again from a fresh 402. - Browser blocks the wallet. Use a wallet that injects
window.ethereum, then press Pay with wallet again.