Lifecycle
Two paths through it:
draft→sending→completed,failed, orstoppeddraft→scheduled→sending→ …
- Scheduling requires a
scheduled_attimestamp - Recipients can only be added or cleared while
draftorscheduled - Cancelling only works while
scheduled, and returns the broadcast todraft - Stopping only works while
sending. Pending recipients stay pending and are not sent - A
draftorscheduledbroadcast with a CSV upload or contact import still running rejects those changes with422until the import finishes - A
copyingbroadcast rejects them for the same reason, until its recipients have been copied
Add recipients
Two ways, and they produce the same result:CSV upload
Upload a spreadsheet in the dashboard. No code.
Broadcasts API
Create and send programmatically.
Duplicate a broadcast
Duplicate an existing broadcast from the broadcast list or its details page. The copy keeps the template, template parameters, agent, and every recipient with their personalized values, and starts as a newdraft with delivery state reset — no counts, timestamps, or per-recipient results
are carried over.
Large recipient lists are copied in the background. The copy stays in copying until every
recipient has been written, and cannot be edited, sent, or scheduled until then. If the copy
cannot be completed it becomes failed rather than draft.
While a copy is being prepared, the source broadcast is also locked: it cannot be edited, sent,
scheduled, or deleted until the copy finishes.
Metrics
Every broadcast exposes running counts:
Per-recipient status, timestamps, and error messages are available through List individual recipients.
Marketing opt-outs
A contact can tell WhatsApp to stop receiving marketing messages from one of your numbers. Kapso records that per number and enforces it on marketing template sends. Recipients of a marketing broadcast who have stopped get thesuppressed status. Nothing is sent
to them, and they are not charged. They stay out of the sent_count and failed_count
denominators, so delivery and failure rates describe only the messages you actually attempted.
The opt-out applies to marketing templates only. Utility and authentication templates, and
free-form replies inside an open session, are unaffected. It is also scoped to the number the
contact stopped: a broadcast from a different number reaches them normally.
Subscribe to whatsapp.contact.marketing_preference_changed
to mirror these opt-outs into your own system, or check a contact before sending with the
marketing preferences API.
See Marketing opt-outs for the full behavior.

