Journeys
Journeys are visual graphs that fire when an event happens (or a player enters a segment). Drag-and-drop graph editor (React Flow) with seven node types.
Node types
| Type | Behavior |
|---|---|
| trigger | Entry — references an event name (or segment_entry). Auto-created from the trigger config. |
| wait | Hold for a duration (duration_ms) OR until an event fires (until_event with timeout). |
| send_message | Render template + provider, enqueue a message_send. |
| condition | Branch on a player trait. Operators: =, !=, >, >=, <, <=, exists. Two outgoing edges (if_true_next, if_false_next). |
| grant_bonus | Issue a bonus template. Optional deposit_amount_source for deposit_match types. |
| call_webhook | HTTP POST to an external URL with Mustache-rendered body + optional HMAC signature. Branches on success / failure. |
| end | Terminal — journey run completes. |
Triggers
Three trigger kinds:
- Event trigger —
trigger.event = "deposit_confirmed". Journey fires for every event matching the name in the project. Optional property filter (trigger.where). - Segment entry —
trigger.segment_id = "..."+trigger.kind = "segment_entry". Fires when a player gains membership in the segment. - Manual / API —
POST /v1/journeys/:id/trigger { player_id }for testing or programmatic kickoff.
Graph constraints
- Max 50 nodes per journey
- Every node must have a unique
id start_node_idmust reference an existing node- Cycles are detected at save time (depth limit = 50)
Wait nodes
Two waiting modes:
{
"id": "wait_24h",
"type": "wait",
"duration_ms": 86400000, // wait fixed duration (24h)
"next": "send_welcome"
}
{
"id": "wait_for_deposit",
"type": "wait",
"until_event": {
"event": "deposit_confirmed",
"timeout_ms": 604800000 // 7 days
},
"next": "send_thanks"
}
until_event is the journey's event-listening primitive — wait up to N ms for the player to do event_name; if timeout fires first, follow next anyway.