Launch a campaign's calls
/campaigns /{id} /launch-callsSend the campaign's calls matching a selection. In ai_first mode each call is dialed from the requested time, inside the calling windows, and follows the retry configuration from there. In speed_dial mode a live operator session dials them, and any call waiting on an AI retry is un-scheduled first so the same contact is never dialed twice. Calls the AI is already dialing are skipped. In ai_first mode, contacts already reached (a person answered, or they called in) are skipped too; other finished or cancelled calls are launched again.
Path parameters
idstringrequiredID of the campaign, as returned by
GET /campaigns.
Request body
application/jsonmode"ai_first" | "speed_dial"requiredHow the calls are placed.
"ai_first"The AI agent places the calls, at scheduled_at or as soon as each contact's calling window opens, then follows the campaign's retry configuration.
"speed_dial"A live session in the dashboard: the user who launched it is put through to the first contact who answers. It cannot be scheduled, and only one runs per campaign.
selectionobjectrequiredWhich of the campaign's calls to launch.
scheduled_atstring (date-time)When to place the calls: ISO 8601 in UTC ending in Z, e.g. 2026-11-09T08:30:00Z; offsets such as +01:00 are rejected. Omitted: now. ai_first only: a speed dial session cannot be scheduled.
max_attemptsintegerai_first only. How many more attempts each launched call gets from now, replacing whatever it had left. Defaults to the campaign's max_retry_attempts. With the campaign's call_twice_in_a_row on, the double call counts as 2 of these attempts when both calls happen: with 1, there is no double call.
> 0
Response
200launchednumberCalls launched.
skippedobjectCalls of the selection that were not launched, by reason.
Errors
- 400Invalid request: a field or parameter failed validation
{ "message"?: string, "error"?: string, "bodyErrors"?: {…} } - 402Not enough credits on the organization
{ "error": string, "code": "INSUFFICIENT_BALANCE" } - 404Not found in your organization
{ "error": string } - 409Conflicts with the resource's current state
{ "error": string }
Error bodies carry an error (or message) string; a 400 adds bodyErrors.issues. See Errors.