---
title: "Validate"
method: GET
path: "/email/validate"
tags: ["Email"]
---

# Validate

`GET /email/validate`

## Request

- Base URL: `https://api.mixrank.com/v2/json/YOUR_API_KEY`
- URL: `https://api.mixrank.com/v2/json/YOUR_API_KEY/email/validate`
- Auth: none declared

Assesses an email address without guaranteeing deliverability. Cached and fetched assessments are billed separately. Timeout, malformed address, and cache miss return HTTP 200 assessments with validity temp_error, malformed, or uncached, respectively. With webhook, returns HTTP 202 and delivers the result asynchronously.

Required permissions for your API key's user: `email.validate`.

## Query parameters

- `email` string, required
- `timeout` number
- `maxage` integer
- `strategy` 'cached' | 'fetch' | 'strict' | 'besteffort'
- `webhook` string

## Response `200`

Successful response.

- union
  - object
    - `email` string, nullable: The requested email address.
    - `normalized` string, nullable: The normalized email address.
    - `validity` 'valid' | 'ambiguous' | 'maybe_valid' | 'invalid' | 'uncached' | 'malformed' | 'temp_error' | 'perm_error', nullable: <p>Email validity. Possible values are:</p> <ul> <li><code>valid</code>: The email is valid.</li> <li><code>ambiguous</code>: There is not enough information about this email.</li> <li><code>maybe_valid</code>: Similar to <code>ambiguous</code>, but we know it was valid at some point.</li> <li><code>invalid</code>: The email is invalid.</li> <li><code>uncached</code>: Only returned after a strategy of <code>cached</code> didn't find the result.</li> <li><code>malformed</code>: This email address is malformed.</li> <li><code>temp_error</code>: Temporary internal error, please try again later.</li> <li><code>perm_error</code>: Permament error, maybe a misconfigured email server?</li> </ul>
    - `validated_at` string, nullable: When this result was generated.
    - `uses_greylist` boolean, nullable: Whether the recipient domain greylists our probe. Null on cached results (not stored). While the greylist window is still closed the result is inconclusive (<code>validity</code> is <code>ambiguous</code>) and <code>retry_after</code> hints when to retry; once resolved <code>validity</code> is conclusive while this stays true.
    - `retry_after` string, nullable: If greylisted, the earliest time it is worth retrying this address. Null on cached results and when not greylisted.
    - `gateway` string, nullable: Gateway name. Not strictly a SEG, but who is filtering email.
    - `is_disposable` boolean, nullable: Whether the email address is disposable / temporary.
    - `is_consumer` boolean, nullable: Whether the email is b2c (gmail.com, yahoo.com, ...).
    - `is_domain_catchall` boolean, nullable: Whether the email domain is catchall (not this particular address). Might be null for unknown.
    - `mx_records` string[], nullable: List of MX DNS records for the domain
  - object
    - `errors` object, required

## Other responses

- `202`: Webhook request accepted; the result is delivered asynchronously.
- `400`: Invalid parameters or webhook URL.
- `403`: Invalid key or insufficient endpoint permissions.
- `429`: Too many pending webhook requests.
- `500`: Internal API error.
- `503`: Queue unavailable; retry later.

---

[API](https://skmtc.dev/mixrank/apis/mixrank-api.md) - [All operations](https://skmtc.dev/mixrank/apis/mixrank-api/llms.txt) - [OpenAPI document](https://skmtc.dev/mixrank/apis/mixrank-api/revisions/786d3fcfe918?raw)
