Skip to main content
Campaigns follow a state machine: draft → running ↔ paused ↔ completed. stop is reversible — calling start on a completed campaign restarts it in place, so leads added after the stop can still be dialled without cloning the campaign.
By default nothing moves a campaign to completed on its own — not even dialling every lead. If you turn on automatic stop, a campaign also completes when all its leads are finished. The campaign’s completed_reason tells the two apart: "stopped" (an operator or an API call) or "leads_finished" (automatic).

Start a campaign

Transitions a campaign from draft, paused, or completed to running. The dialer begins placing calls according to the configured dial_mode. Starting a completed campaign is a restart — see Stop a campaign below.
Scope: campaigns:write  |  Status: 200 OK Returns the updated CampaignResponse with status: "running".

Pause a campaign

Transitions a running campaign to paused. The dialer stops placing new calls but in-progress calls continue until completion.
Scope: campaigns:write  |  Status: 200 OK
Campaigns can also be auto-paused by the system when the abandon rate approaches the 3% TRAI cap. When this happens, a campaign.paused webhook fires with source: "abandon_rate_exceeded".

Stop a campaign

Transitions a running or paused campaign to completed, which halts dialing. This is reversible: call start again to restart the campaign in place. The restart clears completed_at, keeps the original started_at, and fires campaign.reopened alongside campaign.started. Only leads still pending with attempts remaining are dialled, so restarting never re-calls anyone already reached — which makes it the right way to dial leads you imported after stopping.
Scope: campaigns:write  |  Status: 200 OK The response and the campaign.completed webhook carry completed_reason / reason "stopped".

Stop automatically when all leads are finished

Off by default. Turn it on for every campaign in Settings → General, or for one campaign with auto_stop:
curl
auto_stop is true, false, or null (follow the Settings switch). Like every campaign edit, it can only be changed while the campaign is not running. A running campaign with the switch on is completed when all of these hold:
  • no lead has work left — nothing pending with attempts remaining (this includes a retry waiting for its time), nothing dialing, connected or callback;
  • nothing has happened for the wait set in Settings (default 30 minutes): no dial started, no lead added, no call ended, no start or resume.
It then has completed_reason: "leads_finished" and fires campaign.completed with reason: "leads_finished". New leads restart it by itself. Add a lead to a campaign that stopped this way (API, CSV, or re-queue) and it goes back to running within about a minute, firing campaign.started and campaign.reopened exactly as a manual restart does. If the restart is refused — for example, no active outbound number — the campaign stays completed, auto_restart_error says why, and it tries again every minute. A campaign stopped with stop never restarts by itself, and neither does one of an organisation that has been deactivated. To keep a campaign that stopped automatically from restarting, call stop on it: it stays completed, keep_stopped becomes true, and no second campaign.completed fires (completed_reason and completed_at still say why and when it completed). start clears keep_stopped. Turning the automatic stop off does not stop campaigns that already stopped this way from restarting for new leads — call stop on them for that.

Errors