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

# Get Sleep Summary

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

## Request

- Base URL: `https://api.openwearables.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openwearables.io/api/v1/users/{user_id}/summaries/sleep`
- Auth: OAuth 2 (password, token URL `/api/v1/auth/login`)

Returns daily sleep metrics.

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `start_date` string, date-time, required: ISO 8601 datetime (e.g. `2023-11-07T05:31:56Z`) or Unix timestamp in seconds. Date-only strings (e.g. `2023-11-07`) are also accepted and cover the whole day, so a date-only range includes both boundary days.
- `end_date` string, date-time, required: ISO 8601 datetime (e.g. `2023-11-07T05:31:56Z`) or Unix timestamp in seconds. Date-only strings (e.g. `2023-11-07`) are also accepted and cover the whole day, so a date-only range includes both boundary days.
- `cursor` string, nullable
- `limit` integer

## Headers

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

## Response `200`

Successful Response

- PaginatedResponseSleepSummary
  - `data` SleepSummary[], required
    - `date` string, date, required
    - `source` SourceMetadata, required
      - `provider` string, required
      - `source` string, nullable
      - `device` string, nullable
      - `device_type` 'watch' | 'band' | 'phone' | 'scale' | 'ring' | 'tablet' | 'chest_strap' | 'hr_sensor' | 'headphones' | 'head_mounted' | 'glasses' | 'smart_display' | 'bp_monitor' | 'glucose_meter' | 'thermometer' | 'sleep_monitor' | 'bike_computer' | 'fitness_machine' | 'other' | 'unknown': Type of device that collected health data.
      - `device_id` string, nullable
      - `device_name` string, nullable, required: Marketing name for ``device``, derived so it cannot drift from the raw model.
    - `start_time` string, date-time, nullable: Start of the longest main-sleep session
    - `end_time` string, date-time, nullable: End of the longest main-sleep session
    - `zone_offset` string, nullable: UTC offset of the longest main-sleep session, e.g. '+02:00'
    - `duration_minutes` integer, nullable: Total sleep duration excluding naps
    - `total_duration_minutes` integer, nullable: Total of all sleep + nap durations for the day
    - `time_in_bed_minutes` integer, nullable: Total time in bed excluding naps
    - `efficiency_percent` number, nullable
    - `stages` SleepStagesSummary
      - `awake_minutes` integer, nullable
      - `light_minutes` integer, nullable
      - `deep_minutes` integer, nullable
      - `rem_minutes` integer, nullable
    - `interruptions_count` integer, nullable
    - `nap_count` integer, nullable: Number of naps taken
    - `nap_duration_minutes` integer, nullable: Total nap duration
    - `sessions` SleepSessionSummary[], nullable: Per-session breakdown of all sleep and nap sessions for the day
      - `start_time` string, date-time, required
      - `end_time` string, date-time, required
      - `zone_offset` string, nullable: UTC offset of the session, e.g. '+02:00'
      - `duration_minutes` integer, nullable: Session duration
      - `is_nap` boolean: True if this session is a nap rather than main sleep
    - `avg_heart_rate_bpm` integer, nullable
    - `avg_hrv_sdnn_ms` number, nullable: Average HRV (SDNN) during sleep
    - `avg_hrv_rmssd_ms` number, nullable: Average HRV (RMSSD) during sleep
    - `avg_respiratory_rate` number, nullable
    - `avg_spo2_percent` number, nullable
  - `pagination` Pagination, required
    - `next_cursor` string, nullable: Cursor to fetch next page, null if no more data
    - `previous_cursor` string, nullable: Cursor to fetch previous page
    - `has_more` boolean, required: Whether more data is available
    - `total_count` integer, nullable: Total number of records matching the query
  - `metadata` TimeseriesMetadata, required
    - `resolution` 'raw' | '1min' | '5min' | '15min' | '1hour': Bucket width requested when reading time series. RAW returns stored samples untouched.
    - `sample_count` integer, nullable
    - `start_time` string, date-time, nullable
    - `end_time` string, date-time, nullable

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-14** `bc25a1359b11`: 1 info
  - added the optional property `data/items/source/device_id` to the response with the `200` status
- **2026-10-02** `4eaceca2333d`: 13 warning
  - added the new `bike_computer` enum value to the `data/items/source/device_type/anyOf[subschema #1: DeviceType]/` response property for the response status `200`
  - added the new `bp_monitor` enum value to the `data/items/source/device_type/anyOf[subschema #1: DeviceType]/` response property for the response status `200`
  - added the new `chest_strap` enum value to the `data/items/source/device_type/anyOf[subschema #1: DeviceType]/` response property for the response status `200`
  - added the new `fitness_machine` enum value to the `data/items/source/device_type/anyOf[subschema #1: DeviceType]/` response property for the response status `200`
  - …9 more
- **2026-09-16** `b628830d5f47`: 1 info
  - for the `query` request parameter `limit`, the max was increased from `100.00` to `1000.00`
- **2026-08-08** `37c1c527cd8f`: 3 info
  - added the optional property `data/items/source/device_type` to the response with the `200` status
  - added the optional property `data/items/source/source` to the response with the `200` status
  - added the required property `data/items/source/device_name` to the response with the `200` status

[Operation history](https://skmtc.dev/openwearables/apis/open-wearables-api/changes/api/v1/users/:user_id/summaries/sleep/get.md)

---

[API](https://skmtc.dev/openwearables/apis/open-wearables-api.md) · [All operations](https://skmtc.dev/openwearables/apis/open-wearables-api/llms.txt) · [OpenAPI document](https://skmtc.dev/openwearables/apis/open-wearables-api/revisions/c9016a165d04?raw)
