New to campaigns? Start with Introduction to campaigns for triggers, execution states, and observability basics.
A campaign is a step-based flow over a segment: each step is a node type, and each contact gets its own execution that advances through the flow asynchronously.

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

TypeWhat it does
SENDSends a message via a channel and template. Billing applies per send.
WAITHolds the execution for a fixed duration (hours, days) before the next step.
CONDITIONBranches based on contact attributes or engagement events — for example “opened email?”
AB_TESTSplits the audience across 2–4 variants with configurable weights for side-by-side comparison.
TAGApplies or removes a tag on the contact record.
ENDTerminates the execution for this contact.

Triggers

TriggerWhen it runs
ScheduledStarts at a planned date and time (timezone-aware).
EventStarts when a contact or system event matches a rule — for example “contact created with tag onboarding”.
ManualOperator clicks start from the dashboard.
APIYour backend calls POST /v1/campaigns/{id}/trigger. Configured per campaign in the dashboard.

Campaign states

StateDescription
DRAFTBeing designed in the flow builder — not launched.
SCHEDULEDLaunch time set; waiting to start.
RUNNINGActively processing contact executions.
PAUSEDManually paused by an operator.
PAUSED_ERRORAutomatically paused — provider outage tripped circuit breaker.
PAUSED_BALANCEAutomatically paused — free balance reached €0.
COMPLETEDAll contact executions completed successfully.
COMPLETED_PARTIALAll 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:
StateMeaning
pendingQueued but not yet processed
processingCurrently running through a node
completedReached an END node successfully
failedHit an unrecoverable error
skippedSEND node determined ineligibility — no consent, non-capable device with fallback: none, or channel not approved
On resume, only 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 shows PUBLISHED templates matching the node’s channel + message type. Launch is blocked if any referenced template is in DRAFT or REJECTED state. See Templating.

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.