> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usebouncer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create batch request

> Verifies one or multiple emails in a batch, offline manner.

If you need to verify multiple email addresses in a batch, you can use our
Batch Email Verification API.

Bouncer distributed infrastructure will make sure to get best possible
results and retry any verification in case one is required.

For example:

```json theme={null}

[
  { "email": "jane@usebouncer.com"},
  { "email": "john@usebouncer.com"}
]


```

Please make sure to store batchId as it will be necessary to check
status and get results for the request.

**Speed**

Default settings allow our customers to verify 100-200k email addresses
per hour, however if your use case requires higher throughput, please let
us know and we will be able to adjust your configuration.

**Rate Limiting**

The Batch Email Verification API is limited to creating up to 60 batches
per minute and 200 requests to other related endpoints.

**Batch size recommendation**

Single batch can process up to 100,000 emails, while recommended size
would be anything between 1000-10000 emails.

This method is recommended when the quality of verification is of a
value as it characterises the best precision of email validation and the
lowest possible amount of “unknown” results.

**CSV format support**

Batch can also be created using txt file, with one email per file, and then results downloaded as csv file.

Example file content

```txt theme={null}
deliverable@sandbox.usebouncer.com
deliverable+2@sandbox.usebouncer.com
deliverable+3@sandbox.usebouncer.com
undeliverable@sandbox.usebouncer.com
```

```bash theme={null}
curl -v https://api.usebouncer.com/v1.1/email/verify/batch\?skip-header\=false \
  --data-binary "@./test.csv" \
  -H "x-api-key: <api-key>" \
  -H 'Content-Type: text/plain'
```

**Integration flow**

There are 2 ways to integrate with batch, using status endpoint or using
callback parameter.

***Using Status Endpoint***

```

title Batch Integration Flow With Status Endpoint

Client->>Bouncer: POST /v1.1/email/verify/batch

loop every 10-30s until status == 'completed'
    Client->>Bouncer: GET /v1.1/email/verify/batch/<ID>
end

Client->>Bouncer: GET
/v1.1/email/verify/batch/<ID>/download?download=all


```

***Using Callbacks***

```

title Batch Integration Flow With Callbacks

Client->>Bouncer: POST /v1.1/email/verify/batch?callback=<YOUR-URL>

Bouncer->>Client: POST <YOUR-URL>

Client->>Bouncer: GET
/v1.1/email/verify/batch/<ID>/download?download=all


```


## OpenAPI

````yaml post /v1.1/email/verify/batch
openapi: 3.0.0
info:
  title: Bouncer
  description: >-
    Bouncer Email Verification API lets you validate email address and verify
    its deliverability, in the way you want.


    It’s easy to integrate, powerful, robust, secure, ultrafast and affordable.


    Let Bouncer handle verification and validation of your email addresses, with
    Real-Time (synchronous), Batch (asynchronous), and a hybrid of those two
    Batch Synchronous end-points.


    If at any time you would need extra support from our side, you can reach us
    by email at :
    [support@usebouncer.com](https://mailto:support@usebouncer.com)
  version: 1.0.0
servers:
  - url: https://api.usebouncer.com
security:
  - apikeyAuth: []
tags:
  - name: domain
    description: >-
      You can use Bouncer’s Domain Verification API to check domain information.


      It can be usefull to verify is domain has valid MX records and if it
      behaves as a "catch all" domain.
paths:
  /v1.1/email/verify/batch:
    post:
      tags:
        - batch
      summary: Create batch request
      description: Verifies one or multiple emails in a batch, offline manner.
      operationId: createBatch
      parameters:
        - name: callback
          in: query
          required: false
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: string
              example:
                - email: john@usebouncer.com
                - email: jenny@usebouncer.com
      responses:
        '200':
          description: OK
          headers:
            Content-Type:
              schema:
                type: string
                example: application/json
          content:
            application/json:
              schema:
                type: object
              example:
                batchId: 4d5fdf6b5ee97c4dbbccbfe1
                created: '2023-03-26T18:08:15.033Z'
                status: queued
                quantity: 2
                duplicates: 0
        '402':
          description: Payment Required
          headers:
            Content-Type:
              schema:
                type: string
                example: application/json
          content:
            application/json:
              schema:
                type: object
              example:
                status: '402'
                error: Payment Required
                message: 1 credits left
components:
  securitySchemes:
    apikeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````