Real-time email verification without sending a message
Detect invalid, disposable, catch-all and typo emails before saving or sending. Real-time API for forms and bulk jobs of up to 5,000 emails.
What you get
Strict syntax
Full RFC validation, including odd local parts (plus addressing, unicode, lengths).
DNS and MX
We confirm the domain has MX records (or A fallback per standard) before trying anything else.
Catch-all detection
We detect domains that accept any address and mark the result as "risky" or "unknown" based on signals.
SMTP probing
Real handshake without sending any message. We read the RCPT TO response: accept, reject or greylisting.
Domain classification
Disposable, role accounts (info@, admin@), free providers (Gmail/Yahoo) and recognized corporate providers.
Typo suggestions
If the domain looks like a known one ("gmial.com"), we return "did you mean gmail.com?".
Local part patterns
We flag local parts that look random (bots) vs. human patterns (first.last).
Bulk up to 5,000 per job
Upload CSV, we process in the background, you download results. Optional webhook on completion.
How it works
Syntax and domain check
We normalize the email, verify RFC compliance and resolve DNS/MX in milliseconds. If the domain cannot receive mail, we return "undeliverable" without touching SMTP.
Provider classification
We identify provider (Gmail/Microsoft/corporate), whether it is disposable, a role account or a free provider.
SMTP probe (policy-driven)
Handshake with the domain mail server up to RCPT TO. We never send DATA. We read accept/reject/greylisting/full.
Verdict and action
We return status (deliverable/undeliverable/risky/unknown), action (allow/review/block) and explained signals so you decide with context.
In code
cURLcurl -X POST https://api.byebouncer.com/api/v1/verify \ -H "Authorization: Bearer $BYEBOUNCER_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"maria@company.com"}'
Node / TypeScriptimport { ByeBouncer } from '@bye_bouncer/sdk'; const bb = new ByeBouncer({ apiKey: process.env.BYEBOUNCER_API_KEY! }); const result = await bb.verify('maria@company.com'); if (result.action === 'allow') await saveLead(result);
Pythonimport os from byebouncer import ByeBouncer bb = ByeBouncer(api_key=os.environ["BYEBOUNCER_API_KEY"]) result = bb.verify("maria@company.com") if result.action == "allow": save_lead(result)
Frequently asked questions
How do you verify without sending an email?
We perform an SMTP handshake with the domain mail server (as a real mail server does when connecting) and read the RCPT TO response. If the mailbox does not exist the server says so; if it does, it accepts. No message is ever transmitted: we close the connection before DATA.
What is catch-all and why does it matter?
A catch-all domain accepts any address in the handshake even if the mailbox does not exist. In those domains we cannot distinguish a real address from a fake one; we mark the result as "unknown" so you can decide with double opt-in or treat as risky.
Do you detect typos like "gmial.com"?
Yes. We compare the domain against a curated list of common providers and their most-seen variants, and return a correction suggestion in the "suggestion" field.
What about disposable domains like mailinator?
We maintain and update a list of temporary email services. We flag them as "disposable" so you can decide whether to accept, confirm or reject.
Can I validate large lists?
Yes. Bulk accepts up to 5,000 emails per job, processes them in the background and can notify you by webhook. Split larger lists across jobs. Unused credits are returned when a job is cancelled or completed.
Do you charge for cached results?
Yes. Our cache is a performance optimization and does not change pricing. Not charged: invalid syntax, domains without MX nor fallback, provider timeouts and inconclusive errors.
What about providers like Yahoo that reject verification?
Some large providers actively block SMTP verifications. We detect it and mark it as "provider_blocked" (neutral signal, not evidence of invalidity). Status stays "unknown" and we recommend treating as review.
Is there an official SDK?
Yes: byebouncer-sdk on PyPI and @bye_bouncer/sdk on npm. Both cover email, IP, phone and email bulk. Combined lead is available through REST.
Try it with 500 free credits
No credit card. Start using the API as soon as you sign up.
Create account