# Verify email address (/api-reference/public-api/verifyEmail)

`POST /v1/verify`

Base URL: `https://next-api.useplunk.com`

Verify an email address for validity, check if it's from a disposable domain or personal email provider, verify MX records, and detect potential typos with suggestions.

## Request body

- `email`: string (email) (required) — Email address to verify

Example:

```json
{
  "email": "user@example.com"
}
```

## Responses

### `200` — Email verification completed successfully

- `success`: boolean — Always true for successful requests
- `data`: object
  - `email`: string (email) (required) — Email address that was verified
  - `valid`: boolean (required) — Whether the email appears to be valid overall
  - `isDisposable`: boolean (required) — Whether the email is from a disposable/temporary email domain
  - `isAlias`: boolean (required) — Whether the email is from a forwarding/alias service
  - `isTypo`: boolean (required) — Whether a potential typo was detected in the email address
  - `isPlusAddressed`: boolean (required) — Whether the email uses plus addressing (contains a + in the local part)
  - `isPersonalEmail`: boolean (required) — Whether the email is from a personal/free email provider (Gmail, Hotmail, Yahoo, etc.)
  - `domainExists`: boolean (required) — Whether the domain exists in DNS (has NS records)
  - `hasWebsite`: boolean (required) — Whether the domain has a website (has DNS A or AAAA records) - informational only
  - `hasMxRecords`: boolean (required) — Whether the domain has MX records configured for email delivery
  - `suggestedEmail`: string (email) — Suggested correction if a typo was detected (optional)
  - `reasons`: array<string> (required) — Array of human-readable reasons describing the verification results

```json
{
  "success": false,
  "data": {
    "email": "user@example.com",
    "valid": false,
    "isDisposable": false,
    "isAlias": false,
    "isTypo": false,
    "isPlusAddressed": false,
    "isPersonalEmail": false,
    "domainExists": false,
    "hasWebsite": false,
    "hasMxRecords": false,
    "reasons": [
      "string"
    ]
  }
}
```

### `401` — Missing or invalid API key.

- `success`: enum (false)
- `error`: object
  - `code`: string — Machine-readable error code, e.g. `VALIDATION_ERROR`, `INVALID_API_KEY`, `IDEMPOTENCY_KEY_REUSED`.
  - `message`: string
  - `statusCode`: integer
  - `requestId`: string — Correlation ID for this request. Include it when contacting support.
  - `errors`: array<object> — Field-level detail, present on validation failures.
    items:
      - `field`: string — Dot-path of the offending field, e.g. `attachments.0.filename`.
      - `message`: string
      - `code`: string — Validation issue code, e.g. `invalid_type`, `too_big`, `reserved_event`.
      - `received`: object — The value that was received, when available.
  - `details`: object — Additional error context.
  - `suggestion`: string — Hint for fixing the request.
- `timestamp`: string (date-time)

```json
{
  "success": false,
  "error": {
    "code": "string",
    "message": "string",
    "statusCode": 0,
    "requestId": "string",
    "errors": [
      {
        "field": "string",
        "message": "string",
        "code": "string",
        "received": null
      }
    ],
    "details": null,
    "suggestion": "string"
  },
  "timestamp": "2026-08-09T17:56:20.204Z"
}
```

### `422` — Request body failed schema validation. `error.errors` lists the offending fields.

- `success`: enum (false)
- `error`: object
  - `code`: string — Machine-readable error code, e.g. `VALIDATION_ERROR`, `INVALID_API_KEY`, `IDEMPOTENCY_KEY_REUSED`.
  - `message`: string
  - `statusCode`: integer
  - `requestId`: string — Correlation ID for this request. Include it when contacting support.
  - `errors`: array<object> — Field-level detail, present on validation failures.
    items:
      - `field`: string — Dot-path of the offending field, e.g. `attachments.0.filename`.
      - `message`: string
      - `code`: string — Validation issue code, e.g. `invalid_type`, `too_big`, `reserved_event`.
      - `received`: object — The value that was received, when available.
  - `details`: object — Additional error context.
  - `suggestion`: string — Hint for fixing the request.
- `timestamp`: string (date-time)

```json
{
  "success": false,
  "error": {
    "code": "string",
    "message": "string",
    "statusCode": 0,
    "requestId": "string",
    "errors": [
      {
        "field": "string",
        "message": "string",
        "code": "string",
        "received": null
      }
    ],
    "details": null,
    "suggestion": "string"
  },
  "timestamp": "2026-08-09T17:56:20.205Z"
}
```

## Example request

```bash
curl -X POST 'https://next-api.useplunk.com/v1/verify' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"email":"user@example.com"}'
```
