---
title: "Checks an e-mail address: syntax, whether the domain can actually receive mail, disposable and role-account detection, and typo correction."
method: POST
path: "/v1/email/verify"
tags: ["Validation"]
---

# Checks an e-mail address: syntax, whether the domain can actually receive mail, disposable and role-account detection, and typo correction.

`POST /v1/email/verify`

## Request

- Base URL: `https://api.temsor.com`
- URL: `https://api.temsor.com/v1/email/verify`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

No SMTP probing. Most competitors connect to the target server and try RCPT TO, which sounds thorough but produces a confident-looking number you cannot trust: most servers are catch-all, the big providers refuse to answer, and doing it in bulk gets the probing IP blacklisted. We report only what is provable — whether the domain has a mail exchanger, whether it is a known disposable service, whether the mailbox belongs to a role rather than a person, and whether the domain looks like a typo of a common one (gmial.com → gmail.com). Addresses are also normalised, so Gmail dots and +tags stop creating duplicate signups.

**Credits per call:** 1 · **Operation id:** `email_verify`

## Request body

- object
  - `email` string, required: E-mail address to check.
  - `rejectFreeProviders` boolean
  - `rejectRoleAccounts` boolean

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `input` string, required
    - `normalized` string, nullable, required
    - `localPart` string, nullable, required
    - `domain` string, nullable, required
    - `verdict` 'deliverable' | 'risky' | 'undeliverable' | 'unknown', required
    - `score` number, required
    - `checks` object, required
      - `syntax` boolean, required
      - `domainResolves` boolean, required
      - `hasMailExchanger` boolean, required
      - `disposable` boolean, required
      - `roleAccount` boolean, required
      - `freeProvider` boolean, required
    - `mailExchangers` object[], required
      - `host` string, required
      - `priority` number, required
    - `suggestion` string, nullable, required
    - `reasons` string[], required
  - `meta` object
    - `credits` integer
    - `cached` boolean
    - `requestId` string
    - `durationMs` integer

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `429`: Rate limit exceeded — wait `Retry-After` seconds. The RateLimit headers are sent here too.

---

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