Email validation

Check whether addresses can receive mail, and suppress the ones that cannot.

Guides: Email validation.

MethodPathOperationScope
GET/v1/email-validationsList earlier validation resultsread
POST/v1/email-validationsValidate email addresseswrite
GET
/v1/email-validations

Runs in your browser against api.workwae.com with the key you enter. Use a read-only key, limited to a test account if you can.

One item per address a validation request answered, newest first, kept for the deployment's retention period (90 days by default). address keeps those containing it, reachability those with that verdict. Readable whether or not the deployment validates.

Required scope: read.

Query Parameters

address?string
Lengthlength <= 320
reachability?string
Value in"safe""risky""invalid""unknown"
limit?integer
Range1 <= value <= 200
Default50
cursor?string
Length1 <= length <= 512

Response Body

OK

application/json
  1. response
items*array<>
nextCursor*|null
Example Request
curl -X GET 'https://api.workwae.com/v1/email-validations'
Example Response
{  "items": [    {      "id": "c4e6a8b0-1d3f-4a5c-8e7b-9d1f3a5c7e9b",      "createdAt": "2026-05-04T09:30:00.000Z",      "address": "ada@example.com",      "reachability": "safe",      "validSyntax": true,      "domainAcceptsMail": true,      "deliverable": true,      "disabled": true,      "fullInbox": true,      "catchAll": true,      "disposable": true,      "roleAccount": true,      "suppressed": true,      "cached": true,      "checkedAt": "2026-05-04T09:30:00.000Z"    }  ],  "nextCursor": "eyJ0eG5pZCI6IjQyIiwiaWQiOjEwMDF9"}

Validate email addresses

POST
/v1/email-validations

Runs against the live API with the key you enter: this change really happens. Use a key limited to a test account.

Checks whether each address (up to 10) can receive mail, without sending any: syntax, the domain's mail servers and an SMTP conversation with the recipient's server. Takes seconds per address. An address checked within the deployment's cache period (7 days by default) gets that result back, cached, unless refresh is set or it was unknown. The addresses checked again count toward the plan's emailValidationsPerDay; reused results do not, and a request that does not fit is refused whole. On a billed plan with included validation credits, each address checked again also spends one credit (included credits first, then purchased ones; reused results are free), and a request the balance cannot cover is refused whole with 402 validation_credits_exhausted. A request that fails costs no credits. With suppressInvalid, addresses found invalid go on the global suppression list. Every result is kept in the history (GET /v1/email-validations). Needs the write scope; requests are held to a per-minute limit (beyond it, rate_limited with Retry-After).

Required scope: write.

Request Body

application/json
  1. body
addresses*array<>
Items1 <= items <= 10
suppressInvalid?boolean
Defaultfalse
refresh?boolean
Defaultfalse

Response Body

OK

application/json
  1. response
results*array<>
Example Request
curl -X POST 'https://api.workwae.com/v1/email-validations' \  -H 'Content-Type: application/json' \  -d '{  "addresses": [    "ada@example.com"  ]}'
Example Response
{  "results": [    {      "address": "ada@example.com",      "reachability": "safe",      "validSyntax": true,      "domainAcceptsMail": true,      "deliverable": true,      "disabled": true,      "fullInbox": true,      "catchAll": true,      "disposable": true,      "roleAccount": true,      "suppressed": true,      "cached": true,      "checkedAt": "2026-05-04T09:30:00.000Z"    }  ]}