---
title: "Get the composite post-session bundle (AC2)"
method: GET
path: "/api/coach/sessions/{sessionId}/post-session"
tags: ["Coach Post-Session"]
---

# Get the composite post-session bundle (AC2)

`GET /api/coach/sessions/{sessionId}/post-session`

## Request

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

Single-round-trip fetch for the post-session screen. Returns the
session metadata, participants with attendance status, engagement
ratings, the coach's feedback (if any), and the per-participant
commitments.

## Path parameters

- `sessionId` string, uuid, required

## Response `200`

Bundle for the post-session screen

- object
  - `success` boolean
  - `data` PostSessionBundle: Composite payload for the post-session screen. One fetch per page load. AC4 Session Notes carry-forward lives on `session.coach_session_notes_html` / `_plain` / `_updated_at` (populated by MED-792).
    - `session` object: SessionWithDetails — includes group_name, cohort_name, coach_session_notes_*, status, scheduled/actual timestamps.
    - `participants` PostSessionParticipant[]
      - `user_id` string, uuid
      - `first_name` string
      - `last_name` string
      - `email` string
      - `attendance_id` string, uuid, nullable
      - `current_status` 'pending' | 'present' | 'absent' | 'excused' | 'late' | 'attended' | 'partial'
      - `current_absent_reason` 'business_conflict' | 'personal_conflict' | 'no_notice' | 'technical_issues' | 'other', nullable
      - `current_notes` string, nullable
      - `current_coach_notes` string, nullable: MED-979 — coach-authored per-participant free-text note from the post-session screen.
      - `rsvp_status` string
    - `engagement_ratings` PostSessionEngagementRating[]
      - `id` string, uuid
      - `session_id` string, uuid
      - `participant_id` string, uuid
      - `coach_id` string, uuid
      - `rating` integer
      - `participant_name` string
      - `coach_name` string
    - `feedback` object, nullable: Coach's own feedback row (responses JSONB + submitted_at). Null if not yet started.
    - `commitments` PostSessionCommitment[]
      - `id` string, uuid
      - `session_id` string, uuid
      - `participant_user_id` string, uuid
      - `coach_user_id` string, uuid, nullable: NULL for participant-authored rows (MED-1216).
      - `authored_by_user_id` string, uuid: Actual author. Equals participant_user_id for participant-authored rows (coach cannot overwrite these), or the coach's id for coach fill-ins (MED-805/MED-1216).
      - `commitment_text` string
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `ai_features_enabled` boolean: MED-971 AC1 — true iff the cohort's group_coaching modality has `ai_features_enabled=true`. Drives whether the Send Recap Email modal seeds from the AI envelope (true) or the default template (false), with the template as a fail_open fallback when AI is on but the draft is unavailable.
    - `next_session_date` string, date-time, nullable: MED-971 AC2 — ISO 8601 scheduled_start of the next group session for the cohort (session_number + 1). Null when no future session is scheduled; the `{{next_session_date}}` merge tag resolves to empty string in that case.
    - `recap_email_default_template` string, nullable: MED-971 AC1/AC7 — admin-managed default body HTML for the Send Recap Email modal, loaded from `system_configs.recap_email_default_body`. Null when no row exists; body stays empty in that case.

## Other responses

- `401`: Unauthorized
- `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)
