Journeys
Build multi-step care programs that guide members through onboarding, treatment plans, and engagement sequences.
Journeys
Journeys let you build multi-step programs that guide members through a series of steps over days, weeks, or months. Each journey is a directed graph of steps — some run in sequence, others in parallel, and some branch based on conditions.
Use journeys for:
- Patient onboarding — Welcome message, insurance verification, intake form, first appointment scheduling
- Chronic care management — Multi-week programs with check-ins, assessments, and escalation paths
- Training programs — Sequential modules with prerequisites and completion tracking
- Re-engagement campaigns — Automated outreach sequences with branching based on member responses
Journey Status
Every journey has a status that controls whether it accepts new enrollments and processes steps:
| Status | What It Means |
|---|---|
| Draft | Being designed. Members cannot be enrolled. |
| Active | Accepting enrollments and processing steps. |
| Paused | Temporarily frozen. No steps advance, but enrolled members remain in place. |
| Archived | Read-only. Historical reference only. |
Creating a Journey
- Go to Journeys in your workspace
- Click New Journey
- Enter a name and optional description
- The journey starts in Draft status — you can design it fully before activating
Once you have added steps and connections, set the journey to Active to begin enrolling members.
Building the Step Graph
A journey is made up of steps connected by edges. Steps are the things that happen; connections control the order.
Step Types
| Type | Purpose |
|---|---|
| Action | Executes a workflow or requires manual completion |
| Wait | Pauses progression until a trigger fires |
| Checkpoint | Gate that requires all required parent steps to complete before proceeding |
| Goal | Terminal step linked to a journey goal |
Adding Steps
- Open your journey
- Click Add Step on the canvas
- Choose the step type
- Configure the step name, trigger, and optional workflow
Connecting Steps
Draw connections between steps to define the order of progression:
- Click a step's output handle and drag to another step's input
- A member moves from one step to the next when the parent step completes and the child step's trigger fires
- You can connect one step to multiple children (branching) or multiple parents to one child (convergence)
Triggers
Each step has a trigger type that controls when it becomes eligible for a member:
| Trigger | How It Works |
|---|---|
| Manual | Requires explicit activation by staff or an AI agent |
| Time Elapsed | Fires a set number of seconds after the previous step completed. Configure the duration in the step settings. |
| Date Relative | Fires relative to a date field on the member's enrollment (e.g., 7 days after enrollment). Configure the field name and offset. |
| Step Completed | Fires when a specific other step completes. Select the target step in the configuration. |
| Tag Match | Fires when the member gains matching labels. Specify which labels to watch for. |
| CEL Expression | Fires when a custom CEL expression evaluates to true. Write the expression in the trigger CEL field. |
The journey's heartbeat periodically checks time-based triggers (Time Elapsed and Date Relative) and advances steps that are ready.
Connections and Conditional Branching
Connections between steps have two important properties:
- Required — When a connection is marked as required, the child step cannot become eligible until this parent completes. Checkpoint steps require all required parents to complete.
- CEL Condition — An optional CEL expression evaluated at runtime. If the condition is false, the edge is not followed — the child step is skipped. This enables conditional branching.
Example: After a screening step, you might have two connections:
- Connection to "Schedule Appointment" with condition
member.data.screening.risk_level == "high" - Connection to "Send Resources" with condition
member.data.screening.risk_level == "low"
The member follows only the branch whose condition matches.
Evaluation Order
When multiple connections leave a step, the order field controls which conditions are evaluated first. Lower numbers are evaluated before higher numbers.
Goals
Goals represent the high-value outcomes of a journey — the end-states you are trying to achieve.
- Goals are linked to goal-type steps in the journey
- Each goal can have an optional monetary value for tracking ROI
- When a member completes a goal step, the goal is marked as achieved
To create a goal:
- Open the journey
- Go to the Goals section
- Click Add Goal
- Enter a name, optional description, and optional value
- Link the goal to a goal-type step in the journey
Enrolling Members
Single Member
- Open the journey
- Go to the Members tab
- Click Add Member
- Search for and select a member
- Click Enroll
The member's enrollment starts immediately. Their first step(s) begin in pending status and advance to eligible once trigger conditions are met.
Bulk Enrollment with a Member Filter
- Click Add Member
- Choose Use a member filter
- Select or create a saved member filter to target a group
- Leave "Auto-enroll" unchecked for a one-time enrollment
- Click Enroll
All members currently matching the filter are enrolled at once.
Auto-Enrollment (Continuous)
Auto-enrollment continuously watches for new members who match a filter and enrolls them automatically.
- Click Add Member
- Choose Use a member filter
- Check Auto-enroll matching members continuously
- Click Enroll
The filter is saved on the journey. On every heartbeat cycle, the system re-evaluates the filter and enrolls any newly matching members who are not already enrolled.
When auto-enroll is active, the Members tab shows which filter is linked. You can change or remove the auto-enroll filter at any time.
You can also set an auto-enroll filter via the API or CLI:
bash
To remove it, set autoEnrollFilterId to null.
Note: Members who were previously unenrolled (canceled) are not automatically re-enrolled, even if they match the filter. This prevents unwanted re-enrollment of intentionally removed members.
Step Progression
Each member's progress through a step follows this lifecycle:
| Status | Meaning |
|---|---|
| Pending | Step exists but prerequisites are not yet met |
| Eligible | All prerequisites are satisfied and trigger conditions are met |
| In Progress | Step has been activated (workflow running, waiting for action) |
| Completed | Step finished successfully |
| Skipped | Bypassed (manual skip or conditional branch not taken) |
| Failed | Step execution failed |
When a step completes, the heartbeat evaluates downstream connections to determine which child steps should become eligible next. If all goal steps are completed, the member's journey is marked as completed.
Monitoring Progress
Viewing Enrolled Members
Open the journey's Members tab to see all enrolled members and their current status. Each enrollment shows:
- Member name
- Enrollment status (active, completed, canceled)
- Current step progress
- Enrollment date
Step Statuses
Click on a member's enrollment to see their step-by-step progress. Each step shows its current status and when it last changed.
Goal Progress
The Goals section shows aggregate progress — how many enrolled members have achieved each goal.
Re-Enrollment
If a member needs to go through a journey again, you can re-enroll them. A new enrollment is created, and the member starts from the beginning with fresh step statuses.
Unenrollment
To remove a member from a journey:
- Open the journey's Members tab
- Find the member's enrollment
- Click Unenroll or Cancel
The enrollment is marked as canceled. The member's progress is preserved for historical reference but no further steps will advance.
Journey Notes
Use the notes field on a journey to document internal context — design decisions, clinical protocols, or operational notes. Notes are visible only to workspace administrators and are not shown to members.
Automation with Actions
Journey lifecycle events can trigger Actions in the event rule system, letting you attach automation to key moments:
| Event | When It Fires |
|---|---|
journey:enrolled | A member is enrolled in a journey |
journey:completed | A member completes a journey |
journey_step:due | A step's trigger time arrives |
journey_step:entered | A member step transitions to in progress |
journey_step:completed | A member step transitions to completed |
See Scheduled Events for more on attaching automation to events.
Tips
- Start with a simple linear journey — Get comfortable with steps and triggers before adding branches.
- Use checkpoints for convergence — When parallel branches need to rejoin, add a checkpoint that requires all parent steps.
- Test in draft mode — Design and review the full step graph before setting the journey to active.
- Use auto-enrollment carefully — Make sure your member filter is specific enough to avoid enrolling the wrong people.
- Monitor failed steps — Check the Members tab regularly for steps that failed and may need manual intervention.
Related Resources
Send an HTML Email Campaign with AI-Powered Reply Handling
Build a complete email campaign with personalized HTML emails and AI-powered reply handling.
Build Your First Workflow — Appointment Reminder
Create an automated appointment reminder workflow that contacts members via SMS and handles rescheduling requests.
Automation
Build automated workflows, event-triggered actions, and scheduled tasks.
All Guides
Browse all available guides