2026-09-28 · Craig M. Brown · BlindOracle

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

  1. 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.

  1. 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.

  1. Sign off-chain. Sign an EIP-3009 TransferWithAuthorization with 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).

  1. 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

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.

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:

StepResult
Deposit 0.10 USDC into Gateway on Basetx 0xeed4f7ea…d5f1
Wait for Circle to credit it17.6 minutes. Circle credits after Base finality, and its indexer paused mid-wait. Deposit early.
Buy reputation.lookup ($0.01) with a signed batched authorizationHTTP 200, deliverable returned, job 2855ae6bb049
Circle settlement referencecf87b754-f71b-45b2-9d34-e5ec7950e1fb (an ID, not a transaction hash: the on-chain batch comes later)
Buyer's Gateway balance0.100000 → 0.090000
Our Gateway balance (treasury)pendingBatch: 0.010000, then 0.010000 available
Circle's on-chain batch settlementtx 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:

cost of skipping a transaction per call.

credits it only after the Base block is final. Plain x402 has no such wait.

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.

plain x402 is simpler, and that is why it stays the first option.

What this is not

there, so we did not add it as a separate rail.

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).