---
title: "List journeys (v4)"
method: GET
path: "/api/v1/experience/journeys-v4"
tags: ["experience"]
deprecated: true
---

# List journeys (v4)

`GET /api/v1/experience/journeys-v4`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/experience/journeys-v4`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

> **Deprecated.**

Deprecated: use experience.journeys.list.v5 (experience_journeys_list_v5), whose journeys' recording.thumbnailArtifactId names the journey's small thumbnail (kind small_thumbnail), sized for a list row; this version names its thumbnail (kind thumbnail), sized for the campaign overview's replay card, as it did. List Experience journeys (one customer's visit to a website or app), newest first, for one campaign or the whole organization, filtered by website, outcome, friction, device, search, and segment. Each journey's recording stages carry the evaluator's tone for each captured screen: progress, friction, uncertain, failed, or none when not assessed. Page with nextCursor.

## Query parameters

- `limit` integer: Visit groups per page (1–100; default 20). A group holds one journey per device, so a page reads at most 33 groups; pageSize reports the size read
- `cursor` string: Opaque cursor returned as nextCursor or previousCursor by another page
- `campaignId` string, uuid, nullable
- `destinationFingerprint` string, nullable: One campaign website: an id from experience_campaigns_get_v3's destinations; absent or null is every website
- `search` string
- `outcome` 'all' | 'achieved' | 'not-achieved' | 'unavailable' | 'unscored' | 'limited': achieved and not-achieved are a pass and a fail; unavailable is every settled visit with neither verdict (unscored, could not tell, or limited evidence), of which unscored and limited are the narrower parts
- `friction` boolean
- `device` 'desktop' | 'mobile' | 'ios_safari', nullable

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- ExperienceJourneysListV4Response
  - `data` object[], required
    - `runId` string, required
    - `inProgress` boolean, required
    - `executionStatus` 'scheduled' | 'waiting' | 'running' | 'completed' | 'failed' | 'cancelled', nullable, required
    - `visitIdentity` object, nullable, required
      - `key` string, required
      - `scenarioId` string, nullable, required
      - `cycleId` string, nullable, required
      - `cycleCreatedAt` string, date-time, nullable, required
      - `repetition` integer, nullable, required
    - `evidenceDisposition` 'sufficient' | 'insufficient' | 'policy_limited' | 'infrastructure_limited' | 'scenario_mismatch', nullable, required
    - `customerId` string, required
    - `customerName` string, required
    - `customerJobTitle` string, nullable, required: The customer's job title as the visit's scenario froze it; null when it named none
    - `destinationName` string, required
    - `destinationFingerprint` string, nullable, required: The website's id (experience_campaigns_get_v3's destinations[].id, which destinationFingerprint filters by); null for a visit no campaign website holds
    - `browserDevice` 'desktop' | 'mobile' | 'ios_safari', required
    - `agent` 'point11' | 'dots' | 'spark' | 'muse' | 'grok_bot', required: The agent that shopped the visit; point11 (Point11's own shopper) for a visit no campaign planned. Another agent's visit of the same customer, website and device is another row (visitIdentity.key ends in :<agent>)
    - `nativeApp` object, nullable, required
      - `platform` 'ios' | 'android', required
      - `buildId` string, uuid, required
      - `sha256` string, required
      - `appId` string, required
      - `versionLabel` string, required
      - `deviceName` string, required
      - `osVersion` string, required
    - `unavailableReason` string, nullable, required
    - `achieved` boolean, nullable, required
    - `qualityStars` number, nullable, required
    - `completedAt` string, date-time, nullable, required
    - `actionCount` integer, required
    - `durationMs` number, nullable, required
    - `frictionSteps` integer[], nullable, required
    - `recording` object, required
      - `thumbnailArtifactId` string, nullable, required: The journey's stored thumbnail: its first captured screen as a WebP sized for the overview's replay card (kind thumbnail), downloaded with experience_run_artifacts_download_v3; null until it is stored
      - `durationMs` number, nullable, required
      - `stages` object[], required
        - `stepNumber` integer, required
        - `tone` 'progress' | 'friction' | 'uncertain' | 'failed', nullable, required
        - `label` string, required
  - `nextCursor` string, nullable, required
  - `previousCursor` string, nullable, required
  - `totalCount` integer, required
  - `pageSize` integer, required

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
