AlsoFree disposable email check & Email Finder

Email verification API that checks the real mailbox, not just the format

Send one address. EnvoAPI asks the recipient's mail server whether the mailbox exists, without sending an email, and returns valid, invalid or unverifiable with the reason, plus catch-all and disposable flags. Fewer bounces, fewer fake signups, cleaner lists. Start with 100 free credits.

GET/v1/emails/verify?email=[email protected]Get API key

Read the API reference2 credits per check100 free creditsNo credit card required

  1. Syntax[email protected]
  2. Domain & MXmx: aspmx.l.google.com
  3. Mailboxaccepted · no email sent
  4. Resultstatus: valid
  • 2 creditsper address checked
  • No email sentThe mail server is asked directly
  • 3 statuses, 8 reasonsvalid, invalid, unverifiable
  • Always liveResults are never cached

Where it fits

Where teams use email verification

The same check works at signup, before a campaign, and on the way into your CRM.

  • Signup and onboarding forms

    Catch typos and fake addresses while the user is still on the page. Ask for a correction instead of losing them to a bounced welcome email.

  • Campaigns and newsletters

    Clean a list before a send. Remove invalid addresses so bounces stay low and your sending domain keeps its reputation.

  • Sales outreach and CRM data

    Verify leads before they enter a sequence. Flag catch-all domains so reps know which addresses are confirmed and which are a guess.

  • Imports and lead scoring

    Check purchased or imported lists as they arrive. Route unverifiable rows for review instead of dropping them or sending blind.

Only have a name and a company? Pair it with the Email Finder API, which finds the address first and verifies it in the same call.

How it works

How the email verification check works

One request runs four checks in order and stops at the first one that fails.

  1. Syntax

    The address is parsed and split into the local part and the domain.

  2. Domain and MX

    EnvoAPI looks up the domain's mail servers. A domain with no MX record cannot receive email, so the check ends here with reason no_mx.

  3. Mailbox

    EnvoAPI asks the mail server whether it accepts this exact address. No email is sent, so nothing lands in anyone's inbox.

  4. Result

    You get a status, the reason behind it, and whether the domain is catch-all or disposable.

Every check is live. Results are never cached, so you always see the mail server's current answer.

The response

What you get back

One JSON object per address. Four fields tell you whether to send. The rest tell you what was checked.

Response200GET /v1/emails/verifyjson
{  "data": {    "email": "[email protected]",    "user": "Sarah Collins",    "domain": "brightpathlabs.com",    "mx": "aspmx.l.google.com",    "status": "valid",    "reason": "accepted",    "isCatchAll": false,    "isDisposable": false  },  "meta": {    "creditCost": 2  }}
  1. status

    valid means the mail server accepted the mailbox. invalid means it rejected it. unverifiable means it could not confirm either way.

  2. reason

    Why you got that status, as a fixed code you can switch on. All 8 codes are explained below.

  3. isCatchAll

    true when the domain accepts every address. A valid result on a catch-all domain is weaker proof that this specific mailbox exists.

  4. isDisposable

    true when the domain is a known throwaway email provider.

email, user, domain and mx echo what was checked, including the mail server that answered. user and mx can be null.

Reason codes

Every reason code, explained

The reason never changes meaning between releases, so you can build on it.

ReasonWhat it meansWhat to do
acceptedThe mail server accepted the mailbox.Send
rejectedThe mail server said the mailbox does not exist.Remove
no_mxThe domain has no mail servers, so it cannot receive email.Remove
catch_allThe domain accepts every address, so this one cannot be confirmed on its own.Review
timeoutThe mail server did not answer in time.Retry later
mx_errorThe mail server returned an error during the check.Retry later
limitedThe mail server limited how much it would answer.Retry later
spam_blockThe mail server blocked the check as anti-spam protection.Review

Using the result

A simple rule for what to do with each result

Most teams sort results into three buckets. Copy this as a starting point and adjust it to your risk.

Send

javascript
data.status === "valid"  && !data.isCatchAll  && !data.isDisposable

The server accepted a real mailbox on a normal, non-throwaway domain.

Review

javascript
data.status === "unverifiable"  || data.isCatchAll

The server could not confirm the mailbox, or the domain accepts everything. Retry later, or send only when the lead is worth the bounce risk.

Don't send

javascript
data.status === "invalid"  || data.isDisposable

The server rejected the mailbox, the domain has no mail server, or it is a throwaway domain.

If an address matches two buckets, use the stricter one. Your rules may differ: sales teams often still email catch-all domains, newsletters usually do not.

Verify your first address in under a minute

One GET request with your API key and the address. Each check costs 2 credits, so your 100 free credits cover 50 checks.

GET/v1/emails/verifybash
curl -G "https://api.envoapi.com/v1/emails/verify" \  -H "Authorization: Bearer $ENVO_API_KEY" \  --data-urlencode "[email protected]"
verify.mjs · Node 18+javascript
const api = "https://api.envoapi.com";const key = process.env.ENVO_API_KEY;const email = "[email protected]";const url = new URL("/v1/emails/verify", api);url.searchParams.set("email", email);const res = await fetch(url, {  headers: { Authorization: `Bearer ${key}` },});const { data } = await res.json();function bucket({ status, isCatchAll, isDisposable }) {  if (status === "invalid" || isDisposable) {    return "dont-send";  }  if (status === "unverifiable" || isCatchAll) {    return "review";  }  return "send";}console.log(bucket(data), data.reason); // send accepted

Good to know

Credits, refunds and errors, stated up front

No surprises on the invoice. This is how every verification is charged and when you get credits back.

  • 2 credits per check

    Every verification costs the same, including unverifiable results, because the mail server was asked.

  • Yahoo addresses are refunded

    Addresses at yahoo.* domains, ymail.com and rocketmail.com cannot be verified yet. They return 422 with error code email_unverifiable and the credits come back.

  • Capacity errors are refunded

    If the verification provider is at capacity or unavailable, you get 503, a Retry-After header, and a refund.

  • Headers for batch jobs

    Every response carries X-Credits-Remaining and X-RateLimit-* headers so you can pace a list and stop before you run out.

  • Never cached

    Each call is a live check. Checking the same address twice means two live checks and two charges.

Email endpoints

Three email endpoints, one API key

They share the same key, the same response shape and the same credit balance.

2 credits

GET/v1/emails/verify

Verify Email

Checks that a mailbox exists by asking the mail server directly. Returns a status, a reason, and catch-all and disposable flags.

  • status
  • reason
  • isCatchAll
  • isDisposable
  • mx
10 credits

GET/v1/emails/find

Find Email

Give a first name, last name and company domain. EnvoAPI tests common address patterns with the mail server and returns the one it accepts.

  • email
  • status
  • candidatesChecked
  • verification

FAQ

Email verification API questions

Does the API send an email to the address?

No. EnvoAPI asks the recipient's mail server whether the mailbox exists. Nothing is delivered to the inbox you are checking.

What does unverifiable mean?

The mail server would not confirm or deny the mailbox. The reason code says why, for example timeout, limited, mx_error or spam_block. Many of these cases clear up on a retry later.

What is a catch-all domain?

A domain whose mail server accepts every address, real or not. Verify Email flags it with isCatchAll. Find Email returns no address for these domains, because every pattern would be accepted.

Why isn't a regex check enough?

A regex only checks the format. It cannot tell you whether the domain has mail servers or whether the mailbox exists. Verification asks the server that would deliver the email.

How much does email verification cost?

2 credits per address. The free plan includes 100 credits, enough for 50 checks, and no credit card is needed.

Do I pay for unverifiable results?

Yes, 2 credits like any other check, because the mail server was asked. Credits are refunded only when the check could not run: Yahoo addresses (422) and provider capacity errors (503).

Can I verify a whole list?

Each request verifies one address. To clean a list, call the endpoint once per address and use the X-RateLimit-* headers to pace the job.

Are results cached?

No. Every call is a live check against the mail server, so you always see its current answer.

Can I verify Yahoo addresses?

Not yet. Addresses at yahoo.* domains, ymail.com and rocketmail.com return 422 with error code email_unverifiable. The request is not retryable and the credits are refunded.

What happens when verification is unavailable?

If the verification provider is at capacity or unavailable, the request fails with a 503, the credits are refunded, and the Retry-After header says when to try again.

Is the disposable email check free?

Yes. Check Disposable Email costs no credits, including when the domain is not listed. It only checks the domain, not whether the mailbox exists.

What is the difference between Verify Email and Find Email?

Verify Email checks an address you already have. Find Email discovers an address from a name and a company domain, then verifies it.

Parameters, response schemas and error codes are in the endpoint reference. Plans and credit packs are on the pricing page.