X402 · BASE MAINNET · USDC PER CALL
Five endpoints your agent can pay for directly — a few cents in USDC, settled on Base, answer in the same request. No API keys, no accounts, no invoices.
1 Verified on-chain; self-tests excluded from the count.
Every route is pay-per-call in USDC on Base. Unpaid requests get a
402 with a signed price — your agent pays, retries once, gets the answer.
Text in, structured JSON out. Regex, not an LLM: every field comes back
found with a confidence score, or null and listed in missing.
It never invents data. The route strangers actually pay for.
Scroll to the demo below — same engine, same output, $0.00.
URL in, clean markdown out. Readable article text from any public web page.
curl -s "https://x402-extract-wg5z.onrender.com/validate?url=https://example.com"
Preview returns title, word count, first ~500 chars. The full extraction is the $0.01 paid call.
Native ETH balance for any wallet on Base. Machine-readable, one call, priced below the cost of running your own node query.
Latest Base block number, hash, and timestamp in a single call. The cheapest route in the catalog.
What changed on a page since you last saw it — deterministic line diff, no LLM. Stateless: you supply the previous text, we supply the truth. Free preview, no wallet →
The real /extract-fields engine behind a free endpoint — full result, right here, no wallet.
Verified output, not a mock. What you see is what the $0.02 paid call returns.
Settlement is atomic with success. If the handler doesn't return 200, no payment is submitted — the 402 simply expires.
4xx/5xx responses cancel the payment before settlement. Every failure carries a machine-readable
reason (timeout, dns, js_only, origin_4xx,
origin_5xx, thin_content, …) so your agent knows whether to retry.
previous, it diffs, nothing is stored.null, listed in missing, confidence 0. Nothing is invented to fill a gap.422 and submitted no settlement. The atomicity above isn't a claim — it's the day's log.Official x402 Python package. The 402 → sign → retry loop is handled for you.
import os
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
client = x402ClientSync()
register_exact_evm_client(client,
EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))
with x402_requests(client) as s:
r = s.post("https://x402-extract-wg5z.onrender.com/extract-fields", json={
"text": "Invoice #INV-42 from Acme Ltd. Total: $1,234.50.",
"fields": ["invoice_no", "company", "amount"]})
print(r.json()["extracted"])
# {'invoice_no': 'INV-42', 'company': 'Acme Ltd', 'amount': '1234.50'}
External buyers so far: 2. That's the honest count — two strangers paid in USDC on Base, eight days apart, with zero outreach between them. Self-tests never count: the tally only moves when a stranger's wallet pays, and every number on this page is verifiable on-chain.
Three documents, zero scraping — this is how agents discover and verify us.
The Coinbase CDP discovery record: prices, schemas, example payloads.
discovery/merchant?payTo=…
All nine paths with x402 payment metadata.
https://x402-extract-wg5z.onrender.com/openapi.json
The well-known resource file agents fetch first.
https://x402-extract-wg5z.onrender.com/.well-known/x402