Trigger

ID: trigger · Kind: action The starting node of every workflow. Every campaign has exactly one Trigger.
FieldMeaning
titleDisplay label
typemanual / schedule / webhook / event
Output: trigger metadata (type, payload if any).

Wait

ID: wait · Kind: action Pause the customer in the workflow for a duration.
FieldMeaning
waitTypeduration (relative) or until-date (absolute)
durationMsWait time in ms (when duration)
untilDateISO date (when until-date)
Place a Wait before a Send to avoid hammering the inbox (e.g. 24h–72h between follow-ups).

Conditional Split

ID: conditional-split · Kind: branch Splits the workflow into N branches. Each branch must start with a Path node that guards the condition.
FieldMeaning
branches[]Array { id, label } — describes each branch for UI/analytics

Path

ID: path · Kind: action The node that immediately follows a Conditional Split — guards the condition for entering that branch. If the rule fails, the workflow stops on that branch.
FieldMeaning
rules[]Array of AND conditions
matchany (OR) or all (AND) across rules
Each rule has:
  • input{{...}} expression or value
  • conditionequals, not-equals, greater-than, less-than, contains, not-contains, starts-with, ends-with, empty, not-empty
  • value — right-hand side
“Conditional Split → Path → …” vs edge.when: use Conditional Split when branches converge later; use edge.when for message-outcome branching (replied/clicked/opened).

Exit — Cooldown

ID: exit-cooldown · Kind: action Ends the workflow because the customer isn’t ready yet. Moves them into a cooldown segment + (optional) lowers a fit score.
FieldMeaning
segmentIdCooldown segment — usually static, e.g. “Cooldown — Q1 inactive”
criterionId(Optional) Fit criterion to decay
decayDeltaNegative delta on the score (e.g. -0.2)
The workflow ends with status canceled (cooldown is treated as a reasoned cancellation).

Exit — Handoff

ID: exit-handoff · Kind: action Promote the customer to sales-ready. The “hot” exit.
FieldMeaning
stage(WIP) Stage tag to assign — the stage system isn’t wired yet
claimUserId(Optional) Sales user claims the customer
conversionEvent(Optional) Name of the conversion event logged
The workflow ends with status success — analytics treats this as goal reached.

Exit — Suppress

ID: exit-suppress · Kind: action Hard exit. Flags the contact suppressed → every future automated send skips them.
FieldMeaning
channel(Optional) Suppress on a specific channel — empty = all channels
reasonunsubscribe / bounce / complaint / manual / do_not_contact
Suppression is a hard action. No override. Use only on real unsubscribes, hard bounces, or “do not contact” decisions.