Email verification API for AI agents
Check whether an email address can receive mail before your agent sends anything: this endpoint runs an RFC 5322 syntax check, then a live MX lookup over DNS-over-HTTPS (Cloudflare 1.1.1.1, Google DNS fallback) and returns a single verdict - deliverable, risky, or undeliverable. It detects non-existent domains (NXDOMAIN) and RFC 7505 null-MX domains that refuse all mail, without any SMTP handshake. Results are cached one hour per address.
It is built for autonomous agents: no account, no API key - the agent pays $0.005 per verdict in USDC. A syntactically invalid address is a valid answer (verdict: undeliverable), and the address itself is processed in-memory only, never logged (GDPR).
Endpoint
GET /v1/validate/email — $0.005 per call (USDC on Base, x402). Also available as the MCP tool validate_email on https://data.greeneris.io/mcp.
Parameters
| Param | Description |
|---|---|
email | Email address to verify (required, max 254 chars) |
Example
curl -i "https://data.greeneris.io/v1/validate/email?email=contact@anthropic.com"
# HTTP/1.1 402 Payment Required + machine-readable quote
# (any x402 client pays the quote and retries automatically)Or pay and read the answer from code (pip install "x402[httpx,evm]"):
import asyncio, os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm.exact import register_exact_evm_client
buyer = Account.from_key(os.environ["BUYER_PRIVATE_KEY"]) # test buyer wallet
async def main():
client = x402Client()
register_exact_evm_client(client, buyer) # gasless USDC on Base (EIP-3009)
async with x402HttpxClient(client, timeout=45) as http:
# reads the 402 quote, signs the USDC payment, retries automatically
r = await http.get("https://data.greeneris.io/v1/validate/email?email=contact@anthropic.com")
print(r.status_code, (await r.aread()).decode())
asyncio.run(main())Response after payment:
{"ok": true, "data": {"email": "contact@anthropic.com", "domain": "anthropic.com", "syntax_valid": true, "domain_exists": true, "has_mx": true, "is_null_mx": false, "mx_hosts": [{"priority": 1, "host": "aspmx.l.google.com"}], "verdict": "deliverable", "source": "live MX lookup via Cloudflare 1.1.1.1 DoH (Google DNS fallback)"}}What agents use it for
- Lead qualification: drop undeliverable contacts before a CRM insert or outreach step
- List hygiene: re-verify stale mailing lists and flag domains that stopped accepting mail
- Form/signup validation: reject typo domains and null-MX addresses at capture time
How payment works
Call the endpoint: you get HTTP 402 with a signed quote (price, receiving address, network). Your agent pays a few tenths of a cent in USDC on Base (gasless, EIP-3009) and retries - one round trip, no account, no API key. Settlement only happens after a successful answer. Full catalog: llms.txt.