Skip to main content
Send bulk email/SMS messages to targeted audiences. A campaign combines a template with an audience.

Headers (every request)

All endpoints include ?o={organization_id} for tenant context.

Concepts

Status Lifecycle

draftscheduledpendingin-progresscompleted

Audience Types

Template Variables

Templates support placeholder variables like {first_name}, {last_name}, etc. These are replaced per-recipient using the recipient model’s getVariableBindings(). The template body is localized per customer’s preferred locale.
1

Create a Template

For i18n, send localized versions via subject_i18n, body_i18n, etc. as objects keyed by locale.

Includes

Filters

2

Create an Audience

The filters object accepts the same filters available on the /customers endpoint (for customers type) or /bookings endpoint (for bookings type).

Includes

3

Create a Campaign

Optional: Schedule or make recurring

4

Preview Draft Messages

Before sending, preview the generated messages (max 10):
Returns a collection of broadcast-messages with variable placeholders resolved per recipient, channels determined (invalid channels auto-removed if customer lacks email/mobile), and content localized.
5

Start the Campaign

Behavior depends on campaign config:The campaign transitions through: scheduledpendingin-progresscompleted.Progress is tracked via sent_count, failed_count, and total_count attributes. These update in real-time (a WebSocket event broadcast-campaigns.updated fires every 5 messages and on completion).

Stop a Campaign

Reverts the campaign to draft and deletes all unsent (pending/draft) messages:

List Campaigns

Filters

Sorting

Includes


List Campaign Messages

Message Attributes

Message Includes


Full Workflow

All endpoints include ?o={organization_id} for tenant context.