Building flows
Campaigns are built using the dashboard flow builder — a step-based timeline where you add nodes in sequence, with splits for branches. You never need to position or connect nodes manually; the layout is automatic.Campaign API: Triggering, pausing, and resuming campaigns via REST API is available for API-triggered campaigns. Flow design and creation happens exclusively in the dashboard UI. Full API-driven campaign authoring is on the roadmap.
Node types
| Type | What it does |
|---|---|
| SEND | Sends a message via a channel and template. Billing applies per send. |
| WAIT | Holds the execution for a fixed duration (hours, days) before the next step. |
| CONDITION | Branches based on contact attributes or engagement events — for example “opened email?” |
| AB_TEST | Splits the audience across 2–4 variants with configurable weights for side-by-side comparison. |
| TAG | Applies or removes a tag on the contact record. |
| END | Terminates the execution for this contact. |
Triggers
| Trigger | When it runs |
|---|---|
| Scheduled | Starts at a planned date and time (timezone-aware). |
| Event | Starts when a contact or system event matches a rule — for example “contact created with tag onboarding”. |
| Manual | Operator clicks start from the dashboard. |
| API | Your backend calls POST /v1/campaigns/{id}/trigger. Configured per campaign in the dashboard. |
Campaign states
| State | Description |
|---|---|
DRAFT | Being designed in the flow builder — not launched. |
SCHEDULED | Launch time set; waiting to start. |
RUNNING | Actively processing contact executions. |
PAUSED | Manually paused by an operator. |
PAUSED_ERROR | Automatically paused — provider outage tripped circuit breaker. |
PAUSED_BALANCE | Automatically paused — free balance reached €0. |
COMPLETED | All contact executions completed successfully. |
COMPLETED_PARTIAL | All executions finished, but some contacts had failures or skips. |
Execution states
Each contact has its own execution through the flow with a per-contact state:| State | Meaning |
|---|---|
pending | Queued but not yet processed |
processing | Currently running through a node |
completed | Reached an END node successfully |
failed | Hit an unrecoverable error |
skipped | SEND node determined ineligibility — no consent, non-capable device with fallback: none, or channel not approved |
pending executions are re-queued. Completed and failed executions are not retried.
Recovery
If a campaign pauses (PAUSED_ERROR or PAUSED_BALANCE), resolve the root cause first:
- PAUSED_ERROR: Wait for the provider to recover, then resume via the dashboard or
POST /v1/campaigns/{id}/resume. - PAUSED_BALANCE: Top up balance first. Auto-reload fires automatically but does not resume the campaign — you must resume explicitly.
Segments
Segments are saved filter queries over contact fields, tags, and events. Before launch, the flow builder estimates audience size and projected cost (channel + message type pricing) so you can validate reach and budget before committing.Templates in flows
SEND nodes reference a template constrained by channel and message type. The builder only showsPUBLISHED templates matching the node’s channel + message type. Launch is blocked if any referenced template is in DRAFT or REJECTED state. See Templating.
Related
Campaigns API
Trigger, pause, resume, and status endpoints.
Introduction to campaigns
High-level concepts and use cases.
Templating
Template states, versions, and channel constraints.
Contacts
Audience segments and consent.