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

# Bulk email verification by file

`POST /v1/verify/bulk/file`

## Request

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

You can upload a file in CSV format using this API. The maximum file size allowed is 25MB. The file can contain multiple columns, but only one column will be used for verification. Please ensure that there is a column in the file that includes the emails you want to verify.<br><br>
If you choose to export the verification results using the [/v1/verify/bulk/export](#tag/Bulk-verification/paths/~1v1~1verify~1bulk~1export/post) API, rest assured that all the original columns from the uploaded file will be preserved along with the verification results.

## Request body `multipart/form-data`

- object
  - `name` string: (Optional) The name for the task. If not provided, file name will be used.
  - `email_column` integer: (Optional) Specify the column that contains the emails for verification manually. The first column is labeled as `0`, the second column as `1`, and so on. If this parameter is not set, the system will automatically detect the column by scanning the first 6 rows (including the header), and if email(s) is detected in multiple columns, an error will be returned.
  - `mode_column` integer: (Optional) Specify the column that contains DeepVerify settings for each email. A value of `deepverify`, `yes`, `y`, `1` or `true` in that column will enable DeepVerify for the corresponding email. Columns are zero-indexed (e.g., the first column is 0, the second is 1, and so on).
  - `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.
  - `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 } ```
  - `file` string, binary: (Required) CSV file containing emails for verification. > <span style="color:red">Warning: The `file` parameter must be positioned at the end of all the parameters. If not, other parameters, such as `url_finished` may not function correctly.</span>
  - `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)
