Verify email addresses on demand as a user types them into a form, pull your credit balance, and process bulk lists with live progress and ready-made download links. The API speaks JSON, takes your key in the URL path, and returns clean, structured results. Building lead tools too? See the Lead Generation API.
The MyEmailVerifier API is a powerful tool designed to verify email addresses efficiently and accurately. It offers various functionalities to validate single emails and bulk files containing email lists.
This documentation provides detailed information on API endpoints, request parameters, response formats, and additional features to assist users in integrating MyEmailVerifier seamlessly into their applications. Our Email Validation Real-Time API is simply based on the JSON web service, which allows developers to verify individual email addresses on-demand as a user enters them in a web form or mobile application.
Our API divides email statuses in 5 ways.
| Status | Meaning |
|---|---|
| Valid | Valid email represents that account is real and available at the given domain |
| Invalid | Not a real email |
| Unknown | When we cannot verify valid or invalid due to some reason. Generally most of the time a domain didn't respond quick enough. |
| Catch All | The domains which respond to every verification in the affirmative, therefore they cannot be fully verified. |
| Grey-listed | This domain doesn't respond in the first attempt, It is advisable to retry after 5-10 hours. |
| Field | Description |
|---|---|
Address | provided email. |
Status | Can be either Valid, Invalid, Grey-listed or Unknown |
StatusCode | SMTP server status code for advance users |
Disposable_Domain | If the domain is disposable |
Free_Domain | If email is not a business address |
Greylisted | Server will not respond properly in the first attempt. Frequent multiple attempts are not advisable. |
Diagnosis | Helpful information about Invalid address |
To utilize the MyEmailVerifier API, users must acquire an API key. This key serves for authentication purposes and is passed as a path segment in every API call.
You can find your API key from your client area - API section. Full API info and settings are available here (login required):
https://client.myemailverifier.com/apisettings (required login)
Looking to validate emails via our email validation API? Here is an explanation of how you can use our Single Email Validation through an API.
https://client.myemailverifier.com/verifier/validate_single/[email protected]/API_KEY
NOTE: <API_KEY> - You can find your API key from your client area - API section.
curl "https://client.myemailverifier.com/verifier/validate_single/[email protected]/API_KEY"
{
"Address":"[email protected]",
"catch_all": "false",
"Status":"Valid",
"Disposable_Domain":"false",
"Role_Based":"true"
"Free_Domain":"false",
"Greylisted":"false",
"Diagnosis":"Mailbox Exists and Active"
}
Status Code: 200
Here is an explanation of how you can use our Get Credits API.
https://client.myemailverifier.com/verifier/getcredits/API_KEY
NOTE: <API_KEY> - You can find your API key from your client area - API section.
curl "https://client.myemailverifier.com/verifier/getcredits/API_KEY"
{
Credits: "7800"
}
Here is an explanation of how to validate a file using an API. You can upload a TXT/CSV/XLSX file by referring to an example given below.
https://client.myemailverifier.com/verifier/upload_file
POST Variable: api_key (string), filename (fileupload)
file: The bulk file containing email addresses. Allowed formats are TXT, CSV, and XLSX.
if (function_exists('curl_file_create'))
{
$file = curl_file_create('c:\temp\emails.txt');
}
else
{
$file = '@c:\tempemails.txt';
}
$data['filename'] = $file;
$data['api_key'] = 'API_KEY';
$url = 'https://client.myemailverifier.com/verifier/upload_file/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$file_id = curl_exec($ch); //return FILE ID to get file status and download url
curl_close($ch);
{
"status": true,
"file_name": "emails.txt",
"file_id": 1670,
"msg": "File uploaded successfully."
}
Status Code: 200
We assume that you have uploaded a file using our File Upload API. Now, here is an explanation of how you can get the real-time status, live progress, result counts, and download links for your uploaded file using our Get File API.
status_label === "completed".https://client.myemailverifier.com/verifier/file_info/API_KEY/FILE_ID
NOTE1: <API_KEY> - You can find your API key from your client area - API section.
NOTE2: <FILE_ID> - You will get your file ID in the response of the Upload File API.
curl "https://client.myemailverifier.com/verifier/file_info/YOUR_API_KEY/1669"
{
"status": true,
"file": {
"upload_id": 1669,
"user_id": 54838,
"filename": "my-list.csv",
"created_at": "2026-06-19T10:22:00.000000Z",
"ready_for_download": 1,
"status": "finished",
"status_label": "completed",
"downloadable": true,
"progress_percent": 100,
"total_emails": 5000,
"processed_res": 5000,
"phase": "Validating emails",
"percent_phase1": 100,
"percent_phase2": 100,
"unique_domains": 412,
"domains_checked_p1": 412,
"domains_checked_p2": 412,
"total": 5000,
"valid": 3800,
"invalid": 750,
"catchall": 320,
"unknown": 80,
"duplicates": 50,
"spam_trap": 12,
"toxic_domains": 38,
"credit_used": 4950,
"result_counts": {
"Valid": 3800,
"Invalid": 750,
"CatchAll": 320,
"Unknown": 80,
"Spamtrap": 12,
"Disposable": 38,
"Duplicate": 50
},
"download_all_csv": "https://client.myemailverifier.com/downloadreport/csv/...",
"download_valid_csv": "https://client.myemailverifier.com/downloadreport/validcsv/...",
"download_invalid_csv": "https://client.myemailverifier.com/downloadreport/invalidcsv/...",
"download_catchall_csv": "https://client.myemailverifier.com/downloadreport/catchallcsv/...",
"download_unknown_csv": "https://client.myemailverifier.com/downloadreport/unknowncsv/...",
"download_xls": "https://client.myemailverifier.com/downloadreport/xls/...",
"file_path": "https://client.myemailverifier.com/downloadreport/csv/...",
"xls_file_path": "https://client.myemailverifier.com/downloadreport/xls/..."
}
}
upload response received
↓
status_label = "queued" (ready_for_download = 0)
↓ processing begins
status_label = "processing" (ready_for_download = 3)
↓ all emails done
status_label = "completed" (ready_for_download = 1)
→ downloadable = true
→ progress_percent = 100
Phase 1 - Domain Blacklist & MX Check
↓ (percent_phase1: 0->100)
Phase 2 - Catch-All Domain Detection
↓ (percent_phase2: 0->100)
Phase 3 - Individual SMTP Email Validation
(progress_percent: 0->100, phase = "Validating emails")
Every field returned by the file_info endpoint, grouped by purpose.
| Field | Type | Description |
|---|---|---|
upload_id | integer | Unique file ID |
user_id | integer | User account ID (backward-compatible field) |
filename | string | User-supplied file name |
created_at | string | ISO 8601 upload timestamp |
| Field | Type | Description |
|---|---|---|
ready_for_download | integer | Raw status - 0 = queued, 1 = completed, 3 = processing |
status | string | Raw status string from server (e.g. "finished", "In Queue") |
status_label | string | Normalised - "queued" | "processing" | "completed". Use this for logic. |
downloadable | boolean | true only when ready_for_download === 1. Check this before using download URLs. |
| Field | Type | Description |
|---|---|---|
progress_percent | integer | Main progress bar value, 0-100. Computed as (valid + invalid + unknown + catchall) / total_emails × 100. Hard-capped at 100. Forced to 100 when complete. |
total_emails | integer | Total email lines minus blank lines - the correct denominator |
processed_res | integer | Emails verified so far |
spam_trap and toxic_domains are sub-breakdowns of invalid. They are NOT added separately into processed_res to avoid exceeding total_emails.The verification engine runs in three sequential phases. Display these as sub-progress bars or status labels alongside the main progress_percent.
| Field | Type | Description |
|---|---|---|
phase | string | Current phase label - "Blacklisted domain check" → "Checking catchall domains" → "Validating emails" |
percent_phase1 | integer | Phase 1 (domain blacklist / MX record check), 0-100 |
percent_phase2 | integer | Phase 2 (catch-all domain detection), 0-100 |
unique_domains | integer | Total unique domains in the file |
domains_checked_p1 | integer | Domains processed in Phase 1 |
domains_checked_p2 | integer | Domains processed in Phase 2 |
| Field | Type | Description |
|---|---|---|
total | integer | Total email addresses in file |
valid | integer | Confirmed deliverable mailboxes |
invalid | integer | Undeliverable (includes spam_trap + toxic_domains sub-types) |
catchall | integer | Catch-all domain - server accepts all email |
unknown | integer | Could not be determined (timeout / greylisted) |
duplicates | integer | Duplicate email lines found |
spam_trap | integer | Spam trap addresses detected (sub-type of invalid) |
toxic_domains | integer | Disposable / toxic domain addresses (sub-type of invalid) |
credit_used | integer | Credits consumed for this file |
Ready-to-use for pie or bar chart rendering. Keys match the web dashboard chart labels: Valid, Invalid, CatchAll, Unknown, Spamtrap, Disposable, Duplicate.
All URLs are pre-built - no construction needed. Each is null if that category has zero results. Only use download URLs when downloadable === true.
| Field | Description |
|---|---|
download_all_csv | All results combined (always present) |
download_valid_csv | Valid emails only |
download_invalid_csv | Invalid emails only |
download_catchall_csv | Catch-all emails only |
download_unknown_csv | Unknown emails only |
download_xls | Full Excel report |
file_path | Alias for download_all_csv (backward-compatible) |
xls_file_path | Alias for download_xls (backward-compatible) |
Poll for live progress and render a results chart when the file completes.
async function trackBulkVerification(apiKey, fileId) {
const url = `https://client.myemailverifier.com/verifier/file_info/${apiKey}/${fileId}`;
while (true) {
const res = await fetch(url);
const data = await res.json();
if (!data.status) { console.error('API error:', data.message); break; }
const f = data.file;
// Main progress bar (0-100)
document.getElementById('progress-bar').style.width = f.progress_percent + '%';
document.getElementById('progress-label').textContent = f.progress_percent + '%';
// Phase sub-progress
if (f.phase) document.getElementById('phase-label').textContent = f.phase;
if (f.percent_phase1 < 100) showPhaseBar('phase1-bar', f.percent_phase1);
else if (f.percent_phase2 < 100) showPhaseBar('phase2-bar', f.percent_phase2);
// Live counts
document.getElementById('count-valid').textContent = f.valid;
document.getElementById('count-invalid').textContent = f.invalid;
document.getElementById('count-catchall').textContent = f.catchall;
document.getElementById('count-unknown').textContent = f.unknown;
if (f.status_label === 'completed') {
renderResultChart(f.result_counts);
if (f.download_valid_csv) showDownloadBtn('valid', f.download_valid_csv);
if (f.download_invalid_csv) showDownloadBtn('invalid', f.download_invalid_csv);
if (f.download_catchall_csv) showDownloadBtn('catchall', f.download_catchall_csv);
if (f.download_unknown_csv) showDownloadBtn('unknown', f.download_unknown_csv);
if (f.download_xls) showDownloadBtn('xls', f.download_xls);
showDownloadBtn('all', f.download_all_csv);
break;
}
// Wait 30 seconds before next poll (server updates every 30s-1min)
await new Promise(resolve => setTimeout(resolve, 30000));
}
}
When status_label === "completed", the result_counts object is ready to pass directly to any chart library.
// Chart.js - pie chart
new Chart(document.getElementById('resultsChart'), {
type: 'pie',
data: {
labels: Object.keys(f.result_counts), // ['Valid','Invalid','CatchAll',...]
datasets: [{
data: Object.values(f.result_counts),
backgroundColor: [
'#22c55e', // Valid - green
'#ef4444', // Invalid - red
'#f59e0b', // CatchAll - amber
'#6b7280', // Unknown - gray
'#8b5cf6', // Spamtrap - purple
'#f97316', // Disposable - orange
'#64748b' // Duplicate - slate
]
}]
}
});
// ApexCharts - donut chart
new ApexCharts(document.getElementById('resultsChart'), {
series: Object.values(f.result_counts),
labels: Object.keys(f.result_counts),
chart: { type: 'donut' },
colors: ['#22c55e','#ef4444','#f59e0b','#6b7280','#8b5cf6','#f97316','#64748b']
}).render();
Common error responses across the verification endpoints.
{ "status": false, "message": "Invalid API Key" } // 401
{ "status": false, "message": "Unauthorized Request" } // 403
{ "status": false, "message": "File not found" } // 404
Authentication: To utilize the MyEmailVerifier API, users must acquire an API key. This key serves for authentication purposes and must be included in the request for every API call.
| Error | Status Code | Response Status | Response Message |
|---|---|---|---|
| Unauthorized Request | 200 | false | Unauthorized Request |
| Invalid API Key | - | false | Invalid API Key |
Rate Limit: 30 requests per minute
Status Code: 429
{
"status": false,
"message": "Too many requests. Please try again later.",
"retryAfter": 60
}
We're here to provide you with the anrs and support you need to make the most of this powerful tool. Explore the frequently asked questions below.
If you're looking for a reliable email verifier, consider using tools like MyEmailVerifier, ZeroBounce, NeverBounce, Hunter, and Mailgun. These services provide accurate email validation, helping you maintain a clean email list and improve deliverability rates.
Yes, many email list verifiers are designed to handle bulk email validation, making it easier to clean large lists in one go and maintain a healthy sender score.
The main benefits of a real-time email list verifier include reduced bounce rates, improved sender reputation, increased email deliverability, and higher engagement with your audience.
Yes, most email list verifiers, like MyEmailVerifier, offer bulk email validation features. This allows you to clean thousands of email addresses in one go, ensuring your list is free of invalid or risky addresses.
Email validation works by using an email checker to verify the syntax, domain, and mailbox status of an email address. It checks if the email format is correct, if the domain exists, and if the mailbox is active, ensuring only valid addresses are retained in your list.
The fastest email validation API offers bulk verification capabilities to process multiple emails simultaneously. Tools like MyEmailVerifier provide quick and efficient validation, ensuring high-speed checks for large lists.