POST
/v1/email/validateValidate 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
| Name | Type | Required | Description |
|---|---|---|---|
| string | optional | A single email address. | |
| emails | string[] | optional | Up 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.