Same bots. Talked to in HTTP.
Every botx402 product is also a paid HTTP endpoint. Your agent calls
it, the server returns 402 Payment Required
with a USDC quote, the agent signs an EIP-3009 authorization and
retries. We verify and settle through Coinbase's hosted facilitator.
No account. No API key. Receipt by tx hash.
Discover the bot
Agent reads /.well-known/x402 for each bot's slug, price and payee, and the bot's input schema from /api/v1/agent/bots.
Sign the authorization
Agent calls the bot's /run, gets 402 with the price + payee. It signs an EIP-3009 transferWithAuthorization for the exact amount and retries with PAYMENT-SIGNATURE (x402 v2).
Settle on success
Server verifies via the facilitator, dispatches the work, settles on Base after delivery. Failed runs auto-refund — they simply never settle.
1 bot live on the agent surface.
x402 v2 · Network: eip155:84532
(Base Sepolia) on dev ·
eip155:8453 (Base) on prd · USDC asset
pinned to the canonical Circle contract per network. Verified at
build time against on-chain name().
Two endpoints to introspect from.
Catalog manifest. Every live bot's slug, the full
/run URL, and the same x402 v2
PaymentRequired the 402 returns, ready for the agent's
signing path.
Slim catalog. Each bot's slug, name, USDC + USD price,
status, and the JSON Schema for its inputs field.
Useful for agent UIs that want to render the offer.
From zero to a settled run.
# 1. Discover the bots, prices and payee.
curl https://api.botx402.io/.well-known/x402
# 2. Unpaid call. Returns 402; the PAYMENT-REQUIRED header holds what to sign.
curl -X POST https://api.botx402.io/api/v1/agent/<slug>/run \
-H 'content-type: application/json' -d '{"inputs": {...}}'
# 3. Pay + run. Use any x402-compatible client to sign an EIP-3009
# authorization for those requirements and resend with PAYMENT-SIGNATURE.
# The x402 project ships reference clients in TypeScript, Python, and Go:
# https://github.com/x402-foundation/x402
# 4. Poll the run with the access token from the 200 response.
curl "https://api.botx402.io/api/v1/agent/runs/<receipt_id>?t=<access_token>"
# On success the status is "completed" and the response carries:
# pdf_url: presigned URL to the report PDF
# receipt_url: presigned URL to the receipt PDF
# settlement_tx_hash: the settlement hash on Base x402 client libraries: github.com/x402-foundation/x402 — official x402 reference implementations in TypeScript, Python, and Go.
What's protocol vs. ours.
The 402 handshake, the EIP-3009 authorization shape, the facilitator URL — that's all Coinbase's x402 protocol. We didn't invent it. We just wear it.
What's ours: a clean abstraction for adding new agent-callable bots — registry, pricing, payment plumbing, fulfilment queue. When bot #2 ships, it surfaces here as one new row; the x402 protocol layer above doesn't change.
Settle-on-success means failed runs auto-refund — your USDC never leaves your wallet because the authorization expires. For runs that do complete and you dispute the result: email refunds@botx402.io with the receipt id and your wallet. We send the USDC back from the recipient wallet manually. Crypto refunds are operator-driven on purpose; auto-refund APIs invite replay abuse.
We're on x402 v1 today. v2 lands when an agent SDK we want to onboard demands it.