---
title: "Answer some of today's update"
method: PATCH
path: "/training/daily-update"
tags: ["Today"]
---

# Answer some of today's update

`PATCH /training/daily-update`

## Request

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

Saves the answers it names and returns the update with its steps recomputed, so a step that depends on an answer is decided here. The day is a draft until the yesterday step is answered; a draft's feel is kept, but nothing in a draft counts toward patterns. Changes no prescription.

## Headers

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

## Request body

- object: Saves the answers it names and leaves the rest. Who wrote it comes from the session, never from the body.
  - `feel` integer: 1 Wrecked, 2 Flat, 3 OK, 4 Good, 5 Ready to go.
  - `exposures` object[]: Replaces last night's chips. Non-empty answers the yesterday step, and clears Nothing unusual.
    - `key` string, required
    - `amount` integer, nullable: Drinks only, required there: 1–3, or 4 for 4+.
  - `nothingUnusual` boolean: True answers the yesterday step and clears the chips. Not with a non-empty `exposures` in the same request.
  - `discordantReason` 'sleep' | 'stress' | 'sore' | 'ill' | 'not_sure', nullable
  - `shortSleepReason` 'bed_late' | 'woke_early' | 'up_in_night' | 'woken' | 'not_sure', nullable
  - `legs` 'fresh' | 'heavy' | 'sore', nullable: A sore spot is also reported as an injury, with POST /training/health-reports.
  - `cycle` 'started' | 'not_today' | 'no_periods': started records today as a start; no_periods turns the question off (cycleTracking off); not_today records nothing.
  - `experimentKept` boolean: Whether last night's arm of the running experiment was kept.

## Response `200`

OK

- object
  - `date` string, date, required: Today on the athlete's calendar: the morning, describing the night before.
  - `due` boolean, required
  - `presentation` string, required: How to show it. full: open as Today's check-in element, above the main session, with a Later control in its header. chip: its compact form under the session, which opens it in place (deferred today, or after three Laters in a row). none: nothing. Known values: full, chip, none. Treat unknown values as "other".
  - `reason` string, required: Why, as a code: due, quiet, later, answered, off, no_trigger, first_day, not_onboarded.
  - `status` string, nullable, required: Today's row: draft until the yesterday step is answered, then answered; later when deferred. Null before anything is said. Known values: draft, answered, later. Treat unknown values as "other".
  - `readings` object[], required: Last night's readings with their usual ranges; empty when there were none, and then nothing is asked about them.
    - `key` string, required: Which reading. Known values: hrv, restingHr, sleep. Treat unknown values as "other".
    - `label` string, required
    - `value` number, required: Last night's value, in `unit`.
    - `unit` string, required: ms, bpm or min. Known values: ms, bpm, min. Treat unknown values as "other".
    - `usualLow` number, nullable, required: The usual range this night was judged against (HRV and resting HR over the 60 nights before, sleep over 28); null while it's still forming.
    - `usualHigh` number, nullable, required
    - `off` boolean, required: Off its range on the side that matters: HRV low, resting HR high, sleep short.
  - `steps` object[], required: Every step, in order. Resume at the first one not answered.
    - `kind` string, required: Which question. still: a reported illness or injury still going (answer with the existing confirm or clear). feel: 1–5. yesterday: chips or Nothing unusual, the first step that shows a number. discordant, ill, short_sleep, legs: asked when the data or an earlier answer gives a reason. cycle: a period starting. experiment: last night's arm kept, and tonight's. today: time, place and what can't be done, with Change. done: what the answers did. Known values: still, feel, yesterday, discordant, ill, short_sleep, legs, cycle, experiment, today, done. Treat unknown values as "other".
    - `reasons` string[], required: Why it's asked: always, report_open, feel_low, cycle_window, experiment_running, or a data trigger (hrv_night_low, rhr_raised, sleep_short, hard_yesterday, travel, discordant).
    - `subject` string, nullable, required: What the step is about when there can be several: the health report id on a `still` step, the experiment id on `experiment`.
    - `title` string, required
    - `lead` string, nullable, required: A line above the question: the trigger's sentence, when there is one.
    - `options` object[], required: Single-choice answers, in order. Empty for a step that only states something.
      - `value` string, required: What to send back for this answer.
      - `label` string, required: What to show.
    - `answer` string, nullable, required: The option value already given today, or null.
    - `answered` boolean, required
    - `lines` string[], required: today: the time, place and can't-do row. experiment: tonight's arm. done: what each answer did and where the patterns stand.
    - `followUp` object, nullable, required: A second question one answer opens: legs' "Sore in one spot" asks where, as the existing injury report's region (send it with POST /training/health-reports).
      - `when` string, required
      - `title` string, required
      - `options` object[], required
        - `value` string, required: What to send back for this answer.
        - `label` string, required: What to show.
    - `offer` object, nullable, required: An action the step offers. done: `set_timezone` with an IANA zone, after the device has stayed in a new zone for three days (send it with PATCH /profile).
      - `action` string, required
      - `value` string, required
      - `label` string, required
  - `chips` object[], required: For the yesterday step, shown ones first.
    - `key` string, required: The exposure. Known values: drinks, caffeine_late, stress, late_dinner, warm_bath, hot_bedroom, screens_late, travel, woken. Treat unknown values as "other".
    - `label` string, required
    - `sub` string, nullable, required
    - `suggested` boolean, required: Suggested by the data (travel after a time-zone change): draw it dashed, not ticked.
    - `shown` boolean, required: Before "More". Shown chips come first.
    - `picked` boolean, required
    - `amount` integer, nullable, required: Drinks only: 1–3, or 4 for 4+.
    - `amounts` object[], required: The amounts to offer when picked; empty for chips without one.
      - `value` integer, required
      - `label` string, required
  - `hiddenChips` object[], required: Chips the athlete hid for good, for Settings to list so they can be brought back.
    - `key` string, required
    - `label` string, required
  - `allChips` object[]: Every chip the update can ask, hidden ones included, in a fixed order, for Settings to list with a Hide or Show again control. A hidden key this server no longer offers is listed last under its key.
    - `key` string, required
    - `label` string, required
    - `hidden` boolean, required
  - `cycleAvailable` boolean, required: Whether the cycle question applies to this athlete, so "Period started today" can be offered under More on any day.
  - `experiment` object, nullable, required
    - `id` string, required: Opaque identifier.
    - `exposure` string, required
    - `label` string, required
    - `armRule` string, required: remove: "no X tonight". add: a warm bath, the only thing ever added. Known values: remove, add. Treat unknown values as "other".
    - `tonight` string, nullable, required: Tonight's arm, stated, through the fourteenth night.
    - `lastNight` string, nullable, required: Last night's arm, when this morning asks whether it was kept.
    - `askKept` boolean, required: Whether this morning asks; send `experimentKept`.
    - `kept` boolean, nullable, required: This morning's answer, or null.
  - `copy` object, required: Static words, sent rather than written per client.
    - `later` string, required
    - `more` string, required
    - `nothingUnusual` string, required
    - `settingsModeNote` string, required
    - `settingsCycleNote` string, required

## Other responses

- `401`: Error: UNAUTHORIZED.
- `422`: Error: CONTRADICTORY_ANSWER, UNKNOWN_EXPOSURE, NOT_ASKED.

---

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