DeployzyDeployzy
DocsAPI ReferenceEmail Verification

Email Verification

Verify email deliverability — syntax, MX, disposable/role detection, typo suggestions, and live SMTP mailbox checks.

Check whether an email address is real and deliverable before you rely on it. Runs layered checks — syntax, DNS/MX, disposable & role detection, free-provider flagging, "did-you-mean" typo suggestions — and, when enabled, a live SMTP mailbox probe that confirms the exact address exists (probed from an isolated, reputation-managed IP).

Both endpoints require authentication (API key or JWT) and are metered by AI credits.

Verify one address

code
POST /api/v1/email/verify
json
{ "email": "[email protected]" }

Response (200):

json
{
  "email": "[email protected]",
  "normalized": "[email protected]",
  "domain": "example.com",
  "score": "valid",
  "reason": "mailbox_exists",
  "syntax_valid": true,
  "has_mx": true,
  "disposable": false,
  "role_based": false,
  "free_provider": false,
  "suggestion": "",
  "mailbox_checked": true,
  "catch_all": false
}

Verify a batch

Up to 100 addresses per call.

code
POST /api/v1/email/verify/batch

Response (200):

json
{ "count": 3, "results": [ { "email": "[email protected]", "score": "valid", ... } ] }

Fields

FieldMeaning
scorevalid · risky · invalid · unknown
reasonok, mailbox_exists, mailbox_not_found, catch_all, smtp_inconclusive, disposable, role_account, no_mail_server, invalid_syntax
mailbox_checkedwhether a live SMTP probe ran
catch_alldomain accepts every address (result is inconclusive)
suggestiona likely-intended domain when a typo is detected (e.g. gmail.com)

Scores explained

  • valid — deliverable (and, when mailbox_checked, the mailbox exists).
  • risky — real domain but a role/shared inbox, disposable, or catch-all.
  • invalid — bad syntax, no mail server, or the mailbox doesn't exist.
  • unknown — the mail server didn't give a clear answer (greylisting/timeout).

SDKs

js
const r = await client.email.verify("[email protected]");
const batch = await client.email.verifyBatch(["[email protected]", "[email protected]"]);
python
r = await client.email.verify("[email protected]")
batch = await client.email.verify_batch(["[email protected]", "[email protected]"])

Limits

Each verification costs credits and counts toward your daily verification cap. Batch verification runs in parallel across domains while rate-limiting probes per mail domain to protect deliverability.