> ## Documentation Index
> Fetch the complete documentation index at: https://openwearables.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Body Summary

> 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.



## OpenAPI

````yaml https://api.openwearables.io/openapi.json get /api/v1/users/{user_id}/summaries/body
openapi: 3.1.0
info:
  title: Open Wearables API
  version: 0.1.0
servers: []
security: []
paths:
  /api/v1/users/{user_id}/summaries/body:
    get:
      tags:
        - 'External: Summaries'
      summary: Get Body Summary
      description: >-
        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.
      operationId: get_body_summary_api_v1_users__user_id__summaries_body_get
      parameters:
        - name: user_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: User Id
        - name: average_period
          in: query
          required: false
          schema:
            type: integer
            maximum: 7
            minimum: 1
            description: Days to average vitals (1-7)
            default: 7
            title: Average Period
          description: Days to average vitals (1-7)
        - name: latest_window_hours
          in: query
          required: false
          schema:
            type: integer
            maximum: 24
            minimum: 1
            description: Hours for latest readings to be considered valid (1-24)
            default: 4
            title: Latest Window Hours
          description: Hours for latest readings to be considered valid (1-24)
        - name: X-Open-Wearables-API-Key
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Open-Wearables-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/BodySummary'
                  - type: 'null'
                title: >-
                  Response Get Body Summary Api V1 Users  User Id  Summaries
                  Body Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - OAuth2PasswordBearer: []
components:
  schemas:
    BodySummary:
      properties:
        source:
          $ref: '#/components/schemas/SourceMetadata'
        slow_changing:
          $ref: '#/components/schemas/BodySlowChanging'
        averaged:
          $ref: '#/components/schemas/BodyAveraged'
        latest:
          $ref: '#/components/schemas/BodyLatest'
      type: object
      required:
        - source
        - slow_changing
        - averaged
        - latest
      title: BodySummary
      description: |-
        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)
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    SourceMetadata:
      properties:
        provider:
          type: string
          title: Provider
          example: apple_health
        device:
          anyOf:
            - type: string
            - type: 'null'
          title: Device
          example: Apple Watch Series 9
      type: object
      required:
        - provider
      title: SourceMetadata
    BodySlowChanging:
      properties:
        weight_kg:
          anyOf:
            - type: number
            - type: 'null'
          title: Weight Kg
          description: Most recent weight measurement
          example: 72.5
        height_cm:
          anyOf:
            - type: number
            - type: 'null'
          title: Height Cm
          description: Most recent height measurement
          example: 175.5
        body_fat_percent:
          anyOf:
            - type: number
            - type: 'null'
          title: Body Fat Percent
          description: Most recent body fat percentage
          example: 18.5
        muscle_mass_kg:
          anyOf:
            - type: number
            - type: 'null'
          title: Muscle Mass Kg
          description: Most recent muscle/lean body mass
          example: 58.2
        bmi:
          anyOf:
            - type: number
            - type: 'null'
          title: Bmi
          description: Calculated from latest weight and height
          example: 23.5
        age:
          anyOf:
            - type: integer
            - type: 'null'
          title: Age
          description: Age in years calculated from birth date
          example: 32
      type: object
      title: BodySlowChanging
      description: >-
        Slow-changing body composition metrics.


        These are metrics that change infrequently (days/weeks between
        measurements).

        Returns the most recent recorded value for each field.
    BodyAveraged:
      properties:
        period_days:
          type: integer
          title: Period Days
          description: Number of days averaged (1 or 7)
          example: 7
        resting_heart_rate_bpm:
          anyOf:
            - type: integer
            - type: 'null'
          title: Resting Heart Rate Bpm
          description: Average resting heart rate
          example: 62
        avg_hrv_sdnn_ms:
          anyOf:
            - type: number
            - type: 'null'
          title: Avg Hrv Sdnn Ms
          description: Average HRV (SDNN)
          example: 45.2
        avg_hrv_rmssd_ms:
          anyOf:
            - type: number
            - type: 'null'
          title: Avg Hrv Rmssd Ms
          description: Average HRV (RMSSD)
          example: 42
        period_start:
          type: string
          format: date-time
          title: Period Start
          description: Start of averaging period
        period_end:
          type: string
          format: date-time
          title: Period End
          description: End of averaging period
      type: object
      required:
        - period_days
        - period_start
        - period_end
      title: BodyAveraged
      description: |-
        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).
    BodyLatest:
      properties:
        body_temperature_celsius:
          anyOf:
            - type: number
            - type: 'null'
          title: Body Temperature Celsius
          description: Body temperature if measured within time window
          example: 36.6
        body_temperature_measured_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Body Temperature Measured At
          description: When body temperature was measured (null if no recent reading)
        skin_temperature_celsius:
          anyOf:
            - type: number
            - type: 'null'
          title: Skin Temperature Celsius
          description: Skin temperature if measured within time window
          example: 36.6
        skin_temperature_measured_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Skin Temperature Measured At
          description: When skin temperature was measured (null if no recent reading)
        blood_pressure:
          anyOf:
            - $ref: '#/components/schemas/BloodPressure'
            - type: 'null'
          description: Blood pressure if measured within time window
        blood_pressure_measured_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Blood Pressure Measured At
          description: When blood pressure was measured (null if no recent reading)
      type: object
      title: BodyLatest
      description: >-
        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.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    BloodPressure:
      properties:
        avg_systolic_mmhg:
          anyOf:
            - type: integer
            - type: 'null'
          title: Avg Systolic Mmhg
          description: Average systolic pressure
          example: 120
        avg_diastolic_mmhg:
          anyOf:
            - type: integer
            - type: 'null'
          title: Avg Diastolic Mmhg
          description: Average diastolic pressure
          example: 80
        max_systolic_mmhg:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Systolic Mmhg
          description: Maximum systolic pressure
          example: 135
        max_diastolic_mmhg:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Diastolic Mmhg
          description: Maximum diastolic pressure
          example: 90
        min_systolic_mmhg:
          anyOf:
            - type: integer
            - type: 'null'
          title: Min Systolic Mmhg
          description: Minimum systolic pressure
          example: 110
        min_diastolic_mmhg:
          anyOf:
            - type: integer
            - type: 'null'
          title: Min Diastolic Mmhg
          description: Minimum diastolic pressure
          example: 72
        reading_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Reading Count
          description: Number of readings in period
          example: 5
      type: object
      title: BloodPressure
      description: >-
        Blood pressure statistics aggregated over a period.


        Values are aggregated from multiple readings to provide a more
        representative measure.
  securitySchemes:
    OAuth2PasswordBearer:
      type: oauth2
      flows:
        password:
          scopes: {}
          tokenUrl: /api/v1/auth/login

````