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.
Provision a connection
Agent POSTs /agent/connections/xero, gets a connect_url. The operator opens it once, OAuths into Xero. Connection is reusable for 24h sliding TTL.
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 X-PAYMENT.
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.
Network: base-sepolia on dev
·
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 a complete
PaymentRequirements object the agent can hand straight
to its signing path.
Slim catalog. Each bot's slug, name, USDC + USD price, connector,
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. Provision a connection. Returns connection_id + connect_url.
curl -X POST https://api.botx402.io/api/v1/agent/connections/xero \
-H 'content-type: application/json' -d '{}'
# 2. Show connect_url to the operator out-of-band. They OAuth into Xero.
# 3. Poll until status = "connected".
curl https://api.botx402.io/api/v1/agent/connections/by-id/<connection_id>
# 4. Pay + run. Use any x402-compatible client to sign an EIP-3009
# authorization for the manifest above and resend with X-PAYMENT.
# Coinbase ships reference clients in TypeScript, Python, and Go:
# https://github.com/coinbase/x402
# Output your client should print on success:
# status: 200 receipt_id RG-YYYYMM-XXXXXXXX
# [polling] pending → completed
# pdf: https://...presigned-s3-url-to-the-report-pdf...
# receipt: https://...presigned-s3-url-to-the-receipt-pdf...
# tx: 0x...settlement-hash-on-base... x402 client libraries: github.com/coinbase/x402 — official Coinbase 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.