You wanted a function, not a vendor relationship
Most verification providers sell to marketing teams and treat the API as an upsell. You end up on a demo call just to get a key, and then discover rate limits, a proprietary SDK, and a monthly minimum that assumes you verify a million addresses.
You wanted a function that takes a string and tells you whether mail will land.
How it works
-
1
POST /api/v1/verify/singlewith an email address. Get back a status and the signals behind it. -
2
Branch on
status. Three values matter in practice: valid, invalid, unknown. -
3
Batch when you have a list.
POST /api/v1/verify/bulk, then poll for the result.
import requests
r = requests.post(
"https://mailvalid.io/api/v1/verify/single",
headers={"X-API-Key": API_KEY},
json={"email": email},
timeout=3,
)
result = r.json()
if result["result"]["status"] == "invalid" or result["result"]["is_disposable"]:
raise ValidationError("Please use a valid work email address.")const res = await fetch("https://mailvalid.io/api/v1/verify/single", {
method: "POST",
headers: {
"X-API-Key": process.env.MAILVALID_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ email }),
});
const { result } = await res.json();
const { status, is_disposable } = result;Integration notes we would want if we were you
Always set a timeout and fail open. If verification times out, let the signup through and flag it for an asynchronous re-check. Never let a third-party API block your registration flow.
Cache by address. A result holds for around 30 days. Do not pay twice for the same address in one session.
Verify server-side. An API key in client-side JavaScript is a key someone else's script will spend.
Handle `unknown` deliberately. Catch-all domains return unknown because the receiving server will not tell anyone the truth. Decide once whether unknown passes or fails in your flow, and write it down.
Why teams pick MailValid
| MailValid | Typical alternative | |
|---|---|---|
| Time to first API call | Minutes, self-serve | Demo call to get access |
| Price | $0.00075 per email | Monthly minimum |
| Unused credits | Never expire | Reset monthly |
| Response time | Under 500ms average | 1 to 3 seconds |
| Agent and MCP support | Native MCP server | None |
Is there a free tier?
100 credits on signup, no card required.
What are the rate limits?
Documented in the docs, and generous enough for inline signup verification out of the box.
Do you have SDKs?
Copy-paste examples in Python, Node.js, Ruby, PHP, Go and Java. It is one HTTP call — you do not need a dependency.
Can I verify a whole list, not just one email at a time?
Yes — POST /api/v1/verify/bulk accepts a list and returns results asynchronously via polling or webhook. Same $0.00075/email pricing as single verification, same account, same API key.
Does this work with catch-all domains?
Yes — catch-all domains are flagged as unknown rather than a false valid, since the receiving server won't confirm a specific mailbox exists. No verifier can give you a definitive answer here, and any vendor claiming otherwise on catch-alls is guessing.
What is the accuracy?
Based on MailValid's verification logs across 10M+ emails, accuracy is 95%+ across syntax, MX and SMTP-level checks. No verifier can exceed this on catch-all domains, and any vendor claiming 99% on catch-alls is measuring something else.
How is an unknown result billed?
unknown results are not charged — you only pay for a definitive valid or invalid result. This matters most on catch-all domains, where a real verifier will return unknown fairly often rather than guessing.
Can I verify without sending an email?
Yes. SMTP-level confirmation, and no message is ever delivered.
Is this the same as an email validation API?
Yes — verification and validation are used interchangeably. Same engine, same endpoint, same $0.00075/email.
Do you have an email checker API or just verification?
Same thing. POST /api/v1/verify/single checks syntax, MX, and SMTP in a single response.
Do you support AI agents or MCP tool calls?
Yes — MailValid ships a native MCP server, so Claude, Cursor, or any MCP-compatible agent can call verification as a tool mid-task, not just via REST. See the MCP setup guide for details.
Get your API key free — 100 credits, no card required.