Base URL: https://api.verifymails.dev. Authenticate with Authorization: Bearer vm_live_... or ?key=vm_live_...
/api/v1/verify?email={email}Verify one email address/api/v1/domain?domain={domain}Domain-level check (mail server, provider){
"email": "[email protected]",
"domain": "gmail.com",
"disposable": false, // disposable / temporary email
"block": false, // recommended to block (disposable or high risk)
"deliverable_email": true, // domain can receive mail
"mx": true,
"mx_host": ["gmail-smtp-in.l.google.com", "..."],
"mx_priority": { "gmail-smtp-in.l.google.com": 5 },
"email_provider": "Gmail",
"privacy": false, // alias / privacy relay / forwarding
"privacy_provider": null,
"apple_hide_my_email": false,
"catch_all": null, // true / false / null (not probed yet)
"risk_score": 0, // 0-100
"source": "trusted_provider",
"canonical": "[email protected]", // normalized (dots / +tag removed)
"is_variant": true,
"plus_tag": "tag",
"domain_age_days": 10759,
"authentication": { "spf": {...}, "dmarc": {...} },
"signals": [...]
}| Status | Meaning |
|---|---|
| 400 | Invalid email / domain |
| 401 | Missing or invalid API key |
| 402 | Daily query limit exhausted |
| 429 | Rate limit exceeded (see Retry-After) |
Paid plans: 2 requests/second for email addresses, 15 requests/second for domain names (free tier: 1/s and 3/s). Quotas are daily: 5,000 / 10,000 / 20,000 queries per day on Basic / Premium / Pro.
The response above shows the Pro plan. Fields are included only when your plan covers the feature — absent field = not in your plan (never null-padded):
| Plan | Fields |
|---|---|
| Basic | email, domain, disposable, block, risk_score, source |
| Premium | + privacy, privacy_provider, mx, mx_host, mx_priority, authentication, domain_age_days, signals, related_domains (domain endpoint) |
| Pro | + email_provider, provider_category, apple_hide_my_email, canonical, is_variant, plus_tag, catch_all, deliverable_email |