Campaigns

Work through a list of contacts with call jobs — call windows, pacing, retries and results, from the dashboard or the API.

A campaign is a call job: a list of contacts, a flow to run for each of them, and the rules for when and how fast to call. Each contact becomes a row with its own data, its own outcome and its own recording.

Creating a job

Upload a CSV in the dashboard, or create the job over the API from JSON or CSV — see Call jobs. Every column becomes data the conversation can use, and one default flow can run the whole job, or each row can name its own.

Pacing

executionModesetting

In parallel calls as many rows at once as concurrency allows. One by one finishes each call before starting the next, and can start paused.

maxConcurrentCallssetting

A ceiling for this job, below your workspace concurrency — so one campaign cannot occupy every line.

allowedCallWindowStart / EndHH:mm:ss

Only call inside this daily window. Rows due outside it wait for the next window.

scheduledAtISO 8601

Start the job at a set time rather than immediately.

allowedPhoneNumberslist

The numbers this job may call from.

Retries

Retries are opt-in. Choose which outcomes are retried — busy, no answer, voicemail — how many times, and how long to wait between attempts.

Outcomes

Each row ends with a result: success, no answer, busy, voicemail, rejected, failed, callback requested, not interested, wrong number or temporarily unavailable. Together with the transcript, recording and structured outputs, that is what you export or sync back.

Knowing when it is done

Rather than polling, give the job a completion webhook: one request when every row has finished, with the counts and links to fetch the rows. See Call job completion webhook.

Tip

For a single call triggered by your own system, you do not need a job — use outbound calls.