Cold call, no account

An agent boots up. It's got a wallet on Base with some USDC. It's never visited agentutility.ai. No API key, no account, no email on file with us, no rate-limit tier. It needs to check whether a domain has a CAA record before issuing a cert.

What happens next is the whole point of x402.

The first request

The agent fires a plain GET to https://api.agentutility.ai/dns-caa-check?domain=example.com. No auth header. No bearer token. Nothing.

The worker responds with HTTP 402 Payment Required and a JSON body that says: pay $0.003 USDC on Base to facilitator 0x8f5cb67b49555e614892b7233cfddebfb746e531, sign a transferWithAuthorization, send the signature back in an X-PAYMENT header. The body lists the exact price, the asset contract, the chain ID, and the nonce the agent should bind into the EIP-712 payload.

That's it. No registration step. No "create your developer account to continue".

GET /dns-caa-check?domain=example.com HTTP/1.1
Host: api.agentutility.ai

HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "x402Version": 1,
  "accepts": [{
    "scheme": "exact",
    "network": "base",
    "maxAmountRequired": "3000",
    "payTo": "0x8f5cb67b49555e614892b7233cfddebfb746e531",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "extra": { "name": "USD Coin", "version": "2" }
  }]
}

What the agent does next

The agent reads the 402 body, builds a TransferWithAuthorization payload, signs it with its wallet key, and retries the same GET with the signature in X-PAYMENT. The worker forwards the signed payload to the CDP facilitator. The facilitator broadcasts the transfer on Base. USDC moves from the agent's wallet to ours. The worker gets the settlement receipt, runs the actual CAA lookup, and returns the answer with the tx hash in X-PAYMENT-RESPONSE.

Total round trips: two. Total accounts created: zero. End-to-end latency on Base: about 4-6 seconds depending on block timing.

Why this matters across 244 endpoints

Every endpoint in the portfolio follows the same flow. Whether the agent's calling whois-lookup for $0.001, satellite-tile for $0.012, or the heavier brand-clearance-bundle at $0.08, the auth surface is identical. The agent doesn't read 244 separate docs about how to register. It reads one spec. The wallet is the identity.

And the identity is granular. Each call carries its own signature. Burn a key, rotate it, spin up an ephemeral wallet for a single task, fan out across ten wallets to parallelize work. The endpoint doesn't care. It cares about the signature on the payment.

What you give up

Honestly, plenty. No request history per "user" because there is no user. No quota dashboards per account. No "forgot password" flow. No way to issue refunds on a stuck call without the user pinging us with a tx hash. The whole notion of a customer relationship gets compressed into a wallet address and a per-call receipt.

For agent traffic, that's a fine trade. An agent doesn't need a dashboard. It needs an idempotent endpoint and a deterministic price.

The part most teams get wrong

The 402 body has to be machine-parseable on the first try. If your error response makes an agent guess, you've broken the pattern. Our schema is the x402 canonical one: accepts array, each entry with scheme, network, maxAmountRequired, payTo, asset, extra. Stick to it. An LLM routing a tool call doesn't want your custom error envelope.

Same with the success response. Keep the body the thing the agent asked for. Stuff the receipt into headers. Agents parse JSON bodies as data, not as protocol metadata.

The whole pitch in one request

A request that costs $0.003, settles on a public chain in seconds, and works on first contact with no prior relationship. That's the surface area agents care about. The 244 endpoints are 244 places where that surface holds.