---
title: "Get composite state for the Active Session screen"
method: GET
path: "/api/coach/sessions/{sessionId}/active-state"
tags: ["Coach Active Session"]
---

# Get composite state for the Active Session screen

`GET /api/coach/sessions/{sessionId}/active-state`

## Request

- Base URL: `https://api.production.yourmedley.com`
- URL: `https://api.production.yourmedley.com/api/coach/sessions/{sessionId}/active-state`
- Auth: HTTP bearer

Returns everything the Active Session screen needs in one round-trip:
session metadata, group context, modality (for AC7 gating), sections,
slide deck, leader notes, current section + cumulative timers, coach
in-session notes, and the participants roster.

## Path parameters

- `sessionId` string, uuid, required

## Response `200`

Active session state

- object
  - `success` boolean
  - `data` ActiveSessionState: Composite payload for the Active Session screen (one fetch per page load).
    - `session_id` string, uuid
    - `title` string
    - `session_number` integer, nullable
    - `status` 'scheduled' | 'in_progress' | 'completed' | 'cancelled' | 'rescheduled'
    - `duration_minutes` integer, nullable
    - `scheduled_start` string, date-time, nullable
    - `scheduled_end` string, date-time, nullable
    - `actual_start` string, date-time, nullable
    - `actual_end` string, date-time, nullable
    - `group_id` string, uuid, nullable
    - `group_index` integer, nullable
    - `group_name` string, nullable
    - `cohort_id` string, uuid
    - `cohort_name` string
    - `organization_name` string, nullable
    - `meeting_link` string, nullable: MED-1112 — resolved meeting link (Join video call), null for in-person
    - `modality_id` string, uuid, nullable
    - `coaching_sub_type` 'coach_led' | 'peer_led', nullable
    - `ai_features_enabled` boolean: AC7 gating signal — frontend renders the AI disclosure modal when true.
    - `sections` object[]: MED-976 (E1.3h) — authored sections from the e1.3d/e/f model (session_agenda_sections + visuals + leader_prompts). Replaces the legacy parsed_outline from MED-784. Each item carries section_name, duration_minutes, sort_order, participant_prompt, leader_prompts[] (intro_text + discussion_prompt HTML), and visuals[] (slide_page associations).
    - `slide_deck` ActiveSessionSlideDeck, nullable
      - `id` string, uuid
      - `converted_pdf_s3_key` string, nullable
      - `processing_state` 'pending' | 'processing' | 'ready' | 'failed'
      - `original_filename` string
    - `leader_notes` object[]
    - `current_section_index` integer, nullable
    - `current_section_entered_at` string, date-time, nullable
    - `section_time_seconds` object: Cumulative seconds per section, keyed by section index as string (AC5).
    - `coach_session_notes_html` string
    - `coach_session_notes_updated_at` string, date-time, nullable
    - `coach_present` boolean: MED-952 — true when any assigned coach has been seen within the presence freshness window. Drives the participant "coach stepped away" notice (false ⇒ shown). On the coach's own view this is effectively always true while polling.
    - `participants` ActiveSessionParticipant[]
      - `user_id` string, uuid
      - `display_name` string
      - `initials` string
      - `is_connected` boolean: Presence stub — full realtime presence ships with MED-804 (always false in this story).

## Other responses

- `401`: Unauthorized
- `403`: Coach not authorized for this session/group
- `404`: Session not found OR live_session_delivery flag off

---

[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)
