Skip to the documentation
API

Check an email address

Whether an address is worth sending to, before the first message.

GET/tools/address

Runs any of 2 calls on your workspace.

GET /tools/address

Whether an address is worth sending to, before the first message.

Example

Needs no scope. result is valid, risky, invalid or unknown, and reasons says why: wrong syntax, a domain that takes no mail, a throwaway or shared mailbox, or a likely typo, with the correction in suggestion. With emails:read, workspace adds what this workspace knows about the address.

curl
curl "$OE/tools/[email protected]" -H "$AUTH"
Response
{  "object": "address_check",  "email": "[email protected]",  "normalized": "[email protected]",  "result": "risky",  "reasons": ["typo_suspected"],  "suggestion": "[email protected]",  "checks": {    "syntax": true,    "mx": { "status": "found", "hosts": ["mx.gmial.com"] },    "nullMx": false,    "disposable": false,    "role": false,    "freeProvider": false,    "mailbox": null  },  "workspace": { "suppressed": false, "lastBouncedAt": null, "lastDeliveredAt": null },  "checkedAt": "2026-10-11T09:41:00.000Z"}

An address whose syntax is wrong is not an error. It answers 200 with result set to invalid.

deep=true also asks whether the mailbox exists, in checks.mailbox. It needs emails:send and is billed per address through pay as you go. With pay as you go off it is a 409 deep_check_unavailable, and nothing is billed.

Check a list

POST /tools/addresses takes up to 100 addresses in emails and answers with one check for each, in the order they were sent. deep applies to all of them.

curl
curl -X POST "$OE/tools/addresses" -H "$AUTH" -H "Content-Type: application/json" \  -d '{ "emails": ["[email protected]", "[email protected]"] }'
Response
{  "object": "list",  "data": [    { "object": "address_check", "email": "[email protected]", "result": "valid", "reasons": [] },    { "object": "address_check", "email": "[email protected]", "result": "risky", "reasons": ["role_address"] }  ]}

More than 100 addresses, or none, is a 422 invalid_parameter on emails.

Reference