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

# Validate email addresses

`POST /v1/introspect/email`

## Request

- Base URL: `https://api.zavu.dev`
- URL: `https://api.zavu.dev/v1/introspect/email`
- Auth: HTTP bearer

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.

## Changes

> 80 revisions in range; 1 not diffed.

- **2026-07-23** `7768b9e623c6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/changes/v1/introspect/email/post.md)

---

[API](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api.md) - [All operations](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/revisions/75bc777b0ffb?raw)
