---
title: "Get step detail"
method: GET
path: "/api/journey/steps/{step_code}"
tags: ["journey"]
---

# Get step detail

`GET /api/journey/steps/{step_code}`

Get detailed information about a specific journey step. Opening a step for the first time marks it as 'in_progress'.

## Path parameters

- `step_code` string, required

## Response `200`

Successful Response

- JourneyStepDetailResponse — Detailed step response with all contents and phase info.
  - `code` string, required — Step unique code
  - `title` string, required — Step title
  - `description` string, nullable — Step description
  - `icon` string, required — Icon name
  - `status` 'locked' | 'unlocked' | 'in_progress' | 'completed', required — Journey step status constants.
  - `phase_code` string, required — Phase code
  - `phase_name` string, required — Phase display name
  - `background_color_hex` string, required — Background color for the phase
  - `track` string, required — Track/status this step belongs to
  - `contents` union[], required — All contents with completion status
    - union
      - TextContentResponse — Rendered text content.
        - `id` string, required — Content unique identifier
        - `type` 'text'
        - `style` 'title' | 'body', nullable — title or body
        - `text` string, nullable — The text content
        - `metadata` TextContentMetadata
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable — Show only when the patient is at risk on this side
        - `is_completed` boolean — Whether the patient has completed this content
      - ImageContentResponse — Rendered image content.
        - `id` string, required — Content unique identifier
        - `type` 'image'
        - `file_path` string, nullable
        - `variant` 'full', nullable — e.g. full
        - `metadata` ImageContentMetadata
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable — Show only when the patient is at risk on this side
        - `is_completed` boolean
        - `thumbnail` string, nullable — Base64 thumbnail when file_path is present and variant != full
      - VideoContentResponse — Rendered video content.
        - `id` string, required — Content unique identifier
        - `type` 'video'
        - `title` string, nullable
        - `description` string, nullable
        - `url` string, nullable
        - `metadata` VideoContentMetadata
          - `duration_seconds` integer, nullable — Video duration in seconds
          - `video_id` union — Linked internal video id
            - string
            - string, uuid
          - `family_course_episode` integer, nullable — Family-course episode number
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable
        - `is_completed` boolean
      - AudioContentResponse — Rendered audio content.
        - `id` string, required — Content unique identifier
        - `type` 'audio'
        - `title` string, nullable
        - `description` string, nullable
        - `url` string, nullable
        - `metadata` AudioContentMetadata
          - `duration_seconds` integer, nullable — Audio duration in seconds
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable
        - `is_completed` boolean
      - PodcastContentResponse — Rendered podcast content.
        - `id` string, required — Content unique identifier
        - `type` 'podcast'
        - `title` string, nullable
        - `description` string, nullable
        - `url` string, nullable
        - `metadata` PodcastContentMetadata
          - `duration_seconds` integer, nullable — Podcast duration in seconds
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable
        - `is_completed` boolean
      - PdfContentResponse — Rendered pdf content.
        - `id` string, required — Content unique identifier
        - `type` 'pdf'
        - `title` string, nullable
        - `description` string, nullable
        - `file_path` string, nullable
        - `metadata` PdfContentMetadata
          - `editable` boolean, nullable — Whether the PDF is editable
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable
        - `is_completed` boolean
      - MicroGameContentResponse — Rendered micro_game content.
        - `id` string, required — Content unique identifier
        - `type` 'micro_game'
        - `title` string, nullable
        - `description` string, nullable
        - `url` string, nullable
        - `file_path` string, nullable
        - `game_type` string, nullable — micro_game template identifier
        - `metadata` MicroGameContentMetadata
          - `game_type` string, nullable — micro_game template identifier
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable
        - `is_completed` boolean
        - `responses` object, nullable — Saved user variables once completed
        - `responses_completed_at` string, nullable — ISO datetime of completion
      - QuestionnaireContentResponse — Rendered questionnaire content.
        - `id` string, required — Content unique identifier
        - `type` 'questionnaire'
        - `title` string, nullable
        - `description` string, nullable
        - `url` string, nullable
        - `file_path` string, nullable — Path to the questionnaire PDF
        - `metadata` QuestionnaireContentMetadata
          - `questionnaire_type` string, nullable — Questionnaire identifier
          - `show_when_risk` 'psi' | 'nutri' | 'both', nullable
        - `is_completed` boolean
        - `questionnaire_completed` boolean, nullable — True if the patient already filled it
  - `completed_at` string, nullable — ISO datetime when the step was completed (from progress or milestone)
  - `event_date` string, nullable — ISO date when the underlying event occurred

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/corabea/apis/corabea-api.md) · [All operations](https://skmtc.dev/corabea/apis/corabea-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/corabea/corabea-api/revisions/13c1bce1bdc4/schema)
