---
title: "Bulk email verification"
method: POST
path: "/v1/verify/bulk"
tags: ["Bulk verification"]
---

# Bulk email verification

`POST /v1/verify/bulk`

## Request

- Base URL: `https://api.bounceban.com`
- URL: `https://api.bounceban.com/v1/verify/bulk`
- Auth: API key in header `Authorization`

The API allows you to submit a list of emails for verification in batches. While there is no strict limit on the number of emails you can submit per task, we recommend keeping it under 500,000 emails per task for optimal performance. If you need to submit a larger list, please contact our support team. <br><br>
Additionally, there is a soft limit on the total number of concurrent emails in the verifying state (excluding pending emails from the same task) across all tasks from the same account. This limit is dynamic and depends on the global system load to ensure optimal performance for all users.<br><br>
If you have specific requirements, our support team is available to assist you.

## Request body

- object
  - `emails` string[]: (Required) A list of emails for verification.
  - `name` string: (Optional) The name for the task. If not provided, a task name will be automatically generated.
  - `url` string: (Optional) A webhook target URL specified to receive verification results events in real-time through an HTTP POST request. Each verified email will trigger a separate webhook event. In case of a failed webhook event delivery, the system will attempt to resend the event up to two additional times within a short interval. For those verifying a substantial volume of emails, it's crucial to ensure that your webhook server is equipped to manage the incoming traffic. Services such as ngrok have been known to encounter issues when dealing with a significant number of events due to inherent limitations. We suggest exploring alternative services like TypedWebhook Tools [https://typedwebhook.tools/](https://typedwebhook.tools/) for a more robust solution. Please note that we are not affiliated with this service. > The webhook event will also include the `event-type: bulk.email_verification_finished` header so you can differentiate between different events.<br><br> > Please note that the webhook event payload will be in JSON format. ``` [ { "task_id": "68b167c5d10abc82d391f13f", "status": "success", "email": "dev@bounceban.com", "result": "deliverable", "score": 99, "is_disposable": false, "is_accept_all": false, "is_role": true, "is_free": false, "mx_records": [ "alt1.aspmx.l.google.com", "alt2.aspmx.l.google.com", "alt3.aspmx.l.google.com", "alt4.aspmx.l.google.com", "aspmx.l.google.com" ], "smtp_provider": "Google", "verify_at": "2022-11-16T07:21:24.943Z", } ] ```
  - `url_finished` string: (Optional) A webhook target URL specified to receive task completion events in real-time through an HTTP POST request. A webhook event will be triggered as soon as the whole task is completed. In case of a failed webhook event delivery, the system will attempt to resend the event up to two additional times within a short interval. > The webhook event will also include the `event-type: bulk.task_finished` header so you can differentiate between different events.<br><br> > Please note that the webhook event payload will be in JSON format. ``` { "catchall_count": 2, "credits_consumed": 2.000, "credits_remaining": 1483505.176, "deliverable_count": 0, "id": "68b167c5d10abc82d391f13f", "pushed_count": 2, "risky_count": 2, "status": "finished", "total_count": 2, "undeliverable_count": 0, "unknown_count": 0 } ```
  - `greylisting_bypass` 'auto' | 'speed' | 'robust': (Optional) Configures the retry delay for SMTP verification when an email address is temporarily rejected due to greylisting. Learn more about greylisting here: [https://en.wikipedia.org/wiki/Greylisting_(email)](https://en.wikipedia.org/wiki/Greylisting_(email)).<br>Default is `auto`.<br> > `auto`: The default and recommended setting. This option automatically adjusts the retry delay to balance verification speed with the success rate. We typically use a shorter delay for smaller lists and a longer one for larger lists to optimize performance.<br> > `speed`: Sets the retry delay to approximately one minute. Recommended for small lists (e.g. fewer than 1000 emails) and tasks that are time sensitive. This prioritizes faster results, but it may lead to more emails being flagged as `risky`. Verification can occasionally take longer if greylisting occurs at multiple stages of the SMTP process.<br> > `robust`: Sets the retry delay to approximately five minutes. Recommended for larger lists (e.g. more than 1000 emails) and tasks that are not time sensitive. This prioritizes accuracy and results in fewer `risky` flags for greylisted emails. As with the `speed` option, the total verification time can still be longer if the server greylists multiple SMTP commands.
  - `mode` 'regular' | 'deepverify': (Optional) Verification mode to apply for all the emails in the bulk verification task. Default is `regular`. > `regular`: The default option for email verification. It does not assume that the domain of the email owner's current company website matches the domain of the email being verified.<br> > `deepverify`: DeepVerify operates on the assumption that the domain of the email owner's current company website matches the domain of the email being verified. This assumption can improve the success rate of verifying accept-all emails. However, it is crucial to obtain the domain for the email owner's current company website from a reliable source, such as the email owner's LinkedIn profile or another trustworthy sales prospecting database. Learn more: [https://support.bounceban.com/article/what-is-deepverify](https://support.bounceban.com/article/what-is-deepverify)
  - `disable_catchall_verify` '0' | '1': (Optional) Defaults to `0`. When set to `1`, BounceBan performs only basic SMTP verification. This may leave catch-all emails or those protected by ESGs (Email Security Gateways) unverified. For these addresses, the API will return `result: 'unknown'`, `score: -1`, and the credit cost is 0.

## Response `200`

Indicates the request is successful.

- object
  - `id` string: Unique ID for this bulk verification task. You can use this ID to get the verification result.
  - `credits_remaining` number, float: Credits remaining in your account. `-1` means unlimited. Only returned for some custom plans.

## Other responses

- `400`: Invalid parameter.
- `401`: Authorization information is missing or invalid.
- `403`: Insufficient credits.
- `405`: The account is blocked.
- `429`: Rate limited.
- `500`: Unexpected error.

---

[API](https://skmtc.dev/bounceban/apis/bounceban-apis-reference.md) - [All operations](https://skmtc.dev/bounceban/apis/bounceban-apis-reference/llms.txt) - [OpenAPI document](https://skmtc.dev/bounceban/apis/bounceban-apis-reference/revisions/0f9b503568c3?raw)
