EmailVerify Pro

Quickstart

Verify your first email address in under a minute with the EmailVerify Pro REST API, CLI, Python/TypeScript SDK, or MCP server for AI assistants.

View as Markdown →

EmailVerify Pro checks whether an email address can actually receive mail, before you send to it. It runs 152 endpoints covering SMTP probing, DNS and MX intelligence, catch-all resolution, disposable and role detection, and a deliverability score that combines all of them.

There are four ways to use it. Pick one:

Best forStart here
REST APIAny language, any platformAPI guide
CLITerminal, scripts, CI, one-off checksCLI guide
SDKPython or TypeScript applicationsSDK guide
MCP serverClaude and other AI assistantsMCP guide

Verify one address in 10 seconds

No signup, no key. The API answers unauthenticated requests, rate limited by IP:

curl "https://emailverifypro.com/validate?email=someone@example.com"

The same thing from the terminal, if you'd rather not read raw JSON:

pipx install emailverify
emailverify verify someone@example.com
VALID  someone@example.com  (mailbox_verified)  score=96 A+  can_send=yes

Reading the result

{
  "email": "someone@example.com",
  "status": "valid",
  "sub_status": "mailbox_verified",
  "deliverability_score": {
    "score": 96,
    "grade": "A+",
    "can_send": true,
    "recommendation": "Send",
    "primary_risk": null
  },
  "mx_found": true,
  "smtp_provider": "google",
  "is_disposable": false,
  "is_role": false,
  "catch_all": false
}

The one field that matters is deliverability_score.can_send. It is a boolean that already accounts for catch-all domains, greylisting, provider quirks and role addresses. If you only read one field, read that one.

status is the raw SMTP verdict and is more nuanced:

statusMeaningShould you send?
validThe mailbox was confirmed to existYes
invalidThe mail server explicitly rejected itNo
accept_allCatch-all domain — accepts every address, so existence cannot be proven over SMTPJudge by can_send
unknownNo definitive answer (greylisting, timeout, provider blocking)Judge by can_send

A status of unknown is common and often still scores well above the send threshold, because dozens of non-SMTP signals agree the address is real. Do not treat unknown as a failure.

Verify a list

curl -X POST https://emailverifypro.com/validate/bulk \
  -H "Content-Type: application/json" \
  -d '{"emails":["a@example.com","b@example.com"],"deduplicate":true}'

Up to 100 addresses per call. For more, use the async job API:

curl -X POST https://emailverifypro.com/validate/bulk/async \
  -H "X-API-Key: evp_your_key" \
  -H "Content-Type: application/json" \
  -d '{"emails":["..."]}'
# -> {"job_id": "job_abc123"}

curl -H "X-API-Key: evp_your_key" https://emailverifypro.com/jobs/job_abc123

Or let the CLI handle files, batching and polling:

emailverify bulk --file leads.csv --out results.json

Get an API key

You don't need one to try the API, but a key raises your limits and attributes usage to your account.

curl -X POST https://emailverifypro.com/keys \
  -H "Content-Type: application/json" \
  -d '{"name":"my-laptop","tier":"free","owner_email":"you@company.com"}'

The secret is shown once. Full details in the API keys guide.

How long does it take?

A single verification typically takes 1–5 seconds, and can legitimately take 30 seconds or more when the destination server greylists or stalls. Set a client timeout of at least 60 seconds, and use the async bulk API for large lists rather than holding a connection open.

Where to go next