Screen email addresses before they enter your CRM.

Detect malformed addresses, disposable domains, and common typos. $3 per 1,000 checks ($0.003 a call), paid through x402 in USDC on Base or Solana. No account, no API key: your client pays the 402 and gets the answer.

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.

Run your first email check See a sample response

What one check does

The verdict is one of domain_accepts_mail, risky, disposable, undeliverable or unknown, with every reason listed. A working mail exchanger means the domain accepts mail; it never means the mailbox exists. Role and free-provider flags are signals for your own routing rules, not rejections.

GET /v1/email/verify $0.003 per call

Use 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
Example response
{
  "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"
}
// One paid attempt, at most $0.003. The complete, runnable version is on the quickstart page.
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 once, returns the JSON above

When you are charged

ResponseCharge
402 with the payment terms, because no payment was sentnot charged
400 because the payment carried no usable emailnot charged: refused before the facilitator is asked
402 because the payment was rejected (signature, balance, network)not charged
503 when the DNS lookup fails (Retry-After is set): not charged, try again laternot charged
200 with the screening resultcharged $0.003, settled on the network you paid on
5xx from the service itselfnot charged: settlement is cancelled when the check fails

The result is computed first and returned only once settlement succeeds; if settlement fails you get a 402 with the reason instead of the result.

Developer testing

Prove that your client pays a 402 and retries before you spend on real checks.

GET /v1/ping $0.01 per call

Use 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
Example response
{
  "ok": true,
  "at": "2026-10-20T09:12:00Z"
}

Data handling and support

Questions, integration help or a problem with a charge: contact@zahidayub.com. A person reads it.