Skip to content
Campaigns

Launch a campaign's calls

POST/campaigns/{id}/launch-calls

Send 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

Request body

  • mode"ai_first" | "speed_dial"required

    How 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.

  • selectionobjectrequired

    Which 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_attemptsinteger

    ai_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

200
  • launchednumber

    Calls launched.

  • skippedobject

    Calls 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.