| Audience | Marketers configuring steps in a journey |
| Prerequisites | A journey in draft or edit mode (see Create a journey) |
Journey steps control what happens after a member enters: when they wait, which path they follow, what gets sent, and which values or offers are assigned.
Overview
Add steps to the journey canvas in the order members should encounter them:
- Control timing with Time delay and Hold until.
- Create branches with Segment and A/B Split.
- Send messages or data with Send email, Send SMS, Send push, and Send to destination.
- Assign values or offers with Set variable and Assign coupon.
For entry, exit criteria, scheduling, and activation, see Create a journey.
Control timing
Time delay
The Time delay step holds each member until its delay condition is met. Choose one of four modes:
- Duration — Wait for a fixed period, such as two hours or three days.
- Specific date — Wait until a calendar date and time.
- Date from a profile property — Wait until a date stored on the member's profile, with an optional offset, such as two days before
subscription_renewal_date. - Next matching time — Wait until the next occurrence of a recurring time, such as Monday at 9 AM.
After the delay condition is met, the member advances on the next journey run. For example, with a six-hour schedule, a one-day delay can result in a wait of 24 to 30 hours. See How the schedule affects timing.

A duration shorter than the evaluation interval doesn't cause the journey to run sooner. On an hourly schedule, both a 15-minute delay and a 59-minute delay advance on the next hourly run.
Hold until
The Hold until step holds each member until a condition is met or the maximum hold duration expires. It creates two paths:
- Rule met — The member follows this path when the condition is met.
- Rule not met — The member follows this path when the maximum hold duration expires first.
Define the condition using either:
- Event is performed — Wait for a specific event.
- Criteria is met — Wait for a condition built in the query builder. Criteria can reference profile attributes, traits, audience membership, event history, and related-model data.
Hightouch checks the condition on each journey run, not when the underlying data changes.

Create branches
Segment
The Segment step routes members based on profile attributes, traits, audience membership, event history, or relationships.
Hightouch evaluates branches from top to bottom. A member follows the first branch whose conditions they meet, so branch order matters when conditions overlap.

A/B Split
The A/B Split step divides members across branches by the percentages you set. Assignment is deterministic: Hightouch hashes each member's primary key with a split-specific salt, so a member returns to the same branch on re-entry as long as the split configuration doesn't change.
Configure the number of branches, the percentage assigned to each branch, and the branch names.

Changing branch allocations after activation changes the population assigned under each allocation and can invalidate comparisons between branches.
To measure outcomes by branch:
- Open the A/B Split step.
- Under Measurement configuration, select Create experiment.
- Configure a primary metric, any secondary metrics, and the measurement window.
View results from the A/B Split step or under Intelligence > Experiments. See Experiments.

Send messages or data
Send email, SMS, or push
The Send email, Send SMS, and Send push steps deliver messages directly from Hightouch. They don't create a sync to a downstream messaging tool.
Hightouch must enable direct delivery for your workspace, and each channel must be configured before its step appears. Otherwise, use Send to destination.
To configure a direct message:
- Name the step. Hightouch uses the step name as the message name in reporting.
- Create the message from a template or from scratch.
- For email, configure the subject, preheader, and body.
- Add personalization from profile attributes. In an event-triggered journey, you can also reference properties from the event that triggered entry.
- Preview the message with a profile and send a test message.
- Configure send limits, if needed.
The journey determines which members reach the step and when Hightouch evaluates it. Direct messages don't have a separate audience or schedule, and reporting aggregates performance by message rather than by journey run. Hightouch applies unsubscribe, bounce, and suppression rules before delivery.
Send to destination
The Send to destination step runs a sync when members reach it. Select an existing sync or create one from the step.


Journey syncs run as part of journey evaluation and don't have an independent schedule. Choose the behavior based on what the destination should receive:
| Sync behavior | Use when you want to... | Recommended sync mode |
|---|---|---|
| Trigger | Send a one-time action per member per step | Insert |
| Cohort | Maintain a destination list or audience that reflects current journey membership | Upsert or Mirror |
Configure the sync type and removal behavior under Journey settings, then configure the destination-specific object and how fields map to the destination.



The modes available depend on the destination.
Trigger mode
Use Trigger mode for one-time actions where you want one event per member per step.
| Sync mode | Behavior | Recommendation |
|---|---|---|
| Insert | Members entering or re-entering the step during a run are synced. Previously synced members are ignored. | Recommended |
| Upsert | New and updated members are synced, which can cause duplicate sends. | Not recommended |
| Update | Only previously synced members are updated. New members are ignored unless they already exist in the destination. | Not recommended |
| Mirror | All members who have ever passed through the step are synced every run. | Not recommended |
| Diff | Produces one file per operation: enter, change, and remove. | Not recommended |
Cohort mode
Use Cohort mode to maintain a destination audience or list that reflects current journey membership.
| Sync mode | Behavior | Removal behavior | Recommendation |
|---|---|---|---|
| Upsert | New members sync, and changes to existing members sync. | Members are removed based on journey configuration. | Recommended |
| Mirror | All current members sync every run. | Members are removed based on journey configuration. | Recommended when the destination exposes Mirror and should exactly match journey membership |
| Update | Only existing destination members are updated. New members are ignored. | Members are removed, but deleteMode is usually set to clear (attributes removed, member remains). | Not recommended |
| Insert | New members sync. Changes and removals are ignored. | No removal occurs. | Not recommended |
| Diff | Produces one file per operation. | No removal occurs. | Not recommended |
Avoid deleteMode: do nothing with cohort syncs. Removals won't be applied,
and the destination list will continue to grow.
Retries and sequencing
If a record fails to sync, Hightouch retries it on later runs. A cohort sync retries the record while the member remains in the sync and stops once they're removed by an exit or completion. A trigger sync retries until the record syncs or its expiry window (expire_after) elapses.
Send to destination steps reached during the same journey evaluation are scheduled together at the end of the run. Journeys don't guarantee an order between those syncs. To make one sync happen on a later run, add a Time delay step between them.
Sync templates
You can apply a sync template to reuse destination-specific configuration. The template doesn't control the journey sync type or removal behavior, so changes to those settings must be made on each journey sync.
Destination rules can exclude records at sync time without changing journey membership. If the number of members at the step differs from the number processed by the destination, review the destination rules applied to the sync.
Assign and carry values
Set variable
The Set variable step assigns a value to a journey variable. Later steps can use that value for branching or send it to a destination.
Define variables in the journey's Variables settings, then add Set variable steps where their values should change.


For example, to record whether a member followed a VIP branch and send that value to a destination:
- Define a
vip_uservariable in journey settings. - Add a Segment step that branches on loyalty level.
- On the high-loyalty branch, set
vip_usertotrue. On the remaining branches, set it tofalse. - In a Send to destination step, map
vip_userto a destination field.


After the journey runs, the member details panel shows assigned variable values. Hightouch also writes them to the per-journey JOURNEY_CONTEXT_LOG_<journey_id> table. Query this table to use a journey variable in downstream analysis or audience logic.
The journey UI uses Variables and Set variable. Warehouse log tables and API responses use context variables for the same data.
Assign an offer
Assign coupon
The Assign coupon step assigns a code from a configured coupon pool to each member who reaches it. Use it for promotions that need unique, single-use codes. See Coupon assignment to configure a coupon pool.

Assign coupon steps aren't available in event-triggered journeys. Use audience-based entry when the journey requires coupon assignment.
Next steps
- Test and launch a journey to validate step behavior before activation.
- Coupon assignment to configure coupon pools.
- Warehouse tables reference for journey log and variable schemas.