Validation

Validate a batch of email addresses

Check up to 50 addresses for whether they can receive mail, and for the signals that make one worth mailing. Billed per address.

The response publishes a verdict alongside the flags it was drawn from. Branch on the verdict: the two obvious readings of the flags are both wrong — a free-provider address (is_personal) and a role mailbox (is_role_address) are ordinary, deliverable addresses that real customers use, and refusing them would shrink a list for no reason. is_disposable is the only flag that lowers a verdict.

unknown means DNS did not answer in time, so that address was NOT checked. It is a separate value from undeliverable on purpose — acting on the two together deletes live contacts over a network hiccup.

The 50-address ceiling is a latency bound, not a payload one: every distinct DOMAIN in the batch costs a DNS round trip. To validate a whole list, use POST /api/v1/lists/{id}/validation-runs, which runs as a background job.

Requires the validation:write scope — Check whether email addresses can receive mail — this is billed per address.

post/api/v1/email-validations

Request

  • Base URL: https://api.sendly.now
  • URL: https://api.sendly.now/api/v1/email-validations
  • Auth: one of:
    • HTTP bearer
    • API key in cookie better-auth.session_token
    • OAuth 2 (authorization code, authorization URL https://app.sendly.now/api/auth/oauth2/authorize, token URL https://app.sendly.now/api/auth/oauth2/token, scopes: validation:write)

Request body

emailsstring[] required

The addresses to check, at most 50. Every distinct DOMAIN costs a DNS round trip, so this endpoint is bounded by latency rather than payload size — validate a whole list with POST /api/v1/lists/{id}/validation-runs, which is a background job.

Response

One verdict per address, in the order they were given

Changes

No recorded changes to this operation across all 1 revision of this API.