Types
Lifecycle
A campaign is a reusable template: you configure it as adraft, publish to lock the config, then start runs against the current recipient list. A finished campaign is terminal — clone it to run again with a fresh recipient set.
- Config
PATCHis accepted while a campaign isdraft,scheduled, orpaused;published,running, and finished campaigns return409.PATCHcan’t changestatus(400— usepublish,startandpause), norcampaign_typeonce the campaign has started (409). startrequires thecampaigns:writescope (no admin role needed), at least one recipient (400otherwise), and the Campaign Engine to be configured (503otherwise). Fromdraftorpublishedit schedules the run; on ascheduledcampaign it is a harmless repeat; on apausedone it resumes. Bound agents must be published.pausestops the campaign starting anything new — no new calls, no new WhatsApp conversations, no reminders. Calls already live finish normally, and replies to recipients who write in are still answered.DELETEremoves the campaign and its recipients. Calls already live finish; WhatsApp conversations stop.- Finished campaigns (
completed/failed/cancelled) are terminal and read-only — re-running in place is disabled so a previous run’s recipients and results can’t be destroyed by accident. cloneduplicates the config into a newdraft(no recipients copied) — the supported way to run a finished campaign again. The clone records its source incloned_from_campaign_id.
Recipients
Recipients are phone numbers (or WhatsApp contacts) plus their per-recipient variables, deduplicated per(campaign, phone). Add them one at a time or bulk-import a CSV or .xlsx file.
Each recipient moves through its own states:
- Voice:
pending→calling→completed/no_answer/failed. A retry waits asscheduleduntil its time, then goes back tocalling. - WhatsApp:
pending→messaged(a conversation is running) →completed/no_response/opted_out/no_call_required/failed. Forwhatsapp_voice, a recipient who should get a call goesscheduled→calling, then ends like a voice recipient. cancelledmeans the recipient was beyondmax_recipients_per_campaignand was never contacted.
Scheduling & retries
Campaigns respect a timezone (the top-leveltimezone, default Asia/Kolkata) and business hours (default Mon–Fri, 09:00–18:00, in that timezone): calls and the first WhatsApp message go out only inside them, except a call the recipient asked for over WhatsApp (now, or at the time they chose). Retries wait for the retry delay, then for business hours. Calls you place through the Calls API go first: while your workspace has API calls waiting, its campaigns don’t start new calls. These keys live under the campaign’s schedule:
Endpoints
Campaigns require the Campaign Engine. Without it configured,
start returns 503; a brief outage doesn’t — the run starts as soon as the engine is back.Campaign lifecycle
How a run executes.
Template + voice-escalation flow.

