Batch Calls
Batch calls let you dial a list of phone numbers through one of your voice agents in a single request. Each recipient can receive personalised variables (name, account number, appointment time, etc.) that your agent’s prompt references via {{key}} placeholders. Batches can run immediately or be scheduled up to 30 days in advance.
Create a batch call
Send a JSON body with the list of recipients. Each recipient needs a phone number in E.164 format. Any extra fields go into dynamic_vars and are injected as dynamic variables for that call.
cURL
TypeScript
Python
The endpoint returns 202 Accepted. The batch starts dialing immediately in the background.
CSV upload (alternative)
You can also upload a CSV file via multipart/form-data. The CSV must have a phone column; all other columns become dynamic_vars.
Caller-ID override
By default each call uses the phone number bound to your agent. Pass phone_number_id to override the caller ID for the entire batch:
Schedule a batch
Set scheduled_at to an ISO 8601 timestamp (RFC 3339) to delay execution. The batch enters scheduled status and starts dialing at the specified time. You can schedule up to 30 days in advance.
cURL
TypeScript
Python
Cancel a batch
Cancel a scheduled or pending batch before it starts dialing. Once a batch is running, it cannot be cancelled.
cURL
TypeScript
Python
Check batch status
Poll the detail endpoint to track progress. The response includes the parent batch and all recipients with their individual status.
cURL
TypeScript
Python
List all batches
Returns all batches in your workspace, newest first.
Batch lifecycle
Each recipient has its own status: pending → dialing → completed or failed.
Webhooks
If your agent has a webhook_url configured, a conversation.completed webhook fires for each call in the batch after it ends. The webhook payload includes the transcript, evaluations, and any data collection fields you configured. See Webhooks for the payload format and signature verification.