Single Email Verification
Verify a single email address in real-time. Response in under 2 seconds.
Endpoint
POST
https://verimails.com/api/verify/single
Request
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer YOUR_API_KEY |
Content-Type | Yes | application/json |
Body
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Yes | The email address to verify |
json
{
"email": "user@example.com"
}
Response
Response fields
| Field | Type | Description |
|---|---|---|
email | string | The email address that was verified |
status | string | Verification result: valid, invalid, risky, unknown, or disposable |
safe_to_send | boolean | Whether it's safe to send email to this address |
details.mx_found | boolean | Whether valid MX records exist for the domain |
details.smtp_check | boolean | Whether the mailbox accepted the SMTP check |
details.is_catchall | boolean | Whether the domain accepts all email (catch-all) |
details.catchall_score | number|null | 0–100 probability score for deliverability on catch-all domains. null if not catch-all. |
details.is_disposable | boolean | Whether the address uses a disposable/temporary email provider |
details.is_role_account | boolean | Whether the address is a role-based address (e.g., admin@, info@) |
details.is_free_provider | boolean | Whether the domain is a free email provider (Gmail, Outlook, etc.) |
Example response — valid email
json
{
"email": "john@company.com",
"status": "valid",
"safe_to_send": true,
"details": {
"mx_found": true,
"smtp_check": true,
"is_catchall": false,
"catchall_score": null,
"is_disposable": false,
"is_role_account": false,
"is_free_provider": false
}
}
Example response — catch-all domain
json
{
"email": "sarah@enterprise.io",
"status": "risky",
"safe_to_send": true,
"details": {
"mx_found": true,
"smtp_check": true,
"is_catchall": true,
"catchall_score": 82,
"is_disposable": false,
"is_role_account": false,
"is_free_provider": false
}
}
Code examples
bash
curl -X POST https://verimails.com/api/verify/single \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'
python
import requests
def verify_email(email, api_key):
response = requests.post(
"https://verimails.com/api/verify/single",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={"email": email}
)
response.raise_for_status()
return response.json()
result = verify_email("user@example.com", "YOUR_API_KEY")
if result["safe_to_send"]:
print("Safe to contact!")
javascript
async function verifyEmail(email, apiKey) {
const res = await fetch("https://verimails.com/api/verify/single", {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ email })
});
if (!res.ok) throw new Error(`API error: ${res.status}`);
return res.json();
}
const result = await verifyEmail("user@example.com", "YOUR_API_KEY");
console.log(result.status); // "valid"
console.log(result.safe_to_send); // true
php
function verifyEmail($email, $apiKey) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://verimails.com/api/verify/single",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$apiKey}",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode(["email" => $email])
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result;
}
$result = verifyEmail("user@example.com", "YOUR_API_KEY");
if ($result["safe_to_send"]) {
echo "Safe to contact!";
}
Status codes
| HTTP Status | Meaning |
|---|---|
200 | Success — result returned |
401 | Unauthorized — missing or invalid API key |
422 | Validation error — invalid email format or missing field |
429 | Rate limit exceeded — slow down requests |
500 | Server error — try again shortly |