Pay-per-call data for agents
Small, single-purpose HTTP endpoints paid per request over x402 in USDC on Base and Solana. No account, no API key: your client pays the 402 and gets the answer.
Call a route without payment and it answers 402 Payment Required with the price and the receiving address as x402 v2 terms. An x402 client pays that amount in USDC and retries; the paid call returns JSON.
GET /v1/ping $0.01 per callUse when testing an x402 client end to end. Returns ok and the server time; costs one cent.
curl -i "https://api.paywallwatch.com/v1/ping" # unpaid: answers 402 with the payment terms
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(account)); // a viem account holding USDC on Base
const paid = wrapFetchWithPayment(fetch, client);
const res = await paid("https://api.paywallwatch.com/v1/ping"); // pays the 402, returns the JSON below
{
"ok": true,
"at": "2026-10-20T09:12:00Z"
}GET /v1/email/verify $0.003 per callUse when an agent has an email address from a form, a scrape or a CRM and must decide whether it is worth sending to. Screens the address: syntax, DNS mail exchanger, disposable domain, role account, free provider and common typos. It does not verify that the mailbox exists. A DNS failure answers 503 and is not charged.
curl -i "https://api.paywallwatch.com/v1/email/verify?email=jane%40iana.org" # unpaid: answers 402 with the payment terms
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(account)); // a viem account holding USDC on Base
const paid = wrapFetchWithPayment(fetch, client);
const res = await paid("https://api.paywallwatch.com/v1/email/verify?email=jane%40iana.org"); // pays the 402, returns the JSON below
{
"email": "jane@iana.org",
"valid_syntax": true,
"dns_status": "ok",
"has_mx": true,
"disposable": false,
"role_account": false,
"free_provider": false,
"suggestion": null,
"verdict": "domain_accepts_mail",
"reasons": [],
"mailbox_verified": false,
"screening_note": "Screening only: syntax, DNS mail exchanger, disposable-domain list, role-account and typo heuristics. It does not verify that the mailbox exists or that mail will be delivered.",
"checked_at": "2026-10-20T09:12:00Z"
}