---
title: "Record whether last night's wind-down was kept"
method: PUT
path: "/training/wind-down"
tags: ["Today"]
---

# Record whether last night's wind-down was kept

`PUT /training/wind-down`

## Request

- Base URL: `https://bodylab.lol/api/v1`
- URL: `https://bodylab.lol/api/v1/training/wind-down`
- Auth: HTTP bearer

Replaces the answer for the night before the athlete's local today. Null clears it, which is different from false: false is a night they said they didn't keep, null is a night with no answer, and only answered nights are counted. Changes no prescription.

## Headers

- `X-Client-Platform` string
- `X-Client-Version` string

## Request body

- object
  - `woundDown` boolean, nullable, required

## Response `200`

OK

- object
  - `day` object, required
    - `date` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
    - `timeAvailableMin` integer, nullable, required: Minutes available today; the prescription is shortened to fit.
    - `equipment` string, nullable, required: Today's strength equipment when it differs from the place the athlete's sessions are written for. A rung named here wins outright for today, rather than narrowing what they own. Null hands today back to whichever place is in force. Known values: gym, dumbbells, bodyweight. Treat unknown values as "other".
    - `unavailableSports` string[], required: Sports the athlete can't do today.
    - `expectedAltitude` object, nullable, required: The altitude the athlete confirmed they're at today. It sets today's watt targets ahead of recent recordings and home altitude; heart-rate targets never change. Only the altitude is kept, never a location.
      - `altitudeM` integer, required: Metres, rounded to 10.
      - `source` string, required: How the altitude was worked out: device_altitude (the phone measured it), recordings (the athlete's own activities that started near where they are), elevation_data (a terrain model at their rough location), entered (typed in). Known values: device_altitude, recordings, elevation_data, entered. Treat unknown values as "other".
    - `woundDown` boolean, nullable, required: Whether the athlete was off screens by their chosen wind-down hour the night before today. Null is a night they didn't answer, which is a night not measured rather than a night failed. It changes nothing about the prescription — Body Lab records it so the athlete can see it beside their sleep, and asserts no link between the two.
  - `active` object[], required: Illnesses and injuries still going, oldest first.
    - `id` string, required: Opaque identifier.
    - `kind` string, required: What was reported. Known values: illness, injury. Treat unknown values as "other".
    - `severity` string, nullable, required: mild: symptoms above the neck only (runny or blocked nose, sneezing, sore throat). systemic: fever, chest symptoms, body aches or feeling generally unwell. The split is a widely used convention, not an evidence-based threshold. Known values: mild, systemic. Treat unknown values as "other".
    - `region` string, nullable, required: Where it hurts, coarsely: foot_ankle (foot or ankle), lower_leg (shin, calf or Achilles), knee, hip_thigh, lower_back, neck_upper_back, shoulder, arm_hand (elbow, wrist or hand). Known values: foot_ankle, lower_leg, knee, hip_thigh, lower_back, neck_upper_back, shoulder, arm_hand. Treat unknown values as "other".
    - `hurtsToLoad` boolean, nullable, required: Injury only: whether putting load through it hurts.
    - `startedOn` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
    - `confirmedOn` string, date, required: The last day the athlete said it was still going.
    - `clearedOn` string, date, nullable, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
    - `needsConfirmation` boolean, required: Still going, and last confirmed before today: ask the athlete whether it still is. It applies either way until cleared.
  - `returning` object[], required: Cleared recently enough that the first days back are still capped.
    - `reportId` string, required: Opaque identifier.
    - `kind` string, required: What is being returned from. Known values: illness, injury. Treat unknown values as "other".
    - `severity` string, nullable, required: mild: symptoms above the neck only (runny or blocked nose, sneezing, sore throat). systemic: fever, chest symptoms, body aches or feeling generally unwell. The split is a widely used convention, not an evidence-based threshold. Known values: mild, systemic. Treat unknown values as "other".
    - `region` string, nullable, required: Where it hurts, coarsely: foot_ankle (foot or ankle), lower_leg (shin, calf or Achilles), knee, hip_thigh, lower_back, neck_upper_back, shoulder, arm_hand (elbow, wrist or hand). Known values: foot_ankle, lower_leg, knee, hip_thigh, lower_back, neck_upper_back, shoulder, arm_hand. Treat unknown values as "other".
    - `day` integer, required: 1 on the day it was cleared.
    - `of` integer, required: How many days the window runs.
    - `maxMin` integer, required: Today's minute ceiling on the sessions it applies to.

## Other responses

- `401`: Error: UNAUTHORIZED.

---

[API](https://skmtc.dev/bodylab/apis/body-lab-api.md) · [All operations](https://skmtc.dev/bodylab/apis/body-lab-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bodylab/apis/body-lab-api/revisions/544c201eaf88?raw)
