curl --request POST 'https://api.brightalk.ai/batches' \
--header "Authorization: Bearer $BRIGHTALK_API_KEY" \
--header "Brightalk-Version: 2026-07-16" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: createBatch-example-001" \
--data '{"name":"Renewal reminders","agent_id":"agt_demo_001","contact_ids":["con_demo_001","con_demo_002"]}'const response = await fetch("https://api.brightalk.ai/batches", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BRIGHTALK_API_KEY}`,
"Brightalk-Version": "2026-07-16",
"Content-Type": "application/json",
"Idempotency-Key": "createBatch-example-001",
},
body: JSON.stringify({"name":"Renewal reminders","agent_id":"agt_demo_001","contact_ids":["con_demo_001","con_demo_002"]}),
});
console.log(response.status, await response.json());import os
import requests
response = requests.request(
"POST",
"https://api.brightalk.ai/batches",
headers={
"Authorization": f"Bearer {os.environ['BRIGHTALK_API_KEY']}",
"Brightalk-Version": "2026-07-16",
"Content-Type": "application/json",
"Idempotency-Key": "createBatch-example-001",
},
json={"name":"Renewal reminders","agent_id":"agt_demo_001","contact_ids":["con_demo_001","con_demo_002"]},
)
print(response.status_code, response.json()){
"id": "bat_demo_001",
"status": "draft",
"name": "Renewal reminders",
"agent_id": "agt_demo_001",
"total_recipients": 2,
"pending_recipients": 2,
"queued_recipients": 0,
"in_progress_recipients": 0,
"completed_recipients": 0,
"failed_recipients": 0,
"cancelled_recipients": 0,
"answered_recipients": 0,
"no_answer_recipients": 0,
"busy_recipients": 0,
"created_at": "2026-07-20T01:00:00Z",
"updated_at": "2026-07-20T01:00:00Z",
"scheduled_start_at": "2026-07-20T01:00:00Z",
"calling_window": {
"time_zone": "Asia/Taipei",
"weekdays": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"start_time": "09:00",
"end_time": "18:00"
},
"started_at": "2026-07-20T01:00:00Z",
"paused_at": "2026-07-20T01:00:00Z",
"completed_at": "2026-07-20T01:00:00Z",
"cancelled_at": "2026-07-20T01:00:00Z"
}Create a draft batch
Creates a draft with 1 to 1,000 unique contacts or inline recipients. Exactly one recipient form is accepted. An Idempotency-Key is required and the raw JSON body is limited to 1 MiB. Every response includes Brightalk-Version and X-Request-Id; rate-limited responses also expose the effective bucket counters.
curl --request POST 'https://api.brightalk.ai/batches' \
--header "Authorization: Bearer $BRIGHTALK_API_KEY" \
--header "Brightalk-Version: 2026-07-16" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: createBatch-example-001" \
--data '{"name":"Renewal reminders","agent_id":"agt_demo_001","contact_ids":["con_demo_001","con_demo_002"]}'const response = await fetch("https://api.brightalk.ai/batches", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BRIGHTALK_API_KEY}`,
"Brightalk-Version": "2026-07-16",
"Content-Type": "application/json",
"Idempotency-Key": "createBatch-example-001",
},
body: JSON.stringify({"name":"Renewal reminders","agent_id":"agt_demo_001","contact_ids":["con_demo_001","con_demo_002"]}),
});
console.log(response.status, await response.json());import os
import requests
response = requests.request(
"POST",
"https://api.brightalk.ai/batches",
headers={
"Authorization": f"Bearer {os.environ['BRIGHTALK_API_KEY']}",
"Brightalk-Version": "2026-07-16",
"Content-Type": "application/json",
"Idempotency-Key": "createBatch-example-001",
},
json={"name":"Renewal reminders","agent_id":"agt_demo_001","contact_ids":["con_demo_001","con_demo_002"]},
)
print(response.status_code, response.json()){
"id": "bat_demo_001",
"status": "draft",
"name": "Renewal reminders",
"agent_id": "agt_demo_001",
"total_recipients": 2,
"pending_recipients": 2,
"queued_recipients": 0,
"in_progress_recipients": 0,
"completed_recipients": 0,
"failed_recipients": 0,
"cancelled_recipients": 0,
"answered_recipients": 0,
"no_answer_recipients": 0,
"busy_recipients": 0,
"created_at": "2026-07-20T01:00:00Z",
"updated_at": "2026-07-20T01:00:00Z",
"scheduled_start_at": "2026-07-20T01:00:00Z",
"calling_window": {
"time_zone": "Asia/Taipei",
"weekdays": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"start_time": "09:00",
"end_time": "18:00"
},
"started_at": "2026-07-20T01:00:00Z",
"paused_at": "2026-07-20T01:00:00Z",
"completed_at": "2026-07-20T01:00:00Z",
"cancelled_at": "2026-07-20T01:00:00Z"
}Authorizations
Use a server-side Brightalk API key in the Authorization header.
Headers
Selects the date-based API version. Omission uses the organization’s pinned default.
"2026-07-16"A caller-generated correlation value matching [A-Za-z0-9._:-]{1,64}. Invalid values are replaced.
64^[A-Za-z0-9._:-]{1,64}$A nonsecret key retained for 24 hours. Reuse only for a semantically identical request.
1 - 255^(?=.{1,255}$)[\x21-\x7e](?:[\x20-\x7e]*[\x21-\x7e])?$Body
JSON request body. The raw encoded body is limited to 1 MiB and unknown fields are rejected.
- Option 1
- Option 2
An opaque resource identifier.
1 - 255"agt_demo_001"
1 - 1000 elementsAn opaque resource identifier.
1 - 255["con_demo_001", "con_demo_002"]
Leading and trailing whitespace is trimmed; the remaining value must contain 1–200 characters.
^\s*\S(?:[\s\S]{0,198}\S)?\s*$"Renewal reminders"
Show child attributes
Show child attributes
Response
Draft batch created.
An opaque resource identifier.
1 - 255"bat_demo_001"
draft, scheduled, queued, in_progress, paused, completed, failed, cancelled "Renewal reminders"
An opaque resource identifier.
1 - 255"agt_demo_001"
x >= 02
x >= 02
x >= 00
x >= 00
x >= 00
x >= 00
x >= 00
x >= 00
x >= 00
x >= 00
When the batch was created.
"2026-07-20T01:00:00Z"
When the batch was last updated.
"2026-07-20T01:00:00Z"
The configured earliest start instant.
"2026-07-20T01:00:00Z"
One contiguous daily calling window. The runtime requires end_time to be later than start_time; x-brightalk-end-after-start records that checker-only cross-field rule because standard JSON Schema cannot compare two time strings. This window can only NARROW the organization outbound calling policy configured in the app; calls go out where the two overlap, so a window wider than the policy still dials only during the policy's hours.
Show child attributes
Show child attributes
When dispatch began.
"2026-07-20T01:00:00Z"
When the batch was paused.
"2026-07-20T01:00:00Z"
When the batch reached completion.
"2026-07-20T01:00:00Z"
When the batch was cancelled.
"2026-07-20T01:00:00Z"