Create a batch
userdata key. to is
normalized against the from-number’s country, as on a
single call.
Each recipient’s userdata is a flat map of strings that becomes that
call’s session state ({{userdata.first_name}}). An empty value is dropped, so
the placeholder resolves to nothing. There are no per-recipient overrides of the
agent, number or schedule; a different agent means a different batch.
Batch-level vars is one bag copied onto every call; it is fixed at create.
Fields
agent_version, agent_override, an inline agent or agent_team are also
accepted; see Pinning a version.
A window may cross midnight; days then names the evening it starts on:
21:00–06:00 with days: [5] runs Friday 21:00 to Saturday 06:00.
Daily cap and ramps
dial_daily_cap is {"kind": "fixed", "limit": 200} or a ramp, used to warm up
a caller ID:
start ≥ 1, end >
start, step ≥ 1, interval_days 1–30. A ramp advances only on days the
batch actually dialled (not on closed windows, weekends or pauses), keeps its
progress when edited unless start changes, and is per batch.
Retries
Whether a recipient is retried depends on how the last attempt ended (last_close_reason on the recipient row).
A dial that could not be placed still spends an attempt.
Circuit breaker and credit
A batch stops itself after ten consecutive setup-style failures: carrier faults, configuration problems, platform faults, unmapped endings, and pass-level failures such as an unpublished agent, a deleted number or an account that is no longer ready. Any successful call resets the count. Busy and unanswered calls never count. On trip the batch becomesfailed, failure_reason holds the last
error, and unattempted recipients read as canceled.
Running out of credit stops dialling without failing the batch. It stays
running, spends no attempts, and failure_reason says the workspace is out of
credits. It resumes on its own after a top-up.
Pause, resume, cancel, edit, delete
A disallowed transition is a
409 naming the current status.
Add or remove recipients
POST /v1/calls/batches/{batch_id}/recipients appends up to 10,000 rows to any
batch that is not canceled or failed; a completed batch goes back to
running. Numbers the batch already holds, or repeated in the upload, are
skipped and reported in skipped (row_number is the 1-based position in
your request). The response is {added, skipped, total_recipients}.
POST .../recipients/delete with recipient_ids removes rows that were never
dialled; any other row comes back in rejected.
Watching a batch
GET /v1/calls/batches/{batch_id}:
Statuses
Pinning a version
Creating a batch withagent_version, agent_override, an inline agent or an
agent_team freezes that cast at create, so a republish does not reach it.
PATCHing agent_id clears the frozen cast and returns the batch to the
current published version. The frozen plan is stored on every call, so attach
FAQs by faq_id rather than inline. See
per-call configuration.
Next
Outbound lead qualification
A campaign end to end, from CSV to results.
Call analysis
Summaries, outcomes and structured fields across a batch.