---
title: "Validate an email address"
method: POST
path: "/validate"
tags: ["Validation"]
---

# Validate an email address

`POST /validate`

## Request

- Base URL: `https://api.groundmail.dev`
- URL: `https://api.groundmail.dev/validate`
- Auth: HTTP bearer

Groundmail validation for one address, for example on a signup form: syntax,
whether the domain can receive email, disposable and role addresses, recent hard
bounces across Groundmail, and a typo suggestion for common mailbox providers.
Free, and nothing is sent to the address. Rate limit: 120 requests a minute and
5,000 an hour per API key.

## Request body

- ValidateEmailRequest
  - `email` string, required

## Response `200`

Verdict for the address

- ValidateEmailResponse
  - `email` string, required: The address as checked (trimmed, lowercased)
  - `domain` string, nullable, required
  - `verdict` 'valid' | 'risky' | 'invalid', required: `valid`: nothing wrong found. `risky`: can probably receive email but deserves a second look (disposable, catch-all, likely typo). `invalid`: cannot receive email.
  - `reasons` string[], required: What was found. Invalid: `syntax`, `no_mail_server`, `mailbox_not_found`, `previously_bounced`. Risky: `disposable`, `catch_all`, `possible_typo`. Informational (does not change the verdict): `role`.
  - `suggestion` string, nullable, required: The address with a likely-mistyped domain corrected, or null
  - `disposable` boolean, required: A throwaway-inbox service
  - `role` boolean, required: A team or queue mailbox such as `info@` or `support@`

## Other responses

- `400`: Missing or malformed `email`
- `401`: Missing or invalid API key
- `403`: The credential lacks `emails:send` and `emails:read`
- `429`: Rate limit for this API key reached (`rate_limited`); see `Retry-After`

---

[API](https://skmtc.dev/groundmail/apis/groundmail-api.md) · [All operations](https://skmtc.dev/groundmail/apis/groundmail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/groundmail/apis/groundmail-api/revisions/479821c9fecf?raw)
