---
title: "Get the coach prep payload for a session"
method: GET
path: "/api/coach/sessions/{sessionId}/prep"
tags: ["Coach Session Prep"]
---

# Get the coach prep payload for a session

`GET /api/coach/sessions/{sessionId}/prep`

## Request

- Base URL: `https://api.production.yourmedley.com`
- URL: `https://api.production.yourmedley.com/api/coach/sessions/{sessionId}/prep`
- Auth: none declared

Returns the composite payload for the Session Prep page (AC4):
session metadata, parsed agenda outline (from MED-784 content),
coach prep state, leader notes, group contexts,
and the AI features flag. Authorization requires the caller to be
assigned to the session's cohort via `cohort_coaches` and the
session's modality (if any) to be coach-led (IV3).

## Path parameters

- `sessionId` string, uuid, required

## Response `200`

Prep payload

- object
  - `success` boolean
  - `data` CoachPrepPayload
    - `session` object
      - `id` string, uuid
      - `title` string
      - `session_number` integer, nullable
      - `scheduled_start` string, date-time, nullable
      - `scheduled_end` string, date-time, nullable
      - `duration_minutes` integer, nullable
      - `cohort_id` string, uuid
      - `cohort_name` string
      - `organization_name` string, nullable
      - `is_live` boolean
      - `prep_unlocked` boolean
    - `agenda` union: MED-976 (E1.3h) — discriminated union. When `mode='authored'` the response carries the authored sections from the e1.3d/e/f model (live_session_delivery flag ON). When `mode='parsed_outline'` it carries the legacy parsed_outline (flag OFF). UI branches on `mode` to pick the renderer. When mode='authored' and `authored.is_incomplete=true` the FE shows a "not yet ready" Alert instead of the agenda.
      - object
        - `mode` 'parsed_outline'
        - `parsed_outline` SessionContentSection[], nullable (unresolved $ref)
        - `unavailable_reason` 'no_content_uploaded' | 'still_processing' | 'failed'
      - object
        - `mode` 'authored'
        - `authored` object
          - `is_incomplete` boolean
          - `incomplete_reasons` object
            - `sections_missing_required_fields` boolean
          - `has_reflection_prompts` boolean
          - `sections` object[]
            - `id` string, uuid
            - `section_name` string, nullable
            - `duration_minutes` integer, nullable
            - `sort_order` integer
            - `participant_prompt` string, nullable
            - `leader_prompts` object[]
              - …
            - `visuals` object[]
              - …
    - `prep` CoachSessionPrep
      - `id` string, uuid
      - `coach_user_id` string, uuid
      - `session_id` string, uuid
      - `marked_reviewed_at` string, date-time, nullable
      - `rsvp_status` 'pending' | 'accepted' | 'declined' | 'tentative'
      - `rsvp_responded_at` string, date-time, nullable
      - `rsvp_decline_reason` string, nullable
      - `first_prep_completed_at` string, date-time, nullable
      - `checklist_state` object: Per-item completion state for the "Before you start" checklist.
    - `leader_notes` CoachSessionLeaderNote[]
      - `id` string, uuid
      - `coach_user_id` string, uuid
      - `session_id` string, uuid
      - `block_key` string: Stable identifier of the agenda step the note belongs to (v1 form `section_idx:block_idx`).
      - `scope` 'all_groups' | 'group': Whether a leader-notes row applies to all the coach's groups (shared) or a specific group overlay.
      - `group_id` string, uuid, nullable: Required when scope=group; must be null when scope=all_groups.
      - `content_html` string: Sanitized HTML from the RichTextEditor.
      - `content_plain` string: Plain-text rendering used for AC13 prep-sheet PDF.
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `groups` CoachPrepGroupContext[]
      - `group_id` string, uuid
      - `group_index` integer, nullable
      - `group_name` string
      - `scheduled_start` string, date-time, nullable
      - `scheduled_end` string, date-time, nullable
      - `status_label` 'scheduled' | 'ready_to_start'
      - `is_live` boolean: MED-952 — true when this group's session is in_progress; prep UI shows "Rejoin Session".
      - `participant_count` integer
      - `rsvp_accepted_count` integer
      - `prework_submitted_count` integer
      - `prework_total_count` integer
      - `has_missing_rsvps` boolean
      - `has_missing_prework` boolean
    - `ai_features_enabled` boolean
    - `is_first_time_coach` boolean

## Other responses

- `401`: Unauthorized (not logged in)
- `403`: Coach is not assigned to this session
- `404`: Session not found
- `500`: Internal error

---

[API](https://skmtc.dev/withmedley/apis/medley-api.md) - [All operations](https://skmtc.dev/withmedley/apis/medley-api/llms.txt) - [OpenAPI document](https://skmtc.dev/withmedley/apis/medley-api/revisions/40aaac5ca6bd?raw)
