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. startrequires thecampaigns:writescope (no admin role needed), at least one recipient (400otherwise), and the Campaign Engine to be available (503otherwise). It works fromdraft,published,scheduled, orpaused. Bound agents must be published.- 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:
pending → scheduled → calling → completed / no_answer / failed / cancelled
Scheduling & retries
Campaigns respect a timezone and business hours (default Mon–Fri, 09:00–18:00) and apply retry delays between attempts. These keys live under the campaign’sschedule:
Endpoints
Campaigns require the campaign worker and Campaign Engine to be running. Without them,
start/pause return 503.Campaign lifecycle
How a run executes.
Template + voice-escalation flow.

