Skip to main content
Campaigns follow a state machine: draft → running ↔ paused → completed. The stop action is terminal — a stopped campaign cannot be restarted.
  ┌───────┐     start      ┌─────────┐
  │ draft │───────────────▶│ running │
  └───────┘                └────┬────┘

                   pause ↓      ↑ start

                           ┌────┴────┐
                           │ paused  │
                           └────┬────┘

                   stop ↓       │ stop

                          ┌───────────┐
                          │ completed │  (terminal)
                          └───────────┘

Start a campaign

Transitions a campaign from draft or paused to running. The dialer begins placing calls according to the configured dial_mode.
curl -X POST https://api.yotel.in/api/v1/campaigns/{campaign_id}/start \
  -H "Authorization: Bearer yt_live_YOUR_KEY"
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.
curl -X POST https://api.yotel.in/api/v1/campaigns/{campaign_id}/pause \
  -H "Authorization: Bearer yt_live_YOUR_KEY"
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. This is terminal — the campaign cannot be restarted. To resume dialing the same leads, create a new campaign and re-import.
curl -X POST https://api.yotel.in/api/v1/campaigns/{campaign_id}/stop \
  -H "Authorization: Bearer yt_live_YOUR_KEY"
Scope: campaigns:write  |  Status: 200 OK

Errors

StatusCondition
404Campaign not found or belongs to another tenant
409Invalid state transition (e.g., starting an already-running campaign, stopping a completed campaign)