Validate email addresses
Heuristic email validation to run before sending: catches invalid syntax, dead domains (no MX/A records), disposable inboxes, role-based addresses (info@, contacto@, sales@), and addresses already on your project’s suppression list. Use it to clean a list before a broadcast and keep your bounce rate low.
No mailbox-level (SMTP) probe is performed, so a deliverable verdict is not a delivery guarantee — it means no negative signal was found. Treat risky addresses with care and drop undeliverable ones.
Accepts a single email or an emails batch (max 100 per request).
curl --request POST \
--url https://api.zavu.dev/v1/introspect/email \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "maria@example.com"
}
'{
"results": [
{
"email": "maria@example.com",
"normalized": "maria@example.com",
"domain": "example.com",
"verdict": "deliverable",
"reasons": []
},
{
"email": "info@deaddomain.example",
"normalized": "info@deaddomain.example",
"domain": "deaddomain.example",
"verdict": "undeliverable",
"reasons": [
"domain_not_found",
"role_address"
]
},
{
"email": "not-an-email",
"normalized": null,
"domain": null,
"verdict": "undeliverable",
"reasons": [
"invalid_syntax"
]
}
],
"summary": {
"total": 3,
"deliverable": 1,
"risky": 0,
"undeliverable": 2
}
}{
"code": "invalid_request",
"message": "Phone number is invalid",
"details": {}
}{
"code": "invalid_request",
"message": "Phone number is invalid",
"details": {}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Validate one email (email) or a batch (emails). At most 100 addresses per request across both fields.
curl --request POST \
--url https://api.zavu.dev/v1/introspect/email \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "maria@example.com"
}
'{
"results": [
{
"email": "maria@example.com",
"normalized": "maria@example.com",
"domain": "example.com",
"verdict": "deliverable",
"reasons": []
},
{
"email": "info@deaddomain.example",
"normalized": "info@deaddomain.example",
"domain": "deaddomain.example",
"verdict": "undeliverable",
"reasons": [
"domain_not_found",
"role_address"
]
},
{
"email": "not-an-email",
"normalized": null,
"domain": null,
"verdict": "undeliverable",
"reasons": [
"invalid_syntax"
]
}
],
"summary": {
"total": 3,
"deliverable": 1,
"risky": 0,
"undeliverable": 2
}
}{
"code": "invalid_request",
"message": "Phone number is invalid",
"details": {}
}{
"code": "invalid_request",
"message": "Phone number is invalid",
"details": {}
}