Validate multiple email addresses

Use this endpoint to validate up to 30 email addresses at once. This feature requires custom setup. Contact Blueshift Support or your CSM to enable access.

## API at a glance

<EmailValidationAlert />

**Description:** This API allows you to validate multiple email addresses (up to 30) in a single request. It helps you identify risky or invalid addresses before launching campaigns at scale.

<details>
  <summary><strong>Validation logic & best practices</strong></summary>

  <EmailValidationMoreInfo />

</details>

<AuthenticationTestingEmailValidation />

## Things to know before you start

* You can validate **up to 30 email addresses** per request.
* The API returns an array of results with individual validation data.
* Requests exceeding 30 emails will return a `413 Payload Too Large` error.
* The maximum request rate may be limited based on account settings.

## Request parameters

<details>
  <summary><strong>Check out the request parameters</strong></summary>

  ### Bulk validation parameters

  <Table>
    <thead>
      <tr>
        <th>
          Parameter
        </th>

        <th>
          Type
        </th>

        <th>
          Required
        </th>

        <th>
          Description
        </th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          `emails`
        </td>

        <td>
          `string[]`
        </td>

        <td>
          ✅ Yes
        </td>

        <td>
          An array of email addresses to validate. <br> Example: `["[email protected]", "[email protected]"]`<br> (Maximum: 512 characters)
        </td>
      </tr>
    </tbody>
  </Table>
</details>

## Example requests & responses

<details>
  <summary><strong>Request example</strong></summary>

  ```curl
  curl --request POST \
       --url https://api.getblueshift.com/api/v1/emails/bulk_validate \
       --header 'accept: application/json' \
       --header 'authorization: Basic YWNlZDZlNGYxMWExYWVhOTZmNTJkNDg4M2ZmMjI4Mjg6' \
       --header 'content-type: application/json' \
       --data '
  {
    "emails": [
      "[email protected]",
      "[email protected]"
    ]
  }
  '
Response example
{
  "result": [
    {
      "[email protected]": {
        "address": "[email protected]",
        "engagement": {
          "engaging": true,
          "is_bot": false
        },
        "is_disposable_address": false,
        "is_role_address": false,
        "reason": [],
        "result": "deliverable",
        "risk": "low"
      }
    },
    {
      "[email protected]": {
        "address": "[email protected]",
        "engagement": {
          "engaging": false,
          "is_bot": false
        },
        "is_disposable_address": true,
        "is_role_address": false,
        "reason": [
          "disposable"
        ],
        "result": "invalid",
        "risk": "high"
      }
    }
  ]
}
API error responses
Status codeDescriptionExample response
400 Bad RequestMissing or malformed payload.{ "errors": { "emails": ["must be an array of strings"] } }
401 UnauthorizedAPI authentication failed due to an invalid or missing API key.{ "message": "Not authorized" }
403 ForbiddenThe API key does not have sufficient permissions.{ "message": "Permission denied" }
404 Not FoundThe requested API endpoint does not exist.{ "message": "Endpoint not found" }
413 Payload Too LargeMore than 30 email addresses were submitted.{ "message": "You can validate a maximum of 30 emails in one API call." }
429 Too Many RequestsThe request limit has been exceeded.{ "message": "Rate limit exceeded" }
500 Internal Server ErrorAn unexpected server error occurred.{ "message": "Internal Server Error - Please contact support for more information." }
502 Bad GatewayThe server received an invalid response.{ "message": "Bad Gateway - Please retry the request." }
503 Service UnavailableThe service is temporarily unavailable.{ "message": "Service Unavailable - Try again later." }
504 Gateway TimeoutThe server took too long to respond.{ "message": "Gateway Timeout - Retry with exponential backoff." }

Field reference

Response fields
FieldTypeDescription
addressstringThe email address being verified.
did_you_meanstringSuggestion for typos in the domain (if any).
is_disposable_addressbooleantrue if the domain is disposable.
is_role_addressbooleantrue if the address is role-based (e.g., admin@, sales@).
reasonarrayList of reasons why the address may be invalid or risky.
resultstringOne of: deliverable, undeliverable, do_not_send, catch_all, unknown.
riskstringRisk level: low, medium, high, or unknown.
root_addressstringIf the input is an alias, this shows the root address.
engagement.engagingbooleanIndicates if the user shows engagement signals.
engagement.is_botbooleantrue if the address is likely bot-generated.
Reason codes
ReasonDescription
unknown_providerMX provider is not recognized.
no_mxNo MX records found for the domain.
high_risk_domainDomain is flagged as high risk.
subdomain_mailerDomain is a subdomain and not whitelisted.
immature_domainDomain is recently created.
tld_riskTop-level domain is considered risky.
mailbox_does_not_existMailbox does not exist.
mailbox_is_disposable_addressDisposable email address.
mailbox_is_role_addressRole-based email address.
catch_allDomain accepts all addresses (catch-all).
long_term_disposableLong-term disposable address.
failed custom grammar checkFailed ESP-specific formatting rules.
Result types
ResultDescription
deliverableValid and expected to receive emails.
undeliverableInvalid and likely to bounce.
do_not_sendHigh-risk — avoid sending to this address.
catch_allDomain accepts all addresses; validity can't be confirmed.
unknownValidity cannot be determined. See reason for more info.
Language
Credentials
Basic
base64
:
URL
Click Try It! to start a request and see the response here!