Docs/Single Verification

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

HeaderRequiredValue
AuthorizationYesBearer YOUR_API_KEY
Content-TypeYesapplication/json

Body

FieldTypeRequiredDescription
emailstringYesThe email address to verify
json
{
  "email": "user@example.com"
}

Response

Response fields

FieldTypeDescription
emailstringThe email address that was verified
statusstringVerification result: valid, invalid, risky, unknown, or disposable
safe_to_sendbooleanWhether it's safe to send email to this address
details.mx_foundbooleanWhether valid MX records exist for the domain
details.smtp_checkbooleanWhether the mailbox accepted the SMTP check
details.is_catchallbooleanWhether the domain accepts all email (catch-all)
details.catchall_scorenumber|null0–100 probability score for deliverability on catch-all domains. null if not catch-all.
details.is_disposablebooleanWhether the address uses a disposable/temporary email provider
details.is_role_accountbooleanWhether the address is a role-based address (e.g., admin@, info@)
details.is_free_providerbooleanWhether 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 StatusMeaning
200Success — result returned
401Unauthorized — missing or invalid API key
422Validation error — invalid email format or missing field
429Rate limit exceeded — slow down requests
500Server error — try again shortly