---
title: "Validate email addresses"
method: POST
path: "/v1/introspect/email"
---

# Validate email addresses

`POST /v1/introspect/email`

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).

## Request body

- EmailIntrospectionRequest — Validate one email (`email`) or a batch (`emails`). At most 100 addresses per request across both fields.
  - `email` string — Single email address to validate.
  - `emails` string[] — Batch of email addresses to validate (max 100).

## Response `200`

Validation results, one per submitted address.

- EmailIntrospectionResponse
  - `results` EmailValidationResult[], required — One result per submitted address, in the same order.
    - `email` string, required — The address exactly as submitted.
    - `normalized` string, nullable, required — Lowercased, trimmed form of the address. Null when the syntax is invalid.
    - `domain` string, nullable, required — Domain part of the address. Null when the syntax is invalid.
    - `verdict` 'deliverable' | 'risky' | 'undeliverable', required — Validation verdict. - `deliverable`: nothing suggests the address will bounce. - `risky`: sendable, but a signal predicts elevated bounce/complaint odds (role address, disposable domain, MX-less domain, prior soft bounce). - `undeliverable`: will bounce or is blocked (invalid syntax, dead domain, or the address is on your suppression list after a hard bounce/complaint).
    - `reasons` string[], required — Signals behind the verdict. Empty for a clean `deliverable` address.
  - `summary` object, required
    - `total` integer, required
    - `deliverable` integer, required
    - `risky` integer, required
    - `undeliverable` integer, required

## Other responses

- `400` — Invalid request body (no addresses, or more than 100).
- `401` — Unauthorized.

---

[API](https://skmtc.net/zavudev/apis/zavu-unified-messaging-layer-api.md) · [All operations](https://skmtc.net/zavudev/apis/zavu-unified-messaging-layer-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zavudev/zavu-unified-messaging-layer-api/revisions/eb3dc75cc05b/schema)
