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 for | Start here | |
|---|---|---|
| REST API | Any language, any platform | API guide |
| CLI | Terminal, scripts, CI, one-off checks | CLI guide |
| SDK | Python or TypeScript applications | SDK guide |
| MCP server | Claude and other AI assistants | MCP 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:
status | Meaning | Should you send? |
|---|---|---|
valid | The mailbox was confirmed to exist | Yes |
invalid | The mail server explicitly rejected it | No |
accept_all | Catch-all domain — accepts every address, so existence cannot be proven over SMTP | Judge by can_send |
unknown | No 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
- API guide — authentication, every core endpoint, full request and response shapes
- API keys — create, scope, rotate, revoke
- CLI — all 152 endpoints as shell commands
- SDKs — Python and TypeScript
- MCP server — connect Claude or another AI assistant
- Recipes — clean a CRM export, gate a signup form, verify before a campaign
- Endpoint reference — all 152, searchable
- Errors and limits — status codes, rate limits, timeouts