docs
Dashboard

REST API / Emails

Verify emails

Check one email or up to 100 in one call. Each gets a status, a confidence score and the date it was checked.

POST/v1/emails/verifyMCP: verify_email
Records
1 enrichment record per email checked
Meters
enrichment records + requests / 5 hrs, records / week
Not checked
0 records

Body parameters

emailstring

One email to verify.

emailsstring[]

Up to 100 emails. Duplicates are checked once.

Send email, emails or both: at most 100 different emails per call. Addresses are lower-cased before checking.

Statuses

statusMeaning
verifiedThe mailbox exists and accepts mail. Safe to send.
catch_allThe domain accepts every address, so this mailbox can't be confirmed. Send with care.
unknownThe check couldn't decide, for example the server timed out or the inbox is full.
invalidThe address doesn't exist or can't receive mail, including bad syntax. Don't send.
nullNot checked: reason says why. Emails past your remaining records come back as not_checked: limit reached.

Response

results, one per email, with email, status, confidence (0 to 1), checked_at, mx_provider (who hosts the mailbox, when known) and reason when it wasn't checked. summary counts each status plus not_checked. Then usage and request_id.

Every email that gets a status counts one enrichment record, on the same meters as enrichment, including emails rejected for bad syntax. A check of the same address from the last 30 days may be reused; it still counts. Emails that weren't checked cost nothing. If no email in the call could be checked, you get 503 unavailable and nothing is counted.

Batches are kept for processing. A call with more than one email is stored for up to 30 days, then deleted. Unless you turn it off in Settings, its work emails may be used as lookups, as the DPA describes.

Errors

StatustypeMeaning
400invalid_requestA value isn't valid. The message names the field in param.
401unauthorizedMissing, invalid, expired or revoked key. See Authentication.
402free_records_exhaustedFree plan: the 1,000 free enrichment records or the 1,000 free data calls are used up.
403forbiddenThe key is read only. Data tools need a key with data access.
429window_fullA five-hour records or requests window is full. See Retry-After and resets_at.
429weekly_limitThe seven-day records limit is reached. Resume after resets_at.
503unavailableVerification is unavailable right now. Nothing was counted. See Retry-After.

Was this page useful? Tell us

cURLTypeScriptPython
curl https://api.leadsets.ai/v1/emails/verify \
  -H "Authorization: Bearer $LEADSETS_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6a3d…" \
  -d '{
    "emails": ["maya@northwind.io", "sales@stackfold.io", "old.address@parcelry.co"]
  }'
Response200 OK
{
  "results": [
    { "email": "maya@northwind.io", "status": "verified",
      "confidence": 0.97, "checked_at": "2026-11-11T09:12:44Z",
      "mx_provider": "google" },
    { "email": "sales@stackfold.io", "status": "catch_all",
      "confidence": 0.5, "checked_at": "2026-11-11T09:12:45Z",
      "mx_provider": "microsoft" },
    { "email": "old.address@parcelry.co", "status": "invalid",
      "confidence": 0, "checked_at": "2026-11-11T09:12:45Z",
      "mx_provider": null }
  ],
  "summary": { "verified": 1, "catch_all": 1, "unknown": 0,
               "invalid": 1, "not_checked": 0 },
  "usage": { "enrich_records_counted": 3, "enrich_records_left_5h": 14997,
             "enrich_requests_left_5h": 74999, "enrich_records_left_week": 74997 },
  "request_id": "req_9b20e4f1a7c3"
}