---
title: "Record a peer-leader volunteer response (MED-813 / E4.1)"
method: POST
path: "/api/participant/sessions/{sessionId}/volunteer"
tags: ["Pre-Session Reflection"]
---

# Record a peer-leader volunteer response (MED-813 / E4.1)

`POST /api/participant/sessions/{sessionId}/volunteer`

## Request

- Base URL: `https://api.production.yourmedley.com`
- URL: `https://api.production.yourmedley.com/api/participant/sessions/{sessionId}/volunteer`
- Auth: HTTP bearer

Records the participant's response to a peer-leader volunteer call —
"Yes, I'll lead" (`volunteered` → State 3) or "I can't lead today"
(`declined` → State 6) — and returns the recomputed peer-leader block
so the banner transitions immediately (IV5). Fires a CM-notification
email (fire-and-forget). Gated by `live_session_delivery`.

## Path parameters

- `sessionId` string, uuid, required

## Request body

- object
  - `response` 'volunteered' | 'declined', required

## Response `200`

Response recorded; returns the recomputed peer-leader block

- object
  - `success` boolean
  - `data` object
    - `peer_leader` PeerLeaderBlock: MED-813 / E4.1 peer-leader banner state for the current participant. Present on the reflection payload only for peer-led cohorts where the participant has a relevant role; otherwise the payload's `peer_leader` is null.
      - `state` 'confirmed_leader' | 'backup_needed' | 'volunteer_pending' | 'another_assigned' | 'backup_assigned' | 'declined' | 'leader_declined_self': Banner States 1–7. State 7 `leader_declined_self` (MED-1168): the viewer is still the assigned `session_leader_id` but their RSVP is `declined` and no backup replaced them — the banner offers a one-click self re-confirm that restores the leader/start path.
      - `leader_name` string, nullable
      - `participant_first_name` string
      - `session_number` integer, nullable
      - `session_time_label` string, nullable
      - `cm_name` string, nullable
      - `ai_assist_bullet` boolean: State 2 conditional AI bullet (IV4)
      - `about_this_session` string, nullable: State 1 CM content (IV3); null hides the block
    - `cohortId` string, uuid

## Other responses

- `400`: Invalid response value
- `401`: Unauthorized
- `403`: Participant not enrolled in this session's cohort
- `404`: Session not found OR live_session_delivery flag off
- `410`: Session has started — volunteering is locked
- `422`: Not a peer-led cohort (not_peer_led) or already the assigned leader (already_leader)

---

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