Quote
Fetch the URL. On 402, read the x402 terms: price, asset, network, seller.
Live
Read from Arc by our own collector and refreshed every 30 seconds. Nothing here is a projection.
The rail
Give any LLM agent one tool and it can buy an API call for a fraction of a cent. CRA AGENT reads the x402 price, checks the spending policy, verifies the seller, pays gas-free through Circle Gateway and writes a receipt. No wallet code in your agent, no token, no gas.
// the agent calls one toolarc_pay({ url: "https://api.weather.example/milan" }) // CRA AGENT does the rest→ 402 payment required · 0.001 USDC · eip155:5042→ policy ok · daily cap 5.00, spent 0.31→ seller verified · ERC-8004 agent #1042→ nanopayment signed · Circle Gateway · no gas→ 200 OK · 214 ms · ledger #8811 ✓ paid 0.001 USDC · balance 4.69
How it works
The agent asks for a resource. CRA AGENT returns the resource and a receipt.
Fetch the URL. On 402, read the x402 terms: price, asset, network, seller.
Caps per payment, per day and per seller, rate limit, allowlist. Seller identity resolved on ERC-8004; unknown seller, no payment.
Sign a USDC authorization for Circle Gateway: off-chain, gas-free, settled in batches on Arc. Large jobs route to ERC-8183 escrow.
Every attempt lands in the ledger with price, seller, latency and outcome, and the receipt says which of the three happened: settled, not charged because the seller failed, or failed outright.
For agents
Your agent gets a dozen tools (quote, pay, balance, receipts, policy and more) and a budget it cannot change. Works with Claude, Cursor and any MCP client. Prefer code? The same rail is a TypeScript fetch. Not sure where to start? CRA Factory asks four questions and writes the setup for you.
arc_quote · arc_pay · arc_balancearc_deposit · arc_ledger · arc_policycra-agent fund 5 --from base brings them to Arc in secondsupto) under the same limits
// .mcp.json
{ "mcpServers": { "cra-agent": {
"command": "cra-agent-mcp",
"env": {
"CRA_NETWORK": "arc",
"CRA_KEY_FILE": "/etc/cra-agent/agent.key",
"CRA_POLICY": "daily=5,per_seller=0.5,per_payment=0.05"
}
} } }
import { createRail } from "@cra-agent/router"; const rail = createRail({ network: "arc", signer, policy, ledger, identity, agentId }); const { response, receipt } = await rail.fetch(url); // receipt → { amountUsdc: "0.001", payTo, status: "settled", txHash }

import { createSeller } from "@cra-agent/seller"; const seller = createSeller({ sellerAddress, network: "arc" }) .route("GET /v1/forecast", "$0.001"); app.use(seller.middleware());
# or no code: a paywall in front of the API you already run npx @cra-agent/seller --target https://api.example.com \ --pay-to 0xYourWallet --price 0.10 --upto --facilitator cra # your API says what each call cost: X-Charge-USD: 0.0123
Our own Arc data is priced per call: base-fee forecast, transaction cost estimate, deploy history, RPC health. Free preview on the network page.
For sellers
Buyers pay through Circle Gateway in batched settlements, or directly through our facilitator, and you receive USDC on Arc. No invoices, no API keys to leak, no chargebacks. Your prices, latency and uptime become your reputation.
--upto charges what each call cost, never above your priceWhy Arc
Arc's base fee is a moving average of block usage with a 20 gwei floor, and the next block's fee is written in the current header. Gas is paid in USDC. Finality is deterministic in under a second.
Gas is USDC, so an agent's cost and its revenue are in the same unit. No token to buy first.
Malachite BFT: a transaction is pending or final, nothing in between. No reorgs, no confirmation windows.
ERC-8004 identity, ERC-8183 escrow and Circle Gateway nanopayments, wired into one rail.
Roadmap
A community token, CRA, trades on Arc. It sits beside the rail rather than inside it: payments, escrow and settlement are denominated in USDC, and no part of the software requires holding CRA.
Contract 0x70857041Fef0CED97F9e01E7Ccc21889AFe3F6F4 · Arc mainnet, chain 5042 · @Craagentarc