> ## Documentation Index
> Fetch the complete documentation index at: https://www.courier.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Journeys Overview

> Build customer messaging experiences with a visual workflow editor, typed data contracts, and step-by-step run inspection.

<Frame>
  <img src="https://mintcdn.com/courier-4f1f25dc/a-HSMbjddDLDpS9a/images/product-journeys-example.jpg?fit=max&auto=format&n=a-HSMbjddDLDpS9a&q=85&s=148e26f06edab8f1fb78c235d77d4735" alt="Product Journeys Example" width="1200" height="706" data-path="images/product-journeys-example.jpg" />
</Frame>

Journeys give you a visual, opinionated interface for building customer messaging experiences. Define your data contract, design your workflow, and let Courier handle the execution logic; timing, branching, enrichment, and delivery across every channel.

You define the shape of the data your journey expects. Courier uses that contract to power autofill and variable hints throughout the editor, and makes the data available to every node in the workflow. When something goes wrong, you can step through an individual run against real production data and see exactly what happened at every node.

## How Journeys Work

A journey is a directed graph of nodes that executes when triggered. You build it visually in the journey editor, publish it, and invoke it from your application or an event stream.

<p align="center"><strong>Trigger → Node → Node → Node → ...</strong></p>

Every journey starts with a **trigger** that defines how users enter the workflow. From there, nodes execute in sequence. Branch nodes can split the flow into multiple paths. The journey continues until all paths reach their end.

## Core Concepts

<CardGroup cols={3}>
  <Card title="Send Node" icon="paper-plane" href="/platform/journeys/channels">
    Deliver messages through email, SMS, push, or inbox
  </Card>

  <Card title="Journey Templates" icon="file-lines" href="/platform/journeys/journey-templates">
    Create notification content inline, scoped to the journey
  </Card>

  <Card title="Branch" icon="code-branch" href="/platform/journeys/nodes/branch">
    Split execution into conditional paths at runtime
  </Card>

  <Card title="Delay" icon="clock" href="/platform/journeys/nodes/delay">
    Pause execution for a duration or until a specific time
  </Card>

  <Card title="Fetch Data" icon="cloud-arrow-down" href="/platform/journeys/nodes/fetch-data">
    Pull data from external services during execution
  </Card>

  <Card title="Throttle" icon="gauge-high" href="/platform/journeys/nodes/throttle">
    Limit how often a user passes through a point in the journey
  </Card>
</CardGroup>

## Journeys vs Send API

The [Send API](/platform/sending/send-message) is the right choice for most notifications. It handles rendering, routing, preferences, and delivery in a single call. You don't need journeys for straightforward transactional messages.

Journeys are for when your messaging involves:

* **Multi-step sequences** with timing between steps (onboarding flows, reminder chains)
* **Conditional logic** that routes users down different paths based on their data or behavior
* **Data enrichment** from external services during execution
* **Rate limiting** to prevent notification fatigue
* **Auditability** where you need to step through exactly what happened for a specific user

|                       | Send API                            | Journeys                          |
| --------------------- | ----------------------------------- | --------------------------------- |
| **Complexity**        | Single call                         | Multi-step workflows              |
| **Data contract**     | None (accepts any payload)          | Typed schema with editor autofill |
| **Timing**            | Immediate (or with delay parameter) | Built-in delays and scheduling    |
| **Conditional logic** | In your code                        | Built-in branching                |
| **Debugging**         | Message logs                        | Step-by-step run inspection       |
| **Best for**          | Transactional messages              | Complex messaging experiences     |

## Getting Started

1. Navigate to [Journeys](https://app.courier.com/journeys) in the Courier app
2. Click **New Journey** and choose a trigger type
3. Add nodes to define your workflow
4. **Publish** the journey to activate it
5. Invoke via API or wait for a Segment event

For a hands-on walkthrough, see [Create Your First Journey](/tutorials/journeys/how-to-create-your-first-journey).

## What's Next

<CardGroup cols={2}>
  <Card title="Starting a Journey" icon="bolt" href="/platform/journeys/invocation">
    Configure API and Segment triggers
  </Card>

  <Card title="Building Your Journey" icon="arrow-progress" href="/platform/journeys/building-journeys">
    Add branching, delays, enrichment, and more
  </Card>

  <Card title="Run Inspection" icon="magnifying-glass" href="/platform/journeys/run-inspection">
    Step through individual runs to debug issues
  </Card>

  <Card title="Multi-Step Onboarding Journey" icon="circle-play" href="/tutorials/journeys/how-to-build-a-multi-step-onboarding-journey">
    Build a journey with branching, delays, and external data
  </Card>
</CardGroup>
