Email validation API for agents, screening only.

Screen one email address for $0.003 per call ($3 per 1,000). Pay through x402 in USDC on Base or Solana. No account, no API key: your client pays the 402 and gets the answer. Checks syntax, mail-domain DNS, disposable domains and common typos; it does not verify that the mailbox exists or that mail will be delivered. Built for the moment an address arrives from a form, a scrape or a CRM and you must decide whether it is worth sending to.

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 needs email validation, screening only, for an 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"
}

An excerpt, not a script to copy: it omits the charge cap and the check of the signing terms. The complete script, capped at $0.003 per run, is on the quickstart.

// Excerpt. Expected price $0.003. Use the capped quickstart for the complete runnable example.
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 before settlement. A confirmed settlement failure returns a 402 instead of the result. If a response is lost or settlement times out, check the transaction before retrying: a new authorization can charge again.

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"
}

For agents and tools

Data handling and support

Questions, integration help or a problem with a charge: support@auraaia.com. Replies are checked manually; no response time is promised.