How do I verify a single email with the API?

Last updated May 19, 2026API

Single-email verification is one POST request. Send the address, get the result. Note: API access requires a first credit purchase to unlock — see "How do I get an API key" for details.

curl

bash
curl -X POST https://api.validemailchecker.com/v1/verify \
  -H "Authorization: Bearer VEC_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"email": "john@example.com"}'

JavaScript / Node

javascript
const response = await fetch('https://api.validemailchecker.com/v1/verify', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.VEC_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ email: 'john@example.com' }),
});

const result = await response.json();
console.log(result.status); // 'safe', 'invalid', 'disposable', etc.

Python

python
import requests

response = requests.post(
    'https://api.validemailchecker.com/v1/verify',
    headers={
        'Authorization': f'Bearer {VEC_API_KEY}',
        'Content-Type': 'application/json',
    },
    json={'email': 'john@example.com'},
)

result = response.json()
print(result['status'])

What you get back

json
{
  "email": "john@example.com",
  "status": "safe",
  "is_valid": true,
  "is_disposable": false,
  "is_role_account": false,
  "is_catch_all": false,
  "is_free_email": false,
  "mx_found": true,
  "domain": "example.com",
  "risk_score": 5,
  "deliverability": "high",
  "credits_used": 1,
  "verified_at": "2026-05-19T14:23:11Z",
  "reason": "Valid mailbox"
}

The status field is the canonical result: safe, invalid, disposable, catch_all, role_account, spamtrap, disabled, inbox_full, or unknown. risk_score is 0-100 (higher = more risky, inverse of the dashboard confidence score). The other fields give you finer-grained signals so you can make policy decisions inside your application.

Typical patterns

  • Signup form: call /v1/verify inline before allowing the account to be created. If status is disposable or invalid, show an error. If catch_all or role_account, allow but flag in your CRM.
  • Lead enrichment: call asynchronously after a lead lands. Store the status alongside the lead record. Filter campaigns on stored status, not at send time.
  • CRM hygiene: nightly job that re-verifies stale records. Addresses go bad over time, especially work emails after job changes.
For lists, use bulk
If you are processing 50+ addresses at once, hit the bulk endpoint instead of looping single-verify. Bulk is more rate-limit-friendly and gives you a single task ID to poll for completion rather than juggling N concurrent requests.