Send one request
Pass the address to /v1/email-validation with your X-API-Key header: a GET in the URL or a POST in the body. No SDK, no OAuth dance, just one authenticated call.
REST Email Verification for Developers
One GET request runs all 9 checks and returns a structured verdict. Wire it straight into forms, CRMs, or AI agents instantly.
1,000 free credits on signup, 2,500 with a work email. No card.
Three moves, no glue code. Send the address, let the nine-check engine run, and read a structured verdict your code can branch on.
Pass the address to /v1/email-validation with your X-API-Key header: a GET in the URL or a POST in the body. No SDK, no OAuth dance, just one authenticated call.
Syntax, DNS and MX, a live SMTP handshake, catch-all and disposable detection, role and domain-age signals, and SPF/DKIM/DMARC all fire at once.
One structured object comes back: reachable for the one-word answer, score for catch-all confidence, and every per-check field so your code can branch on the exact reason.
It turns list hygiene from a monthly chore into a property of your system: every address checked the moment it enters.
An email verification API moves list hygiene from a monthly chore to a property of your system: every address gets checked the moment it enters, at the signup form, the lead-capture webhook, or the CRM import. What a real-time API catches that regex cannot is what happens after syntax — a mailbox deactivated last quarter, a disposable domain spun up this morning, or a catch-all server that accepts everything and bounces it later, where 20 to 40% of B2B lists fail.
No SDK to install and no OAuth dance. Just a key, a plain GET request, and a JSON object your code can branch on in one line — no libraries, no ceremony.
/v1/email-validation/:email1curl -X GET "https://api.verifox.ai/v1/email-validation/john@example.com" \2 -H "X-API-Key: vfx_your_api_key"1{2 "email": "john@example.com",3 "domain": "example.com",4 "isValid": true,5 "reachable": "safe",6 "syntax": true,7 "smtp": {8 "hostExists": true,9 "fullInbox": false,10 "catchAll": false,11 "deliverable": true,12 "disabled": false13 },14 "mx": {15 "records": ["gmail-smtp-in.l.google.com."],16 "smtpProvider": "Google",17 "domainAgeDays": 11196,18 "domainCreated": "1995-08-13",19 "hasSPF": true,20 "hasDMARC": true,21 "hasDKIM": false22 },23 "isFree": false,24 "isRole": false,25 "isDisposable": false,26 "hasGravatar": true,27 "suggestion": null,28 "verifiedAt": "2026-03-31T10:30:00Z",29 "score": 9230}/v1/email-validation/bulk1curl -X POST "https://api.verifox.ai/v1/email-validation/bulk" \2 -H "X-API-Key: vfx_your_api_key" \3 -H "Content-Type: application/json" \4 -d '{"input": ["john@example.com", "jane@test.io", "bad@invalid"]}'1{2 "job_id": "69d78b9e37e519a86c186261",3 "total_records": 1000,4 "processed_records": 420,5 "status": "processing",6 "progress": 42,7 "summary": {8 "total_safe": 200,9 "total_risky": 50,10 "total_invalid": 150,11 "total_unknown": 2012 }13}Every check maps to a field: syntax for format, mx for the domain and its SPF/DKIM/DMARC posture plus domainAgeDays, smtp for the live handshake and catch-all flag, and isDisposable / isRole for the address class. score carries the AI confidence on catch-alls.
Two ways to verify a single address, and a three-call bulk flow for lists. That is the entire surface area you need to learn.
/v1/email-validation/:emailVerify one address in the URL. Full 9-check verdict, 1 credit.
/v1/email-validationSame verdict via JSON body, for callers that keep addresses out of URLs and logs.
/v1/email-validation/bulkStart a bulk job from an array or an uploaded CSV. Up to 100,000 emails per job.
/v1/email-validation/bulk/:jobId/progressPoll a running job: processed count, percent done, and a safe/risky/invalid summary.
/v1/email-validation/bulk/:jobId/resultsFetch completed results with cursor pagination, 50 rows per page by default.
Request and response schemas for every route, parameter by parameter, live in the email validation API reference.
Emails sent to the API are used only to run the verification and show you the result. We never sell them, and the platform is GDPR and CCPA compliant.

The addresses you submit are never sold or shared.

We ask the mail server. Not one message is sent.

Full GDPR data-subject rights for everyone in the EU and UK.

California opt-out, do not sell and DSAR handling.
An investigation into the money leaking out of your list - and the nine checks that decide whether your email is read, or never arrives at all.

57 pages, free PDF, no signup
Common questions
Auth, rate limits, the response shape, bulk jobs, and what happens to the addresses you send us. Real numbers, including the ones that are limits.
One header: X-API-Key: vfx_your_api_key. Create a free account, generate a key in the dashboard, and every endpoint accepts it. Keys carry scopes, so you can mint a verify-only key for a service that should never touch anything else.
The full auth section, including key rotation and the read-only scope, lives in the API reference.
Nine things, in parallel: RFC 5321/5322 syntax, domain existence and MX records, a live SMTP handshake with a mailbox ping, disposable-domain match, role-address detection, catch-all detection, AI-confidence scoring on catch-alls, domain age, and SPF/DKIM/DMARC authentication.
Every one of those surfaces as a field in the response, so your code can branch on the exact failure. The methodology behind each check is on the email verification service page.
Speed depends on the receiving mail server, because every check waits for its real answer. Single checks run live; bulk jobs run in the background and you poll for results.
A real SMTP handshake takes time; anything that claims instant mailbox checks is skipping the mailbox. Custom SLAs are available on annual Volume contracts.
60 requests per minute on the single-verify endpoints. Past that you get a 429 and should back off before retrying. We publish the number because you will hit it if you loop a list through the single endpoint.
That is what the bulk endpoint is for: one POST covers up to 100,000 addresses and the rate limit stops mattering. Details in the API docs.
Yes. Signing up credits your account with 1,000 verifications, or 2,500 if your signup email is a work address. No card. Each single verify costs 1 credit, and credits never expire.
Want to test the engine before writing any code? The free email checker runs the same engine in the browser, 4 checks a day without an account.
POST your list (a JSON array or an uploaded CSV referenced by s3_url) to /v1/email-validation/bulk and you get a job ID back. Poll the progress endpoint for a live safe/risky/invalid summary, then page through results when the status hits completed.
Honest note: results are pull-based today. There is no webhook on bulk jobs, so build a poller. For a no-code path, the multiple email checker covers the same flow in the browser.
Catch-all servers accept every address during the handshake, which is why 20 to 40% of B2B lists fail there with most verifiers. We flag the domain via smtp.catchAll, then run AI-confidence scoring so the score field still separates likely-real from likely-fake.
You decide the threshold per use case. See the catch-all email checker for how the scoring behaves on real domains.
Addresses you send are used only to run the verification and show you the result. We never sell them, which matters when the addresses you verify belong to your users.
Verifox is GDPR and CCPA compliant; our security overview has the details, and the privacy policy spells out exactly what is touched and what is not, byte by byte.
reachable is the verdict: safe, risky, invalid, or unknown. isValid is the boolean rollup, and score (0 to 100) is the confidence grade that does the heavy lifting on catch-alls.
Most integrations gate on reachable and only read the nested smtp and mx objects when they need the why. Field-by-field docs are in the API reference.
Yes, two ways. Any agent that can make HTTP calls can hit the REST endpoints directly. Or skip the glue code: the email verification MCP server exposes this same engine as native tools for Claude, Cursor, and any MCP client.
If your agent also needs to discover addresses, not just verify them, pair this API with the email finder API or the email finder tool.