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

# View journey

> Retrieve the full configuration of a single journey by its UUID, including its audience, schedule, and node graph.

<Info>
  **Beta.** The Journeys API is in beta. Endpoints and response fields can still change.
</Info>

## Overview

Retrieve a single [Journey](/docs/en/journeys-overview) by its UUID. The response is the full detail representation, including the journey's `audience`, `schedule`, lifecycle rules, and its `nodes` graph. The [View journeys](/reference/view-journeys) list omits those fields.

Use this fetch as the source of node and branch `id`s and the `concurrency_key` before [Update journey](/reference/update-journey) or [Update journey node](/reference/update-journey-node).

***

## How to use this API

Authenticate with your [App API Key](/docs/en/keys-and-ids). The authenticated key must have permission to view journeys. Find a journey's `id` from the [View journeys](/reference/view-journeys) API or in the dashboard URL when viewing the journey.

The response includes a `concurrency_key`. Treat it as an opaque token: send it back unchanged on a later update. Do not construct, parse, or compare it yourself.

### Journey structure

A journey is an ordered list of `nodes`. Linear nodes (such as `wait` or `send_push`) are siblings in the list and run in order. Branching nodes (`split_range`, `yes_no`, `wait_until`) nest their sub-graphs inline through their `branches` array. Convergence is implicit: after a branching node resolves, flow continues to the next sibling in the parent list.

Server-assigned identifiers on journeys, nodes, and branches (`id`) are read-only. The optional `client_node_id` is a customer-assigned identifier. It is persisted and returned on this endpoint. On create or update, use it to reference a node that does not yet have a server `id`.

### Node kinds

| Kind                                    | Description                                                                  |
| --------------------------------------- | ---------------------------------------------------------------------------- |
| `wait`                                  | Holds the user for a fixed duration.                                         |
| `time_window`                           | Holds the user until the next configured time window opens.                  |
| `send_push` / `send_email` / `send_sms` | Sends a message on the given channel using a template.                       |
| `send_iam`                              | Sends an in-app message.                                                     |
| `send_webhook`                          | Sends a webhook.                                                             |
| `tag`                                   | Assigns key-value tags to the user.                                          |
| `split_range`                           | Routes users into weighted branches.                                         |
| `yes_no`                                | Routes users into a yes or no branch based on a condition.                   |
| `wait_until`                            | Holds the user until a branch condition is met or an expiration timer fires. |

Node fields follow the same schema and validation as [Create journey](/reference/create-journey).

### Error responses

| Status | Code                | Description                                                                                                                             |
| ------ | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| 404    | `journey-not-found` | No journey with that `id` exists for this app.                                                                                          |
| 429    |                     | Rate limit exceeded. Wait the number of seconds in the `Retry-After` header before retrying. See [Rate limits](/reference/rate-limits). |

Coded errors use the shape `{ "errors": [{ "code", "title", "meta" }] }`.


## OpenAPI

````yaml GET /apps/{app_id}/journeys/{id}
openapi: 3.1.0
info:
  title: api.onesignal.com
  version: '11.6'
servers:
  - url: https://api.onesignal.com
security:
  - {}
paths:
  /apps/{app_id}/journeys/{id}:
    get:
      summary: View journey
      description: >-
        Retrieve the full configuration of a single journey by its UUID,
        including its audience and node graph.
      operationId: view-journey
      parameters:
        - name: app_id
          in: path
          description: >-
            Your OneSignal App ID in UUID v4 format. See [Keys &
            IDs](/docs/en/keys-and-ids).
          schema:
            type: string
            default: YOUR_APP_ID
          required: true
        - name: id
          in: path
          description: UUID of the journey to retrieve.
          required: true
          schema:
            type: string
            default: YOUR_JOURNEY_ID
        - name: Authorization
          in: header
          description: >-
            Your App API key with prefix `Key `. See [Keys &
            IDs](/docs/en/keys-and-ids).
          required: true
          schema:
            type: string
            default: Key YOUR_APP_API_KEY
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyDetail'
              examples:
                Result:
                  value:
                    id: 0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9
                    app_id: 1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f809
                    name: Welcome series
                    description: Onboard new users over their first week.
                    state: draft
                    created_at: '2026-06-01T14:00:00Z'
                    updated_at: '2026-06-01T14:00:00Z'
                    started_at: null
                    archived_at: null
                    created_source: public_api
                    audience:
                      kind: segment
                      included_segment_ids:
                        - 3f7c1e90-0000-0000-0000-000000000001
                      excluded_segment_ids: []
                      future_additions_only: false
                    early_exit: null
                    reentry_rules: null
                    schedule: null
                    nodes:
                      - id: 11111111-0000-0000-0000-000000000001
                        kind: send_push
                        template_id: 9a8b7c6d-0000-0000-0000-000000000001
                      - id: 11111111-0000-0000-0000-000000000002
                        kind: wait
                        duration_seconds: 86400
                      - id: 11111111-0000-0000-0000-000000000003
                        kind: send_email
                        template_id: 9a8b7c6d-0000-0000-0000-000000000002
                    concurrency_key: >-
                      dcae4794fee16e450e448e37a6f8d0a5a7335755ff8cc76606e3d04b2f574e46
        '404':
          description: '404'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyCodedErrorResponse'
              example:
                errors:
                  - code: journey-not-found
                    title: Journey not found
                    meta: {}
        '429':
          description: '429'
          headers:
            Retry-After:
              description: >-
                Number of seconds to wait before retrying the request. Always
                emitted on 429 responses.
              schema:
                type: integer
                minimum: 0
components:
  schemas:
    JourneyDetail:
      type: object
      description: Full journey representation returned by the detail and create endpoints.
      properties:
        id:
          type: string
          description: Journey UUID. Read-only.
        app_id:
          type: string
          description: UUID of the app the journey belongs to. Read-only.
        name:
          type: string
          description: Journey name, up to 300 characters.
        description:
          type:
            - string
            - 'null'
          description: >-
            Journey description, up to 1024 characters. Defaults to an empty
            string.
        state:
          type: string
          enum:
            - draft
            - scheduled
            - processing
            - active
            - archived
          description: >-
            Journey state. Read-only. New journeys are created as `draft`.
            `processing` is a transient state while an activation is in
            progress, and `archived` is a journey that has been stopped. Change
            it through the `state` field on [Update
            journey](/reference/update-journey).
        created_at:
          type: string
          description: ISO 8601 creation time. Read-only.
        updated_at:
          type: string
          description: ISO 8601 last-update time. Read-only.
        started_at:
          type:
            - string
            - 'null'
          description: >-
            ISO 8601 time the journey was activated, or `null`. Read-only. May
            stay `null` briefly after you set `state` to `active`: activation is
            enqueued for processing, and `started_at` populates once the journey
            finishes processing and becomes active.
        archived_at:
          type:
            - string
            - 'null'
          description: ISO 8601 time the journey was archived, or `null`. Read-only.
        created_source:
          type:
            - string
            - 'null'
          description: >-
            Origin of the journey, for example `public_api` or `dashboard`.
            Read-only.
        audience:
          $ref: '#/components/schemas/JourneyAudience'
        early_exit:
          $ref: '#/components/schemas/JourneyEarlyExit'
        reentry_rules:
          $ref: '#/components/schemas/JourneyReentryRules'
        schedule:
          $ref: '#/components/schemas/JourneySchedule'
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/JourneyNode'
          description: Ordered list of journey nodes.
        concurrency_key:
          type: string
          description: >-
            Opaque optimistic-concurrency token. Read-only. Pass it back on
            update to guard against overwriting a concurrent change (`409
            journey-stale`). Send it back exactly as read from this response; do
            not construct or parse it.
    JourneyCodedErrorResponse:
      type: object
      description: Error response with a stable machine-readable `code`.
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  Stable, kebab-case error identifier. Does not change once
                  shipped.
              title:
                type: string
                description: Human-readable message. Wording may change between releases.
              meta:
                type: object
                description: Optional structured context. Shape varies by error.
    JourneyAudience:
      oneOf:
        - type: object
          title: segment
          required:
            - kind
          properties:
            kind:
              type: string
              const: segment
            included_segment_ids:
              type: array
              items:
                type: string
              description: Segment UUIDs whose users enter the journey.
            excluded_segment_ids:
              type: array
              items:
                type: string
              description: Segment UUIDs whose users are excluded.
            future_additions_only:
              type: boolean
              description: >-
                When true, only users who newly match the segment after
                activation enter the journey. Defaults to false.
        - type: object
          title: event_trigger
          required:
            - kind
          properties:
            kind:
              type: string
              const: event_trigger
            name:
              type: string
              description: Event name that triggers entry, up to 255 characters.
            attributes:
              $ref: '#/components/schemas/JourneyEventTriggerAttributes'
      description: >-
        The journey entry audience. Either a segment-based or event-triggered
        audience.
    JourneyEarlyExit:
      type:
        - object
        - 'null'
      description: >-
        Conditions that remove a user from the journey before it completes. At
        least one rule must be set under `rules`; an early_exit that configures
        no rule is rejected. Send `null` to remove early exit entirely, or
        `null` for an individual rule to drop just that rule.
      properties:
        rules:
          type: object
          properties:
            on_segment:
              type:
                - object
                - 'null'
              properties:
                included_segment_ids:
                  type: array
                  items:
                    type: string
                  description: Exit when the user enters any of these segments.
            when_not_in_audience:
              type:
                - boolean
                - 'null'
              description: >-
                Exit when the user no longer matches the journey audience.
                Defaults to false.
            on_session:
              type:
                - boolean
                - 'null'
              description: Exit on a new session start. Defaults to false.
            on_event:
              type:
                - object
                - 'null'
              required:
                - name
              properties:
                name:
                  type: string
                  description: Exit when this event occurs. Up to 255 characters.
        tag_on_early_exit:
          type: object
          additionalProperties:
            type: string
          description: Tag key-value pairs applied when a user exits early.
    JourneyReentryRules:
      type:
        - object
        - 'null'
      description: >-
        Controls whether and how soon a user can re-enter the journey. `null`
        means re-entry is not allowed.
      properties:
        duration_seconds:
          type: integer
          minimum: 600
          description: >-
            Minimum seconds before a user can re-enter. Must be at least `600`
            (10 minutes).
    JourneySchedule:
      type:
        - object
        - 'null'
      description: >-
        Optional future start and/or stop time. `null` means no scheduled
        activation.
      properties:
        start_at:
          type:
            - string
            - 'null'
          description: >-
            ISO 8601 start time. Use UTC (`Z` or `+00:00`). Must be at least 5
            minutes in the future.
        stop_at:
          type:
            - string
            - 'null'
          description: >-
            ISO 8601 stop time. Use UTC (`Z` or `+00:00`). Must be in the future
            and later than `start_at`.
        error:
          type:
            - string
            - 'null'
          description: Read-only. Present when a scheduling error occurred.
    JourneyNode:
      oneOf:
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: wait
              description: Holds the user for a fixed duration before continuing.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            duration_seconds:
              type: integer
              description: >-
                Seconds to hold the user. Minimum `60`, maximum `31556952` (1
                year).
              minimum: 60
              maximum: 31556952
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: time_window
              description: Holds the user until the next configured time window opens.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            relative_to:
              type: string
              enum:
                - schedule_in_timezone
                - last_active_time
              description: >-
                `schedule_in_timezone` uses the configured windows;
                `last_active_time` holds relative to the user's last active
                time.
            windows:
              type: array
              items:
                $ref: '#/components/schemas/JourneyTimeWindow'
              description: >-
                One or more time windows. A window with no `day_of_week` applies
                to every day, and is returned in that same day-agnostic form.
                Required when `relative_to` is `schedule_in_timezone`; must be
                omitted when it is `last_active_time`, and is absent from
                responses for those nodes.
            time_zone:
              type: string
              description: >-
                IANA timezone identifier used when the user's timezone is
                unavailable.
            use_user_time_zone:
              type: boolean
              description: When true, uses the user's timezone if available.
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              enum:
                - send_push
                - send_email
                - send_sms
              description: Sends a message on the given channel using a template.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            template_id:
              type: string
              description: UUID of the template to send.
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: send_iam
              description: Sends an in-app message.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            iam_id:
              type: string
              description: UUID of the in-app message to send.
            user_ttl_seconds:
              type: integer
              minimum: 1
              description: Optional time-to-live for the in-app message, in seconds.
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: send_webhook
              description: Sends a webhook.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            webhook_id:
              type: string
              description: UUID of the webhook to send.
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: tag
              description: Assigns key-value tags to the user.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            assignments:
              type: object
              additionalProperties:
                type: string
              description: >-
                Tag key-value pairs to assign. An empty string value removes the
                tag. Keys are limited to 255 characters and values to 1024.
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: split_range
              description: >-
                Routes users into weighted branches that converge to the next
                sibling node.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            randomize_on_entry:
              type: boolean
              description: >-
                When true, assigns each user to a branch at random on entry.
                Defaults to false.
            branches:
              type: array
              items:
                $ref: '#/components/schemas/JourneyBranch'
              description: >-
                Weighted branches. Between 2 and 20. Weights must sum to 100.
                Order determines display order.
              minItems: 2
              maxItems: 20
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: yes_no
              description: Routes users into a yes or no branch based on a condition.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            branches:
              type: array
              minItems: 2
              maxItems: 2
              items:
                $ref: '#/components/schemas/JourneyBranch'
              description: >-
                Exactly two branches. The branch with a `condition` is the "yes"
                branch; the branch without one is the "no" branch.
        - type: object
          required:
            - kind
          properties:
            id:
              type: string
              description: >-
                Server-assigned node UUID. Read-only. Returned on reads; sending
                it on create is rejected with a `400` validation error.
            kind:
              type: string
              const: wait_until
              description: >-
                Holds the user until any branch condition is met, or an optional
                expiration timer fires.
            client_node_id:
              type: string
              description: >-
                Optional client-assigned identifier, unique within the journey.
                Use it to reference this node from elsewhere in the same request
                (for example as `client_node_id` on an `on_notification_action`
                condition). Persisted and returned on reads.
            annotation:
              type: string
              description: >-
                Optional free-text label, up to 255 characters. Stored and
                returned as-is with no effect on journey behavior.
            branches:
              type: array
              items:
                $ref: '#/components/schemas/JourneyBranch'
              description: >-
                Condition branches. At least one required, at most 10. Order
                determines priority.
            expiration:
              type:
                - object
                - 'null'
              properties:
                duration_seconds:
                  type: integer
                  minimum: 60
                  description: >-
                    Seconds to wait before the timer fires. Minimum `60`,
                    maximum `31556952` (1 year).
                  maximum: 31556952
                exits:
                  type: boolean
                  description: >-
                    When true, the user exits the journey when the timer fires;
                    when false, the user continues to convergence.
              description: Optional expiration timer. `null` waits indefinitely.
      description: >-
        A journey node. The `kind` field selects the shape. Branching nodes
        (`split_range`, `yes_no`, `wait_until`) nest their sub-graphs inline via
        `branches[].nodes`.
    JourneyEventTriggerAttributes:
      type: array
      description: >-
        Event attribute matchers, as a list of condition groups. Send a single
        group whose conditions are AND'd together. More than one group is
        rejected.
      items:
        type: array
        items:
          type: object
          required:
            - key
            - operator
          properties:
            key:
              type: string
              description: Event attribute key.
            operator:
              type: string
              enum:
                - equal
                - not_equal
                - less
                - less_or_equal
                - greater_or_equal
                - greater
                - is
                - is_not
                - exists
                - not_exists
                - before
                - after
              description: Comparison operator.
            value:
              type: string
              description: >-
                Value to compare against. Not required for `exists` and
                `not_exists`.
    JourneyTimeWindow:
      type: object
      properties:
        start:
          allOf:
            - $ref: '#/components/schemas/JourneyTimePoint'
          description: When the window opens.
        end:
          allOf:
            - $ref: '#/components/schemas/JourneyTimePoint'
          description: When the window closes.
        day_of_week:
          type: integer
          minimum: 1
          maximum: 7
          description: Day of week, 1 = Monday. Omit to apply the window to every day.
      description: A wall-clock window. Each window must span at least 15 minutes.
    JourneyBranch:
      type: object
      properties:
        id:
          type: string
          description: Server-assigned branch identifier. Read-only.
        condition:
          $ref: '#/components/schemas/JourneyCondition'
        weight:
          type: number
          description: >-
            Branch weight for `split_range` nodes. Weights across a node's
            branches must sum to 100.
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/JourneyNode'
          description: >-
            Nodes run when this branch is taken, before flow converges to the
            next sibling node.
    JourneyTimePoint:
      type: object
      properties:
        hour:
          type: integer
          minimum: 0
          maximum: 23
          description: Hour of day, 0-23.
        minute:
          type: integer
          minimum: 0
          maximum: 59
          description: Minute of hour, 0-59. Defaults to 0.
    JourneyCondition:
      oneOf:
        - type: object
          title: segment_membership
          required:
            - kind
          properties:
            kind:
              type: string
              const: segment_membership
            included_segment_ids:
              type: array
              items:
                type: string
              description: Segment UUIDs the user must belong to.
            excluded_segment_ids:
              type: array
              items:
                type: string
              description: Segment UUIDs the user must not belong to.
        - type: object
          title: on_notification_action
          required:
            - kind
          properties:
            kind:
              type: string
              const: on_notification_action
            action:
              type: string
              enum:
                - received
                - clicked
                - opened
              description: >-
                The notification action to branch on. Which actions apply
                depends on the sending node's channel.
            sending_node_id:
              type: string
              description: >-
                `id` of the sending node this action refers to. Returned on
                reads; accepted on write.
            client_node_id:
              type: string
              description: >-
                Write-only alternative to `sending_node_id`. References the
                sending node by its `client_node_id`, which is resolved to that
                node's `id`.
        - type: object
          title: event_trigger
          required:
            - kind
          properties:
            kind:
              type: string
              const: event_trigger
            name:
              type: string
              description: Event name, up to 255 characters.
            attributes:
              $ref: '#/components/schemas/JourneyEventTriggerAttributes'
            entry_event_match_attributes:
              type:
                - array
                - 'null'
              items:
                type: object
              description: >-
                Match incoming event properties against the journey's entry
                event. Only valid on event-triggered journeys.
      description: A branch condition. The `kind` field selects the shape.

````