Validating email addresses at the point of signup prevents bad data from ever entering your system. This guide covers how email verification APIs work, the integration patterns that work best for SaaS signup forms, how to handle edge cases (risky, catch-all, disposable), and complete code examples in JavaScript, PHP, and Python.
{
"email": "[email protected]",
"result": "valid",
"score": 0.97,
"checks": {
"syntax": true,
"dns": true,
"mx": true,
"smtp": true,
"disposable": false,
"catch_all": false,
"role_based": false,
"free_provider": false
},
"provider": "google",
"domain": "acme.com",
"did_you_mean": null
}
| Field | Values | What to do |
|---|---|---|
| result | valid / invalid / risky / catch_all / unknown | Block “invalid”. Flag “risky” and “catch_all” per your policy. Allow “valid”. Use timeout for “unknown”. |
| score | 0.0-1.0 (confidence) | Score > 0.85 = high confidence valid. Score < 0.50 = high confidence invalid. |
| checks.disposable | true/false | Block disposable emails at signup - they expire and bounce. |
| checks.catch_all | true/false | Catch-all domains accept all email. Allow at signup; exclude from cold email campaigns. |
| checks.role_based | true/false | Role addresses (info@, admin@) - low engagement. Block for cold email; allow for transactional. |
| did_you_mean | string or null | “gmial.com” > “gmail.com”. Show typo suggestion in the form UI. |