> ## 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 journeys

> Retrieve a paginated list of journeys for an app, with cursor-based pagination and a lightweight summary representation of each journey.

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

## Overview

Retrieve a list of [Journeys](/docs/en/journeys-overview) for an app. Each journey is returned in a summary representation that includes identity, state, scheduling, and re-entry fields, plus the audience `kind`. Use this list to find a journey `id`. Then fetch [View journey](/reference/view-journey) for the full audience, nodes, and the `concurrency_key` required to update it.

***

## 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.

### Pagination

This endpoint uses forward-only, cursor-based pagination. Journeys are returned newest first.

* Omit `cursor` on the first request.
* Set `limit` to control page size. The default is `50` and the maximum is `50`.
* When more results exist, the response includes `has_more: true` and a `next_cursor` token. Pass that token as the `cursor` parameter on the next request. `cursor` is opaque: send a prior `next_cursor` unchanged. Do not construct it.
* `next_cursor` is omitted once there are no more pages.

```http theme={null}
GET /apps/{app_id}/journeys?limit=50&cursor=NTA=
```

### Response

| Field         | Type    | Description                                                       |
| ------------- | ------- | ----------------------------------------------------------------- |
| `journeys`    | array   | Summary objects, newest first.                                    |
| `has_more`    | boolean | `true` when more journeys exist beyond this page.                 |
| `next_cursor` | string  | Cursor for the next page. Present only when `has_more` is `true`. |

Each journey in the list excludes `description`, `nodes`, `early_exit`, and `concurrency_key`, and includes only the `kind` of its `audience`. Use [View journey](/reference/view-journey) to retrieve the full audience, node configuration, and `concurrency_key`.

### Error responses

| Status | Code                   | Description                                                                                                                             |
| ------ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| 400    | `invalid-cursor`       | The `cursor` value could not be decoded.                                                                                                |
| 403    | `journey-not-entitled` | Journeys are not enabled 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
openapi: 3.1.0
info:
  title: api.onesignal.com
  version: '11.6'
servers:
  - url: https://api.onesignal.com
security:
  - {}
paths:
  /apps/{app_id}/journeys:
    get:
      summary: View journeys
      description: >-
        Retrieve a paginated list of journeys for an app. Returns a summary
        representation of each journey; use [View
        journey](/reference/view-journey) for the full configuration. Uses
        forward-only cursor-based pagination.
      operationId: view-journeys
      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: 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
        - name: cursor
          in: query
          description: >-
            Opaque pagination token from a previous response's `next_cursor`.
            Omit for the first page.
          schema:
            type: string
        - name: limit
          in: query
          description: Maximum journeys to return per page. Minimum `1`, maximum `50`.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 50
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                type: object
                properties:
                  journeys:
                    type: array
                    items:
                      $ref: '#/components/schemas/JourneyListItem'
                    description: Journeys ordered by creation time, newest first.
                  has_more:
                    type: boolean
                    description: '`true` if more journeys exist beyond this page.'
                  next_cursor:
                    type: string
                    description: >-
                      Cursor for the next page. Present only when `has_more` is
                      `true`.
              examples:
                Result:
                  value:
                    journeys:
                      - id: 0a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9
                        app_id: 1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f809
                        name: Welcome series
                        state: active
                        created_at: '2026-06-01T14:00:00Z'
                        updated_at: '2026-06-02T09:30:00Z'
                        started_at: '2026-06-02T09:30:00Z'
                        archived_at: null
                        created_source: public_api
                        schedule: null
                        audience:
                          kind: segment
                        reentry_rules: null
                    has_more: true
                    next_cursor: NTA=
        '400':
          description: '400'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyCodedErrorResponse'
              example:
                errors:
                  - code: invalid-cursor
                    title: Invalid cursor
                    meta: {}
        '403':
          description: '403'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JourneyCodedErrorResponse'
              example:
                errors:
                  - code: journey-not-entitled
                    title: Journeys are not enabled for this app
                    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:
    JourneyListItem:
      type: object
      description: >-
        Summary journey representation returned by the list endpoint. Excludes
        description, nodes, and early-exit configuration, and reduces audience
        to its kind.
      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.
        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.
        schedule:
          $ref: '#/components/schemas/JourneySchedule'
        audience:
          type: object
          description: >-
            Entry audience reduced to its kind. Use [View
            journey](/reference/view-journey) for the full audience
            configuration.
          properties:
            kind:
              type: string
              enum:
                - segment
                - event_trigger
              description: Audience kind.
        reentry_rules:
          $ref: '#/components/schemas/JourneyReentryRules'
    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.
    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.
    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).

````