Syntax, MX, disposable-domain, free-provider, role-based and typo checks in a single GET. Built for signup forms, list cleaning and CRM hygiene: no black-box scoring, every check visible, free tier with no card.
Every verdict shows exactly which checks ran and why — no opaque score.
Shared demo key, rate-limited (/v1/validate). Get your own key for the free tier — 50 checks/day, no card.
# verdict, score, suggestion and per-check detail in one GET curl "https://validmail.dev/v1/[email protected]" \ -H "x-api-key: YOUR_API_KEY"
Free tier: 50 validations/day per key, no card. Request a key at [email protected]. Full reference in the interactive docs.
Catch typos and throwaways at the door, before they enter your users table.
Clean newsletter lists before you sendFlag dead domains and throwaway signups before your sender reputation pays for them.
Keep CRM contact data cleanNormalize and verify contacts at import time instead of paying for them forever.
Filter contact-form spamThrowaway addresses in your contact form usually mean throwaway messages.
Qualify SaaS trial signupsKnow at signup whether a trial is a business inbox or a burner.
Verify purchased marketing listsAudit a list's quality before you spend a campaign on it.
invalid fails hard (bad syntax, no MX, or a disposable domain). risky is deliverable-looking but worth a second look — role mailboxes, typo suggestions, transient DNS errors. valid passed everything.
Yes — pass allow_disposable=true and disposable domains downgrade from invalid to risky instead of hard-failing.
No. Usage logging stores the request path only — never the query string, never the address. It's in the privacy policy.
50 validations/day per key, every check, no card. Request a key and you're in. Higher volumes come later; the free cap isn't a pricing statement.
Damerau-Levenshtein distance (transpositions count as one edit, like real typing), then same-TLD candidates, then provider popularity. Same input, same answer — always.