402 Payment Required. Keenable accepts it on its own paths, so an agent with a wallet can search and fetch without signing up, holding a key, or topping up a balance: every request pays for itself.
$0.01 per request, in USDC on Base (eip155:8453). The buyer needs USDC only — no ETH for gas, because the payment is a signed transfer authorization (EIP-3009) that the payment network submits on your behalf.
If you call Keenable regularly, an API key is the better deal: prepaid credits cost 10, and keyed rate limits can be raised. x402 is for agents that have no account and no key.
Endpoints
GET search takes its parameters in the query string; POST takes the same JSON body as /v1/search.
An API key sent to these paths is ignored — for keyed access, call /v1/search and /v1/fetch. The webql and realtime_content search modes are available with an API key only and answer 403 here.
How a paid call works
1
Ask
Call the endpoint without payment. The answer is
402, with the offer in the PAYMENT-REQUIRED header as base64-encoded JSON. The same offer is mirrored in the body.2
Pay
Sign one of the
accepts options and send the same request again with the signed payload in the PAYMENT-SIGNATURE header.3
Receive
Keenable verifies the payment, runs the request and settles the payment on-chain. The result is returned only after settlement succeeds, with the receipt — including the transaction hash — in the
PAYMENT-RESPONSE header.amount is in USDC base units (6 decimals), so 10000 is $0.01. asset is the USDC contract on Base. A signed payment stays valid for maxTimeoutSeconds.
Using an x402 client
Any standard x402 v2 client handles the ask–pay–receive loop for you. With the official@x402/fetch package:
account needs a USDC balance on Base and nothing else. Keep that balance small: a client signs whatever amount the offer asks for, so check the offer — or set a spending limit in your client — before giving an agent a funded key.
What is charged
- A request is charged only once it has succeeded and its payment has settled.
- A response of
400or above is never charged: bad parameters, a page that cannot be fetched, an upstream failure. - If settlement fails after the request ran, the answer is
402 Payment settlement failedand the result is withheld. Retry with a new payment. - Each signed payment is good for one request. Sending the same signature again is rejected.
Limits
The per-IP limit counts both halves of a paid call — the unpaid request that returns the offer and the paid retry — which is why it is twice the wallet limit. A
429 carries Retry-After. See rate limits for how this compares to keyed and keyless access.
Errors
A
451 is returned before any offer is made, so nothing is signed or charged.