Email verification API that doesn't suck.
Syntax, DNS, SMTP handshake, disposable and catch-all detection — in a single fast request, with honest results.
$ curl https://api.checkmail.dev/v1/verify?email=john@example.com \
-H "Authorization: Bearer cm_live_..."
{
"email": "john@example.com",
"status": "valid",
"checks": {
"syntax": true,
"mx_found": true,
"smtp_valid": true,
"catch_all": false,
"disposable": false,
"role_based": false,
"free_provider": false
},
"suggestion": null,
"mx_host": "aspmx.l.google.com",
"cached": false,
"ms": 1243
}
What we check
- Syntax — RFC 5322
- DNS & MX records
- SMTP handshake — real mailbox existence
- Disposable domains — 10,000+ known
- Catch-all detection
- Typo suggestions — gmial.com → gmail.com
- Role-based addresses — info@, admin@
- Free providers — flag, don't reject
Pricing
Pay once, use whenever. Credits never expire, no subscription.
| Credits | Price | Per check |
|---|---|---|
| 1,000 | $2 | $0.0020 |
| 5,000 | $9 | $0.0018 |
| 10,000 | $17 | $0.0017 |
| 50,000 | $75 | $0.0015 |
| 100,000 | $140 | $0.0014 |
Teams can enable auto-topup to refill credits automatically before they hit zero — no latency impact.
Quick start
curl
curl https://api.checkmail.dev/v1/verify \
-G --data-urlencode "email=john@example.com" \
-H "Authorization: Bearer $CM_KEY"
Node.js
const r = await fetch(
"https://api.checkmail.dev/v1/verify?email=john@example.com",
{ headers: { Authorization: `Bearer ${process.env.CM_KEY}` } }
);
const data = await r.json();
console.log(data.status);
Python
import os, requests
r = requests.get(
"https://api.checkmail.dev/v1/verify",
params={"email": "john@example.com"},
headers={"Authorization": f"Bearer {os.environ['CM_KEY']}"},
)
print(r.json()["status"])