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"
```