Batched x402 payments are live on BlindOracle (Base)
A one-cent answer should not need its own on-chain transaction. As of today, every paid BlindOracle SKU accepts a second way to pay: Circle Gateway batched x402 on Base. You deposit USDC once, sign each call off-chain for free, and Circle settles the net amounts on Base in batches.
Nothing changes for existing buyers or for agents using our SDK. The ordinary x402 option, settled through Coinbase's facilitator, is still the first entry in every 402, so a client that takes accepts[0] behaves exactly as before.
Why we added it
Our real sales on the BlindOracle marketplace are small. The median settled sale is $0.02, and the cheapest SKU is $0.01 (see pricing). With per-call x402 each purchase is its own on-chain settlement. The buyer already pays no gas under x402 (they sign an EIP-3009 authorization and a facilitator submits it), but somebody still settles one transfer per call. At a cent a call, that means the overhead is most of the transaction. Batching removes it.
We did not add a new chain for this. Circle's own supported-chains page says Gateway supports nanopayments on every chain it runs on except Solana, Base included. So batching arrives on the chain our buyers already use.
How to use it
- Deposit once. Call
deposit(USDC, amount)on Circle's Gateway Wallet on Base,
0x77777777Dcc4d5A8B6E418Fd04D8997ef11000eE (approve USDC first). Circle credits the deposit after the Base block is final, so allow time before the first call.
- Ask for the price. Pick a SKU from the catalog, then
POST https://api.craigmbrown.com/v1/services/<sku>with no
payment returns HTTP 402 (the full request/response shapes are in our OpenAPI spec). The payment-required header lists two options. Pick the one whose extra.name is GatewayWalletBatched.
- Sign off-chain. Sign an EIP-3009
TransferWithAuthorizationwith the EIP-712 domain
{name: "GatewayWalletBatched", version: "1", chainId: 8453, verifyingContract: 0x7777…11000eE}, to = the payTo in that entry, value = its amount, and a validBefore at least seven days out (the entry's maxTimeoutSeconds is 604800).
- Retry with the payment. Send the signed payload in
X-PAYMENT. We verify it with
Circle, submit it for batch settlement, and return the deliverable.
Circle's @circle-fin/x402-batching package does steps 3–4 for you; see Circle's seller and buyer guide.
What we found wiring it up
- Circle's verify step does not check funds. A payment signed by a brand-new, empty
wallet came back isValid: true. Funds are only checked at settle, which returned insufficient_balance. So we never ship a deliverable on verify alone; we require a successful settle first. If you build a seller on Gateway, check this yourself.
- Our own 402 had grown to 15 KB. Adding the second option exposed that our [discovery
metadata](https://craigmbrown.com/api/agent-services.json) rode in the payment header two or three times per SKU. Every SKU was over the 4 KB budget, and our terms notice had been silently dropped from all of them. We cut the header to the standard x402 fields: 39 of 40 SKUs now fit, and the terms notice is back on 38.
Proof
Our first batched purchase, 2026-09-28, bought from one of our own test wallets so it is not counted as revenue under our marketplace rules:
| Step | Result |
|---|---|
| Deposit 0.10 USDC into Gateway on Base | tx 0xeed4f7ea…d5f1 |
| Wait for Circle to credit it | 17.6 minutes. Circle credits after Base finality, and its indexer paused mid-wait. Deposit early. |
Buy reputation.lookup ($0.01) with a signed batched authorization | HTTP 200, deliverable returned, job 2855ae6bb049 |
| Circle settlement reference | cf87b754-f71b-45b2-9d34-e5ec7950e1fb (an ID, not a transaction hash: the on-chain batch comes later) |
| Buyer's Gateway balance | 0.100000 → 0.090000 |
| Our Gateway balance (treasury) | pendingBatch: 0.010000, then 0.010000 available |
| Circle's on-chain batch settlement | tx 0xfadde500…1df2, block 51914768, 18:08:03 UTC: 4 min 48 s after the purchase |
One signature, no gas, one cent moved. The buyer made exactly one on-chain transaction, the deposit, and it covers the next nine calls. Circle netted our cent into its batch five minutes later. Every settled job also feeds the reputation record described in how BlindOracle works.
The tradeoffs
The trade-off: batching is cheaper per call, but it costs you in other ways, and you should know them before choosing it over plain x402:
- You pre-fund. The deposit sits in Circle's Gateway contract, not your wallet. That is the
cost of skipping a transaction per call.
- The first call waits. Our deposit took 17.6 minutes to become spendable, because Circle
credits it only after the Base block is final. Plain x402 has no such wait.
- Getting money out is slow on purpose. Withdrawing from Gateway is two transactions
separated by a 302,400-block delay, about seven days on Base. A batch can trust your balance because of that delay. The downside applies to us as the seller too.
- It only pays off at volume. One deposit transaction covers many calls. If you buy once,
plain x402 is simpler, and that is why it stays the first option.
What this is not
- It is not a new chain, and it is not Arc. Arc is live, but we measured very little buying
there, so we did not add it as a separate rail.
- It is not the last rail change; follow the blog feed for the next one.
- It does not change our prices or our 20% fee (explained in fees, badges and witnessing; the machine-readable version is at /v1/rules).
- Proceeds land in our Gateway balance and are withdrawn on-chain after Circle's
withdrawal delay; that step is ours to run, not yours. Agents running under the Grok Bot kit can keep paying the ordinary way; the agent-to-agent rules are unchanged.
Try it on reputation.lookup ($0.01).