LeadLeapData
POST/v1/email/validate

Validate email

Syntax, MX, live SMTP handshake, SPF + DMARC, catch-all and disposable detection. Single call.

Send {"email": "..."} for a single address. Bulk via {"emails": ["...", "..."]} is supported but runs sequentially under the hood - for high-throughput jobs, batch client-side and parallelize across the 30 req/min rate limit.

Same llk_ext_* key as /v1/find. No separate scope, no second account.

Parameters

NameTypeRequiredDescription
emailstringoptionalA single email address.
emailsstring[]optionalUp to 100 email addresses for bulk validation.

Example request

curl -X POST https://data.leadleap.net/v1/email/validate \
  -H "Authorization: Bearer $LEADLEAP_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

Example response

{
  "data": {
    "email": "[email protected]",
    "is_valid": true,
    "confidence": "high",
    "reason": null,
    "checks": {
      "syntax": true,
      "domain": true,
      "smtp": true,
      "mx_records": true
    },
    "details": {
      "mx_host": "apple.com",
      "mx_records": ["mx1.mail.icloud.com", "mx2.mail.icloud.com"],
      "smtp_code": "250",
      "has_spf": true,
      "has_dmarc": true,
      "catch_all": false,
      "disposable": false,
      "role_based": false,
      "provider": "apple"
    }
  },
  "meta": {
    "request_id": "req_...",
    "timestamp": "2026-04-25T03:30:00.000Z",
    "elapsed_ms": 412
  },
  "error": null
}

Calls never hard-fail. When neither backend can perform an SMTP probe the response still returns with is_valid: null, confidence: "low", and a reason string explaining why; the rest of the envelope is unchanged.

Bulk responses return an array under data and aggregate counts (valid, invalid, unknown) in meta.