Complete reference for the Easy Email Verification REST API.
https://api.easyemailverification.com/v1
All requests are made over HTTPS. Plain HTTP is not supported.
Pass your API key as a query parameter in every request. Keep it secret — do not expose it in client-side code.
GET /v1/verify?apikey=YOUR_API_KEY&email=user@example.com
Verify a single email address. Returns a JSON object with all check results.
| Parameter | Type | Required | Description |
|---|---|---|---|
| apikey | string | required | Your API key from the dashboard. |
| string | required | The email address to verify (URL-encoded). |
curl "https://api.easyemailverification.com/v1/verify \
?apikey=YOUR_API_KEY \
&email=user%40example.com"
<?php
$apikey = 'YOUR_API_KEY';
$email = urlencode('user@example.com');
$url = "https://api.easyemailverification.com/v1/verify?apikey={$apikey}&email={$email}";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = curl_exec($ch);
curl_close($ch);
$data = json_decode($body, true);
if ($data['safe_to_send']) {
// safe to add to your list
}
import requests
API_KEY = "YOUR_API_KEY"
def verify_email(email: str) -> dict:
r = requests.get(
"https://api.easyemailverification.com/v1/verify",
params={"apikey": API_KEY, "email": email},
timeout=10
)
r.raise_for_status()
return r.json()
result = verify_email("user@example.com")
print(result["safe_to_send"]) # True / False
async function verifyEmail(email) {
const params = new URLSearchParams({
apikey: "YOUR_API_KEY",
email,
});
const res = await fetch(`https://api.easyemailverification.com/v1/verify?${params}`);
const data = await res.json();
return data;
}
const result = await verifyEmail("user@example.com");
console.log(result.safe_to_send); // true / false
{
"email": "user@example.com",
"user": "user",
"domain": "example.com",
"result": "valid",
"reason": "Accepted by mail server",
"mx_record": "mail.example.com",
"mx_domain": "example.com",
"accept_all": false,
"disposable": false,
"role": false,
"free": false,
"safe_to_send": true,
"did_you_mean": null
}
| Field | Type | Description |
|---|---|---|
| string | The normalized email address that was checked. | |
| user | string | The local part of the email (before @). |
| domain | string | The domain part of the email (after @). |
| result | string | valid, invalid, or unknown. |
| reason | string | Human-readable explanation of the result. |
| mx_record | string | Highest-priority MX record hostname for the domain. |
| mx_domain | string | Domain of the MX record. |
| accept_all | boolean | true if the domain accepts mail for any address (catch-all). |
| disposable | boolean | true if the address is from a known disposable provider. |
| role | boolean | true if the address is role-based (info@, admin@, etc.). |
| free | boolean | true if the address uses a free email provider (Gmail, Yahoo, etc.). |
| safe_to_send | boolean | Primary signal. true if the address passed all checks and is safe to send to. |
| did_you_mean | string|null | Suggested correction for common typos (e.g. gnail.com → gmail.com). Null if no suggestion. |
Non-2xx responses include an error field with a machine-readable code and a human-readable message.
| HTTP | Error Code | Description |
|---|---|---|
| 400 | invalid_email | The email parameter is missing or malformed. |
| 401 | invalid_apikey | The apikey is missing, invalid, or revoked. |
| 402 | quota_exceeded | Daily verification quota exhausted. Upgrade your plan or wait for the reset. |
| 429 | rate_limited | Too many requests per second. Slow down or use the bulk endpoint. |
| 500 | server_error | Unexpected server error. Retry with exponential back-off. |
{
"error": "invalid_apikey",
"message": "The API key provided is invalid or has been revoked."
}
Free plans include 50 verifications per day. Paid plans scale from 500 to 100,000 per day. Contact us for custom enterprise volumes.
Official client libraries maintained by the Easy Email Verification team.
Sign up free — 50 verifications/day, no credit card required.
Get Your Free API Key →