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.
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.
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.
GET /api/v1/email/{email}?api_key={key}
curl "https://ip-api.io/api/v1/email/name@company.com?api_key=YOUR_API_KEY"
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"domain": "company.com",
"username": "name",
"is_valid": true,
"error_reasons": []
}
}
GET /api/v1/email/{email}?api_key={key}
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");
}
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"domain": "company.com",
"username": "name",
"is_valid": true,
"error_reasons": []
}
}
GET /api/v1/email/{email}?api_key={key}
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")
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"domain": "company.com",
"username": "name",
"is_valid": true,
"error_reasons": []
}
}
GET /api/v1/email/{email}?api_key={key}
$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";
}
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"domain": "company.com",
"username": "name",
"is_valid": true,
"error_reasons": []
}
}
GET /api/v1/email/{email}?api_key={key}
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']
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"domain": "company.com",
"username": "name",
"is_valid": true,
"error_reasons": []
}
}
GET /api/v1/email/{email}?api_key={key}
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")
}
{
"email": "name@company.com",
"is_disposable": false,
"has_mx_records": true,
"syntax": {
"domain": "company.com",
"username": "name",
"is_valid": true,
"error_reasons": []
}
}
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.
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.
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.
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.
Simple, transparent pricing
Start small, scale as you grow. No hidden fees.
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.