Verify a list of addresses

POST/api/v1/verifications
Requires anorganization API keywith the scopeverification:write

Checks whether each address has a mailbox — without sending anything. We ask the recipient's mail server directly, the way a sending server would, and stop before any message is sent.

Uses one check per unique address, taken when the verification starts: this month's plan checks first, then checks you bought, then send credits bought before checks launched (10 credits a check). Duplicates and letter case are removed first, so Ada@x.com and ada@x.com are one address. If you have fewer checks than the list needs, nothing starts and nothing is used: a 402 whose data.quote says how many you need and which pack covers the rest. An address we could not confirm gives its check back. The reply carries X-Mailyte-Checks-Remaining.

Before checks launch on your account, a list is paid in send credits instead, priced by its size, after the list checks your plan includes this month; with too few credits nothing starts (a 402).

Most answers arrive within seconds. Gmail mailboxes are checked at a steady pace, so a large list can take a while; addresses still being checked read pending. Anything we cannot answer within a day is refunded.

Send an Idempotency-Key header so a retried request is never charged twice. Up to 50,000 addresses per verification, and up to 3 running at once.

Parameters

NameInTypeDescription
Idempotency-KeyheaderstringMakes this request safe to retry. Use <app>-<ULID>, such as crm-01JBT8XQ2M9WYC3K4F6R7S8T9V; any other shape is a 422. Send the same key on every retry: a repeat gets the first answer with Idempotency-Replayed: true, a key reused for a different request is a 422, and one still running is a 409 with Retry-After. Keys last 24 hours, per organization.

Request body

  • emailsarray<string>required

    The addresses to check.

  • labelstring

    Your own name for this verification.

Request

POST/api/v1/verifications
curl -X POST 'https://app.mailyte.com/api/v1/verifications' \
  -H 'Authorization: Bearer mk_live_YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "emails": [
      "ada@example.com"
    ]
  }'
The key names its own organization, so no X-Organization-ID header is needed.

Response

Started. Poll the verification until `status` is `finished`.

  • dataobject
    • objectstringverification
    • idstring
    • statusstringrunning | finished | expired | failed

      running until every address has an answer, then finished. expired: the checker could not answer some addresses within a day; they stay pending and their checks or credits were given back.

    • sourcestringlist | contacts | import | campaign | automatic | single

      Where the addresses came from: - list: addresses you sent (1 check each; older runs used send credits). - contacts: your contacts that were never checked (free). - import, campaign: checks we run when you import contacts or start a campaign (free). - automatic: the day's checks of new contacts while Bounce protection is on. - single: the day's one-address checks.

    • labelstring or null
    • totalinteger

      Unique addresses in the run.

    • countsobject

      Always sums to total.

      • validinteger

        The mailbox exists.

      • invalidinteger

        Does not exist, cannot receive mail, or is not an address. Mail to these is refused.

      • riskyinteger

        Throwaway, catch-all or role address: may not reach a person.

      • unknowninteger

        The provider would not confirm either way (Yahoo and AOL never do). Sent as normal.

      • pendinginteger

        Still being checked.

    • credits_chargedinteger

      Send credits this run cost (older runs, or checks paid from credits bought or granted before launch, at 10 credits a check).

    • credits_refundedinteger

      Send credits given back.

    • checks_chargedinteger

      Checks drawn for this run.

    • checks_refundedinteger

      Checks given back (couldn't confirm, or never answered).

    • charge_unitstring or null

      checks, or null for a run paid in send credits.

    • by_mailyteboolean

      True for a free check Mailyte ran on your contacts, such as the one-time check of existing contacts at launch.

    • created_atstring
    • finished_atstring or null

Returned inside the standard envelope.

Errors

StatusWhen
401The API key is missing, unknown, revoked or expired. All four answer identically, on purpose: distinguishing them would confirm which keys exist.
403The key is valid but may not do this: it lacks the required scope, its IP allowlist does not include you, or this endpoint does not accept API keys.
404No such resource in this organization.
422The request was understood but the values were not acceptable.
429Too many requests, or the organization has spent its sending allowance. `Retry-After` says how long to wait.

Every status, with what causes it and what to do, is on the error reference.