Whether you are cleaning a marketing list, validating signups in real time, or running bulk data hygiene jobs, CheckMail1 gives you a fast, accurate email verification API you can integrate in minutes.
Sign up at checkmail1.com and go to Dashboard → API Keys. Use your key in every request via the x-api-key header.
curl -X GET "https://checkmail1.com/api/v1/verify?email=test%40example.com" \
-H "x-api-key: YOUR_API_KEY" \
-H "Accept: application/json"
{
"email": "test@example.com",
"status": "valid",
"is_deliverable": true,
"is_disposable": false,
"is_role": false,
"mx_found": true,
"smtp_check": true,
"score": 98,
"domain": "example.com"
}
| Field | Type | Description |
|---|---|---|
| status | string | valid, invalid, risky, or unknown |
| is_deliverable | bool | SMTP handshake confirmed mailbox exists |
| is_disposable | bool | Belongs to a throwaway provider |
| is_role | bool | Role-based address (support@, noreply@) |
| mx_found | bool | Domain has valid MX DNS records |
| score | int 0-100 | Deliverability confidence score |
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://checkmail1.com/api/v1/verify"
def verify_email(email: str) -> dict:
response = requests.get(
BASE_URL,
params={"email": email},
headers={"x-api-key": API_KEY},
timeout=10
)
response.raise_for_status()
return response.json()
result = verify_email("john@gmail.com")
print(f"Status: {result['status']}, Score: {result['score']}")
emails = ["alice@example.com", "bob@test.org", "fake@nonexistent.xyz"]
for email in emails:
r = verify_email(email)
print(f"{'OK' if r['is_deliverable'] else 'FAIL'} {email} -> {r['status']}")
<?php
define('API_KEY', 'YOUR_API_KEY');
define('API_URL', 'https://checkmail1.com/api/v1/verify');
function verifyEmail(string $email): array {
$url = API_URL . '?' . http_build_query(['email' => $email]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => ['x-api-key: ' . API_KEY, 'Accept: application/json'],
]);
$body = curl_exec($ch);
curl_close($ch);
return json_decode($body, true);
}
$r = verifyEmail('user@domain.com');
echo "Status: {$r['status']}, Deliverable: " . ($r['is_deliverable'] ? 'yes' : 'no') . "\n";
?>
const API_KEY = 'YOUR_API_KEY';
async function verifyEmail(email) {
const url = `https://checkmail1.com/api/v1/verify?email=${encodeURIComponent(email)}`;
const res = await fetch(url, {
headers: { 'x-api-key': API_KEY, 'Accept': 'application/json' }
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
}
const emails = ['alice@example.com', 'spam@disposable.gg'];
for (const email of emails) {
const data = await verifyEmail(email);
console.log(`${email} -> ${data.status} (score: ${data.score})`);
}
# Submit bulk job
curl -X POST "https://checkmail1.com/api/v1/bulk" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails": ["a@example.com", "b@test.io", "c@domain.org"]}'
# Response: {"job_id": "jb_abc123", "count": 3, "status": "queued"}
# Poll results
curl "https://checkmail1.com/api/v1/bulk/jb_abc123" \
-H "x-api-key: YOUR_API_KEY"
| HTTP Code | Meaning | Action |
|---|---|---|
| 200 | Success | Parse JSON response |
| 400 | Bad request | Validate email format first |
| 401 | Invalid API key | Check x-api-key header |
| 429 | Rate limit exceeded | Back off; upgrade plan if needed |
| 500 | Server error | Retry with exponential backoff |
Free tier: 100 verifications/day. Paid plans from $4.99/month for 5,000 checks. See checkmail1.com/#pricing.
Integrating CheckMail1's email verification API takes less than 10 minutes. You get real-time SMTP verification, disposable detection, MX record checks, and confidence scoring through a simple REST interface.
Start free today: checkmail1.com