On this page

POST/tools/validate-email

Validate one email address with layered deliverability checks (format, disposable domain, DNS MX, optional ZeroBounce). Campaign-agnostic — no lead or campaign id required.

Rate class: validate_email (default 60/min). Optional Idempotency-Key (max 128). A replay is stored only for HTTP 200. A 403 insufficient_credits does not stick to the key.

Credits

ModeCredits
mxAlways 0 (format → disposable → DNS MX)
full (default)1 only when the ZeroBounce HTTP API returns a usable status. Cache hits, disabled vendor, errors, and earlier short-circuits → 0

Insufficient balance when a ZeroBounce call is required → 403 insufficient_credits (never HTTP 402), before the vendor call.

Request

POST /tools/validate-email
X-API-Key: sk_live_...
Content-Type: application/json
Idempotency-Key: demo-validate-1
{ "email": "info@acme.com", "mode": "full" }
FieldRequiredNotes
emailYesMax 254
modeNofull (default) or mx

Unknown body keys → 400 validation_error.

Response

{
  "email": "info@acme.com",
  "mode": "full",
  "verdict": "allow",
  "format": { "ok": true },
  "disposable": { "ok": true },
  "mx": { "status": "valid", "domain": "acme.com" },
  "zeroBounce": { "status": "valid", "subStatus": "", "source": "api" },
  "creditsCharged": 1
}
FieldNotes
verdictallow | block | unknown
zeroBounce.sourceapi | cache | disabled | error | skipped
mx.statusvalid | invalid | transient | skipped
creditsCharged0 or 1

Errors

Error codeWhen
validation_errorBad body, unknown keys, or invalid Idempotency-Key
insufficient_creditsmode=full needs a ZeroBounce call and balance is below 1
conflictIdempotency mismatch or in progress
rate_limitedvalidate_email RPM exceeded

MCP

Tool: validate_email.