Validation

Validate every address on a list

Start a background run over every contact on the list and answer immediately with the run. Poll GET /api/v1/validation-runs/{id} for progress and read the verdicts from its /results page.

This VALIDATES and changes nothing: no membership is unsubscribed, no contact is deleted. What to do about an undeliverable address is your decision, and a run that acted on its own findings would be acting on a DNS lookup that can also answer unknown.

A second run while one is already in flight for the same list is refused with 409 rather than queued: two runs would bill the same addresses twice.

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

post/api/v1/lists/{id}/validation-runs

Request

  • Base URL: https://api.sendly.now
  • URL: https://api.sendly.now/api/v1/lists/{id}/validation-runs
  • 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)

Path parameters

idstring uuid required

Resource id.

Response

The run, accepted and queued

completed_atstring date-time nullable required
created_atstring date-time required
deliverable_countinteger required
failure_reasonstring nullable required

Set only on failed. Prose for an operator; never parse it.

idstring required
list_idstring nullable required
processed_countinteger required

Addresses checked so far. There is deliberately no total: a list changes size while a run walks it, so a denominator captured up front would be wrong by the time you read it.

risky_countinteger required
started_atstring date-time nullable required
status'pending' | 'running' | 'completed' | 'failed' required
undeliverable_countinteger required

Changes

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