---
title: "Get Body Summary"
method: GET
path: "/api/v1/users/{user_id}/summaries/body"
tags: ["External: Summaries"]
---

# Get Body Summary

`GET /api/v1/users/{user_id}/summaries/body`

Returns comprehensive body metrics with semantic grouping.

Response is organized into three categories:
- **static**: Slow-changing values (weight, height, body fat, muscle mass, BMI, age)
  Returns the most recent recorded value for each field.
- **averaged**: Vitals averaged over a period (resting HR, HRV)
  Period is configurable via `average_period` parameter (1-7 days).
- **latest**: Point-in-time readings (body temperature, blood pressure)
  Only returned if measured within `latest_window_hours` (default 4 hours).

Returns null if no body data exists for the user.

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `average_period` integer — Days to average vitals (1-7)
- `latest_window_hours` integer — Hours for latest readings to be considered valid (1-24)

## Headers

- `X-Open-Wearables-API-Key` string, nullable

## Response `200`

Successful Response

- BodySummary — Comprehensive body metrics with semantic grouping. Metrics are grouped by their temporal characteristics: - slow_changing: Slow-changing values (latest measurement) - averaged: Vitals averaged over a period (1 or 7 days) - latest: Point-in-time readings (only if recent)
  - `source` SourceMetadata, required
    - `provider` string, required
    - `source` string, nullable
    - `device` string, nullable
    - `device_type` 'watch' | 'band' | 'phone' | 'scale' | 'ring' | 'other' | 'unknown' — Type of device that collected health data.
    - `device_name` string, nullable, required — Marketing name for ``device``, derived so it cannot drift from the raw model.
  - `slow_changing` BodySlowChanging, required — Slow-changing body composition metrics. These are metrics that change infrequently (days/weeks between measurements). Returns the most recent recorded value for each field.
    - `weight_kg` number, nullable — Most recent weight measurement
    - `height_cm` number, nullable — Most recent height measurement
    - `body_fat_percent` number, nullable — Most recent body fat percentage
    - `muscle_mass_kg` number, nullable — Most recent muscle/lean body mass
    - `bmi` number, nullable — Calculated from latest weight and height
    - `age` integer, nullable — Age in years calculated from birth date
  - `averaged` BodyAveraged, required — Vitals averaged over a configurable time period. These metrics fluctuate daily and are more meaningful as averages. Period can be 1 day (current state) or 7 days (baseline trend).
    - `period_days` integer, required — Number of days averaged (1 or 7)
    - `resting_heart_rate_bpm` integer, nullable — Average resting heart rate
    - `avg_hrv_sdnn_ms` number, nullable — Average HRV (SDNN)
    - `avg_hrv_rmssd_ms` number, nullable — Average HRV (RMSSD)
    - `period_start` string, date-time, required — Start of averaging period
    - `period_end` string, date-time, required — End of averaging period
  - `latest` BodyLatest, required — Point-in-time metrics that are only relevant when recent. These metrics are only returned if measured within a configurable time window. Stale readings return null to avoid displaying outdated data.
    - `body_temperature_celsius` number, nullable — Body temperature if measured within time window
    - `body_temperature_measured_at` string, date-time, nullable — When body temperature was measured (null if no recent reading)
    - `skin_temperature_celsius` number, nullable — Skin temperature if measured within time window
    - `skin_temperature_measured_at` string, date-time, nullable — When skin temperature was measured (null if no recent reading)
    - `blood_pressure` BloodPressure — Blood pressure statistics aggregated over a period. Values are aggregated from multiple readings to provide a more representative measure.
      - `avg_systolic_mmhg` integer, nullable — Average systolic pressure
      - `avg_diastolic_mmhg` integer, nullable — Average diastolic pressure
      - `max_systolic_mmhg` integer, nullable — Maximum systolic pressure
      - `max_diastolic_mmhg` integer, nullable — Maximum diastolic pressure
      - `min_systolic_mmhg` integer, nullable — Minimum systolic pressure
      - `min_diastolic_mmhg` integer, nullable — Minimum diastolic pressure
      - `reading_count` integer, nullable — Number of readings in period
    - `blood_pressure_measured_at` string, date-time, nullable — When blood pressure was measured (null if no recent reading)

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/openwearables/apis/open-wearables-api.md) · [All operations](https://skmtc.net/openwearables/apis/open-wearables-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openwearables/open-wearables-api/versions/37c1c527cd8f/schema)
