POST /v1/batch · 1 credit per row

Upload a single-column CSV file for bulk email, phone, or IP validation. The job runs asynchronously; poll GET /v1/batch/:id for status.

Request

Content-Type: multipart/form-data

Field Type Required Description
type string email, phone, or ip
file binary Single-column CSV (one value per line, no header)
webhook_url string URL to POST when job completes

CSV format

john@example.com
jane@acme.com
noreply@disposablemail.xyz

No header row. One value per line. UTF-8 encoded.

Response

HTTP 202 Accepted:

{
  "id": "job_01HXYZ123",
  "status": "queued",
  "type": "email",
  "total_rows": 3,
  "processed_rows": 0,
  "result_url": null,
  "created_at": "2024-06-11T10:00:00Z"
}

Example

    curl -X POST https://api.checkharbor.com/v1/batch \
      -H "X-Api-Key: chk_live_..." \
      -F "type=email" \
      -F "file=@emails.csv" \
      -F "webhook_url=https://myapp.com/webhook/checkharbor"
    ```
    const job = await checkharbor.batch.create({
      type: "email",
      rows: ["john@example.com", "jane@acme.com"],
      webhookUrl: "https://myapp.com/webhook/checkharbor",
    });
    console.log(job.id); // "job_01HXYZ123"
    ```
    job = client.batch.create(
        type="email",
        rows=["john@example.com", "jane@acme.com"],
        webhook_url="https://myapp.com/webhook/checkharbor",
    )
    print(job["id"])  # "job_01HXYZ123"
    ```