---
agentTools:
  projectIndex: https://validto.readme.io/llms.txt
---

# Create a bulk validation list

The email lists in a CSV file format can be uploaded using this endpoint. Your list can have additional data columns and are preserved and downloaded along with the result. Our system analyses your uploaded list automatically and identifies all disposable, syntax and spam trap emails. You can verify your list by enabling auto_verify or else using start endpoint to start verification. Once our system verifies your list, you can easily download your verification result.

> 🚧 Limits
>
> In our Bulk Validation API, you can manage up to 500 lists awaiting verification and concurrently verify up to 100 lists.

## Response

```json
HTTP/1.1 200 OK
{
   "job_id": "pb49raml26hlkyuaykopl6wtg58k6vssq5t0w",
   "success": true,   
   "message": "Bulk email verification list has been created"
}
```

## Response Parameters

| Parameter       | Type           | Description                                                 |
| :-------------- | :------------- | :---------------------------------------------------------- |
| **`"job_id"`**  | \[string]      | The job\_id corresponding to the list you have been created |
| **`"success"`** | \[true, false] | Whether the API request call was successful or not.         |
| **`"message"`** | \[string]      | Describes API result                                        |

## Other responses

The response you get when the API key is invalid:

```json
HTTP/1.1 401 Unauthorized
{   
   "result":"Invalid API Key",
   "success": false
}
```

The response you get when the auto\_verify is enabled:

```json
HTTP/1.1 200 OK
{
   "job_id": "pb49raml26hlkyuaykopl6wtg58k6vssq5t0w",
   "success": true,   
   "message": "Bulk email verification list has been created"
}
```

The response you get when you provide the incorrect file format:

```json
HTTP/1.1 400 BadRequest
{
   "result": "Invalid file data",
   "success": false
}
```

The response you get when you exceed the maximum limit of list uploads.

```json
HTTP/1.1 400 BadRequest
{
    "success": false,
    "message": "The maximum number of lists has been reached."
}
```

The response you get when you hit the maximum limit of concurrent list verifications.

```json
HTTP/1.1 400 BadRequest
{
    "success": false,
    "message": "The maximum number of active verification lists has been reached."
}
```

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Bulk Validation",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.validto.com/v1/"
    }
  ],
  "security": [
    {}
  ],
  "paths": {
    "/bulk": {
      "post": {
        "summary": "Create a bulk validation list",
        "description": "The email lists in a CSV file format can be uploaded using this endpoint. Your list can have additional data columns and are preserved and downloaded along with the result. Our system analyses your uploaded list automatically and identifies all disposable, syntax and spam trap emails. You can verify your list by enabling auto_verify or else using start endpoint to start verification. Once our system verifies your list, you can easily download your verification result.",
        "operationId": "create-a-bulk-validation-list",
        "parameters": [
          {
            "name": "apikey",
            "in": "query",
            "description": "API Key that you obtained from your validTo account.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accept",
            "in": "header",
            "schema": {
              "type": "string",
              "default": "application/json"
            }
          },
          {
            "name": "content-type",
            "in": "header",
            "schema": {
              "type": "string",
              "default": "application/json"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "local_file"
                ],
                "properties": {
                  "local_file": {
                    "type": "string",
                    "description": "The bulk email list to be upload in .csv format",
                    "format": "binary"
                  },
                  "auto_verify": {
                    "type": "boolean",
                    "description": "Auto verify allows to start verification instantly"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n   \"job_id\": \"pb49raml26hlkyuaykopl6wtg58k6vssq5t0w\",\n   \"success\": true,   \n   \"message\": \"Bulk email verification list has been created\"\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "job_id": {
                      "type": "string",
                      "example": "pb49raml26hlkyuaykopl6wtg58k6vssq5t0w"
                    },
                    "success": {
                      "type": "boolean",
                      "example": true,
                      "default": true
                    },
                    "message": {
                      "type": "string",
                      "example": "Bulk email verification list has been created"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "x-readme": {
          "code-samples": [
            {
              "language": "go",
              "code": "New! Keyboard shortcuts … Drive keyboard shortcuts have been updated to give you first-letters navigation\ngo_API_bulk_upload.go\npackage main\n\nimport (\n  \"fmt\"\n  \"bytes\"\n  \"mime/multipart\"\n  \"os\"\n  \"path/filepath\"\n  \"io\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n\n  // Replace API_KEY with your API Key\n  url := \"https://api.validto.com/v1/bulk/apikey=API_KEY\"\n  method := \"POST\"\n\n  payload := &bytes.Buffer{}\n  writer := multipart.NewWriter(payload)\n  file, errFile1 := os.Open(\"path/to/file\")\n  defer file.Close()\n  part1,\n        errFile1 := writer.CreateFormFile(\"file_contents\",filepath.Base(\"path/to/file\"))\n  _, errFile1 = io.Copy(part1, file)\n  if errFile1 != nil {\n    fmt.Println(errFile1)\n    return\n  }\n  err := writer.Close()\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n\n  client := &http.Client {\n  }\n  req, err := http.NewRequest(method, url, payload)\n\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n\n  req.Header.Set(\"Content-Type\", writer.FormDataContentType())\n  res, err := client.Do(req)\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  defer res.Body.Close()\n\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  fmt.Println(string(body))\n}"
            },
            {
              "language": "node",
              "code": "var request = require('request');\nvar fs = require('fs');\nvar options = {\n  'method': 'POST',\n  // Replace API_KEY with your API Key\n  'url': 'https://api.validto.com/v1/bulk/apikey=API_KEY',\n  'headers': {},\n  formData: {\n    'local_file': {\n      'value': fs.createReadStream('path/to/file'),\n      'options': {\n        'filename': 'path/to/file',\n        'contentType': null\n      }\n    }\n  }\n};\nrequest(options, function (error, response) {\n  if (error) throw new Error(error);\n  console.log(response.body);\n});",
              "name": "Node"
            },
            {
              "language": "csharp",
              "code": "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Post,\n  // Replace API_KEY with your API Key\n    RequestUri = new Uri(\"https://api.validto.com/v1/bulk?apikey=API_KEY\"),\n    Headers =\n    {\n        { \"Accept\", \"application/json\" },\n    },\n};\nusing (var response = await client.SendAsync(request))\n{\n    response.EnsureSuccessStatusCode();\n    var body = await response.Content.ReadAsStringAsync();\n    Console.WriteLine(body);\n}"
            },
            {
              "language": "php",
              "code": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, array(\n\t// Replace API_KEY with your API Key\n  CURLOPT_URL => 'https://api.validto.com/v1/bulk/apikey={API_KEY}',\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => '',\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 0,\n  CURLOPT_FOLLOWLOCATION => true,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => 'POST',\n  CURLOPT_POSTFIELDS => array('file_contents'=> new CURLFILE('/home/Documents/email_list.csv')),\n));\n\n$response = curl_exec($curl);\n\ncurl_close($curl);\necho $response;\n?>"
            }
          ],
          "samples-languages": [
            "go",
            "node",
            "csharp",
            "php"
          ]
        }
      }
    }
  },
  "x-readme": {
    "headers": [],
    "explorer-enabled": false,
    "proxy-enabled": false
  },
  "x-readme-fauxas": true,
  "_id": "615ea5d6a644b300e1b0011a:615d3dddd53c0100101c45c2"
}
```