This is a single call from a research agent, followed from the moment it asks a service for something to the moment the payment is settled on Base. Nothing here requires a human, a card, or an API key.
| t | who | what |
|---|---|---|
| 0 ms | agent | GET search.api/q?… through the pahz fetch wrapper. |
| 38 ms | service | Replies 402 Payment Required with an x402 header: price 0.002 USDC, pay-to address, nonce. |
| 39 ms | pahz | Checks the tab: service on allowlist? price under band? rate cap ok? budget left? All yes. |
| 41 ms | pahz | Signs a USDC transfer authorization for 0.002 from the tab and retries the request with the payment header. |
| 84 ms | service | Verifies the payment, returns 200 OK with the result. |
| 85 ms | pahz | Writes a meter line: service, call, price, latency, nonce. |
| ~5 min | pahz | Batches this and other payments into one settlement on Base; one receipt hash covers them all. |
Most of what pahz does is refuse politely. A refusal is not an error for the agent; it is a normal response that the wrapper turns into a structured failure the agent can handle.
Held calls appear in the owner's inbox with one-tap actions: allow once, allow always, raise band, ignore.
Individual x402 payments are authorizations, cheap and instant. pahz aggregates them into settlements on Base every few minutes or every N payments, whichever comes first. Each settlement writes one receipt hash that covers every meter line inside it, so the full meter is reconcilable against the chain.
Services receive their USDC at settlement. The tab's on-chain balance only moves at settlement, which is why the meter and the chain agree to the cent.