Email Verification API

Email Verification API

Verify any email address in real time.

An email verification API checks that an address is real and able to receive mail before you accept it. One REST call verifies syntax, domain MX records, and disposable status — with optional SMTP mailbox checks. Built for signup forms, fast enough to call on submit.

Try the API live
Syntax Check
● Checking…
MX Records
● Pending…
Disposable Domain
● Pending…
API Response
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"is_valid": true
}
}
Trusted by thousands of businesses
Fast JSON API responses
Real-time validation
Simple integration, SDKs & examples
Features

How the Email Address Verification API Works

Four verification layers — syntax, domain, disposable detection, and SMTP — exposed through one REST endpoint with a predictable JSON response.

Syntax Verification

Every address is parsed against RFC 5322 with specific error reasons, so malformed input is rejected before any network checks run.

Domain & MX Record Checks

Confirms the domain exists and publishes MX records — proof it can actually receive mail. No MX records means the address is undeliverable.

Disposable Email Detection

Flags addresses from 10,000+ known disposable and temporary providers, updated daily, so throwaway signups never reach your database.

SMTP Email Verification

The advanced endpoint performs a live SMTP handshake to verify the specific mailbox exists and can receive messages — the strongest deliverability signal.

Real-Time, Under 100 ms

The standard verification endpoint skips outbound SMTP, so it typically responds in under 100 ms — call it synchronously on form submit.

Bulk Email Verification

Verify entire lists through the batch API: submit thousands of addresses in one request and collect the results when processing completes.

Developer Experience

Email Verification API Documentation & Code Examples

Verify an email address with one GET request — no SDK required. The same predictable JSON shape in every language: copy a sample below and you are in production in minutes.

Responds in under 100 ms — safe to call on form submit
Syntax, MX, and disposable signals in a single call
SMTP mailbox verification via the advanced endpoint
Plain REST + JSON — works from any language or framework
Read API Reference
Endpoint
GET /api/v1/email/{email}?api_key={key}
Example Request
curl "https://ip-api.io/api/v1/email/name@company.com?api_key=YOUR_API_KEY"
Example Response
200
{
  "email": "name@company.com",
  "is_disposable": false,
  "has_mx_records": true,
  "syntax": {
    "domain": "company.com",
    "username": "name",
    "is_valid": true,
    "error_reasons": []
  }
}
Endpoint
GET /api/v1/email/{email}?api_key={key}
Example Request
const res = await fetch(
  "https://ip-api.io/api/v1/email/name@company.com?api_key=YOUR_API_KEY"
);
const data = await res.json();
if (data.has_mx_records && !data.is_disposable) {
  console.log("Verified — accept signup");
}
Example Response
200
{
  "email": "name@company.com",
  "is_disposable": false,
  "has_mx_records": true,
  "syntax": {
    "domain": "company.com",
    "username": "name",
    "is_valid": true,
    "error_reasons": []
  }
}
Endpoint
GET /api/v1/email/{email}?api_key={key}
Example Request
import requests

res = requests.get(
    "https://ip-api.io/api/v1/email/name@company.com",
    params={"api_key": "YOUR_API_KEY"}
)
data = res.json()
if data["has_mx_records"] and not data["is_disposable"]:
    print("Verified — accept signup")
Example Response
200
{
  "email": "name@company.com",
  "is_disposable": false,
  "has_mx_records": true,
  "syntax": {
    "domain": "company.com",
    "username": "name",
    "is_valid": true,
    "error_reasons": []
  }
}
Endpoint
GET /api/v1/email/{email}?api_key={key}
Example Request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
  "https://ip-api.io/api/v1/email/name@company.com?api_key=YOUR_API_KEY");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch));
if ($data->has_mx_records && !$data->is_disposable) {
  echo "Verified — accept signup";
}
Example Response
200
{
  "email": "name@company.com",
  "is_disposable": false,
  "has_mx_records": true,
  "syntax": {
    "domain": "company.com",
    "username": "name",
    "is_valid": true,
    "error_reasons": []
  }
}
Endpoint
GET /api/v1/email/{email}?api_key={key}
Example Request
require 'net/http'
require 'json'

uri = URI('https://ip-api.io/api/v1/email/name@company.com')
uri.query = URI.encode_www_form(api_key: 'YOUR_API_KEY')

res = Net::HTTP.start(uri.hostname, use_ssl: true) { |h| h.get(uri) }
data = JSON.parse(res.body)
puts "Verified!" if data['has_mx_records'] && !data['is_disposable']
Example Response
200
{
  "email": "name@company.com",
  "is_disposable": false,
  "has_mx_records": true,
  "syntax": {
    "domain": "company.com",
    "username": "name",
    "is_valid": true,
    "error_reasons": []
  }
}
Endpoint
GET /api/v1/email/{email}?api_key={key}
Example Request
resp, err := http.Get("https://ip-api.io/api/v1/email/name@company.com?api_key=YOUR_API_KEY")
if err != nil { log.Fatal(err) }
defer resp.Body.Close()

var data struct {
  IsDisposable bool `json:"is_disposable"`
  HasMxRecords bool `json:"has_mx_records"`
}
json.NewDecoder(resp.Body).Decode(&data)
if data.HasMxRecords && !data.IsDisposable {
  fmt.Println("Verified — accept signup")
}
Example Response
200
{
  "email": "name@company.com",
  "is_disposable": false,
  "has_mx_records": true,
  "syntax": {
    "domain": "company.com",
    "username": "name",
    "is_valid": true,
    "error_reasons": []
  }
}
Use Cases

Where developers integrate email verification

From signup forms to bulk list verification — one API for every point where an email address enters your system.

Signup Form Verification

Verify addresses the moment users type them. The standard endpoint responds in under 100 ms, so you can reject typos, undeliverable domains, and disposable addresses synchronously — before the account is ever created.

Registration Form Validation Onboarding

Lead Capture & CRM Hygiene

An unverifiable email is a lead that will never convert. Verify addresses at capture time and flag risky ones in your CRM, so sales effort and marketing spend go to contacts you can actually reach.

CRM Lead Scoring Data Quality

Bulk Email Verification

Run entire mailing lists through the batch verification API before a campaign. Removing undeliverable and disposable addresses up front cuts bounce rates and protects your sender reputation.

Batch API Deliverability Bounce Rate
FAQ

Email Verification API FAQs

Common questions about verifying email addresses programmatically.

What is an email verification API?

An email verification API is a web service that checks whether an email address is real and able to receive mail before you store or message it. A complete verification covers four layers: syntax (is the address well-formed?), domain (does it exist and publish MX records?), reputation (is it a disposable or throwaway provider?), and mailbox (does the specific inbox exist, confirmed via SMTP?). You call GET https://ip-api.io/api/v1/email/{email} and get all of these signals back as JSON.

What is the difference between email verification and email validation?

In practice the terms are used interchangeably, but there is a useful distinction: validation typically refers to checking that an address is well-formed (syntax and format), while verification goes further and confirms the address can actually receive mail — domain MX records, disposable detection, and a live SMTP mailbox check. The ip-api.io API does both: the standard endpoint validates syntax and verifies domain-level deliverability, and the advanced endpoint adds SMTP mailbox verification.

Is there a free email verification API?

Yes. The live verifier on this page is completely free with no sign-up, and a free API tier is available for developers to test the integration. Higher request volumes and SMTP mailbox verification require a paid subscription — plans start at €10/month.

Does the API verify mailboxes via SMTP?

Yes. The advanced verification endpoint performs a live SMTP handshake with the recipient's mail server to confirm the specific mailbox exists and can accept messages — the strongest deliverability signal available. The standard endpoint deliberately skips SMTP so it can respond in under 100 ms; use it for real-time form checks, and the SMTP endpoint where deliverability certainty matters most.

Can I verify email addresses in bulk?

Yes. The batch verification API accepts thousands of addresses in a single request and processes them asynchronously — submit the list, then collect results when processing completes. For cleaning existing mailing lists, see the email list cleaning service, which removes invalid, disposable, and undeliverable addresses in one pass.

Will email verification slow down my signup form?

No. The standard verification endpoint makes no outbound SMTP connections, so it typically responds in under 100 ms — fast enough to call synchronously on form submit without a noticeable delay. A common pattern is to verify on the email field's blur event, so the result is already in hand by the time the user clicks submit.

Pricing

Simple, transparent pricing

Start small, scale as you grow. No hidden fees.

Small
€10 /month
100,000 geo IP requests / month
10,000 advanced email verification requests
Real-time email verification included
Location, threat & time zone data
Email support
99.9% uptime SLA
Get started
Large
€49 /month
1,000,000 geo IP requests / month
100,000 advanced email verification requests
Unlimited standard email verification
Full email verification suite
SLA & uptime guarantee
All datasets
Custom integrations
Dedicated support
Get started

Start verifying email addresses today

Syntax, MX records, disposable detection, and SMTP mailbox checks through one REST API — copy a code sample and verify your first address in minutes.

> _
curl ip-api.io/api/v1/
email/name@company.com
Verified