---
title: "Single Sleep Document"
method: GET
path: "/v2/usercollection/sleep/{document_id}"
tags: ["Sleep Routes"]
---

# Single Sleep Document

`GET /v2/usercollection/sleep/{document_id}`

## Path parameters

- `document_id` string, required

## Response `200`

Successful Response

- PublicModifiedSleepModel
  - `id` string, required — Unique identifier of the object.
  - `average_breath` number, nullable — Average breathing rate during sleep as breaths/minute.
  - `average_heart_rate` number, nullable — Average heart rate during sleep as beats/minute. NOTE: this is the average calculated by ecore (based on 30-second samples) which is different from what is shown in the app. The app shows the average of aggregated 5-minute heart rate samples.
  - `average_hrv` integer, nullable — Average heart rate variability during sleep.
  - `awake_time` integer, nullable — Duration spent awake in seconds.
  - `bedtime_end` string, required
  - `bedtime_start` string, required
  - `day` string, required
  - `deep_sleep_duration` integer, nullable — Duration spent in deep sleep in seconds.
  - `efficiency` integer, nullable — Sleep efficiency rating in range [1, 100].
  - `heart_rate` PublicSample — Object defining a recorded sample.
    - `interval` number, required — Interval in seconds between the sampled items.
    - `items` number[], required
    - `timestamp` string, required
  - `hrv` PublicSample — Object defining a recorded sample.
    - `interval` number, required — Interval in seconds between the sampled items.
    - `items` number[], required
    - `timestamp` string, required
  - `latency` integer, nullable — Sleep latency in seconds. This is the time it took for the user to fall asleep after going to bed.
  - `light_sleep_duration` integer, nullable — Duration spent in light sleep in seconds.
  - `low_battery_alert` boolean, required — Flag indicating if a low battery alert occurred.
  - `lowest_heart_rate` integer, nullable — Lowest heart rate during sleep. NOTE: this is the value calculated by ecore (based on 30-second samples) which is different from what is shown in the app. The app shows the minimum of aggregated 5-minute heart rate samples.
  - `movement_30_sec` string, nullable — 30-second movement classification for the period where every character corresponds to: '1' = no motion, '2' = restless, '3' = tossing and turning '4' = active Example: "1143222134".
  - `period` integer, required — ECore sleep period identifier.
  - `readiness` PublicReadiness — Object defining readiness.
    - `contributors` PublicReadinessContributors, required — Object defining readiness score contributors.
      - `activity_balance` integer, nullable — Contribution of cumulative activity balance in range [1, 100].
      - `body_temperature` integer, nullable — Contribution of body temperature in range [1, 100].
      - `hrv_balance` integer, nullable — Contribution of heart rate variability balance in range [1, 100].
      - `previous_day_activity` integer, nullable — Contribution of previous day's activity in range [1, 100].
      - `previous_night` integer, nullable — Contribution of previous night's sleep in range [1, 100].
      - `recovery_index` integer, nullable — Contribution of recovery index in range [1, 100].
      - `resting_heart_rate` integer, nullable — Contribution of resting heart rate in range [1, 100].
      - `sleep_balance` integer, nullable — Contribution of sleep balance in range [1, 100].
      - `sleep_regularity` integer, nullable — Contribution of sleep regularity in range [1, 100].
    - `score` integer, nullable — Readiness score in range [1, 100].
    - `temperature_deviation` number, nullable — Temperature deviation in degrees Celsius.
    - `temperature_trend_deviation` number, nullable — Temperature trend deviation in degrees Celsius.
  - `readiness_score_delta` integer, nullable — Effect on readiness score caused by this sleep period.
  - `rem_sleep_duration` integer, nullable — Duration spent in REM sleep in seconds.
  - `restless_periods` integer, nullable — Number of restless periods during sleep.
  - `sleep_algorithm_version` 'v1' | 'v2' — Oura Sleep Staging Algorithms. v1 = original aka legacy aka OSSA 1.0, v2 = latest sleep algorithm
  - `sleep_analysis_reason` 'foreground_sleep_analysis' | 'bedtime_edit' | 'background_sleep_analysis' | 'background_created_foreground_updated' — Possible sleep analysis reasons.
  - `sleep_phase_30_sec` string, nullable — 30-second sleep phase classification for the period where every character corresponds to: '1' = deep sleep, '2' = light sleep, '3' = REM sleep '4' = awake. Example: "444423323441114".
  - `sleep_phase_5_min` string, nullable — 5-minute sleep phase classification for the period where every character corresponds to: '1' = deep sleep, '2' = light sleep, '3' = REM sleep '4' = awake. Example: "444423323441114".
  - `sleep_score_delta` integer, nullable — Effect on sleep score caused by this sleep period.
  - `time_in_bed` integer, required — Duration spent in bed in seconds.
  - `total_sleep_duration` integer, nullable — Total sleep duration in seconds.
  - `type` 'deleted' | 'sleep' | 'long_sleep' | 'late_nap' | 'rest' — Possible sleep period types. 'deleted' = deleted sleep by user. 'sleep' = user confirmed sleep / nap, min 15 minutes, max 3 hours, contributes to daily scores 'late_nap' = user confirmed sleep / nap, min 15 minutes, ended after sleep day change (6 pm), contributes to next days daily scores 'long_sleep' = sleep that is long enough (>3h) to automatically contribute to daily scores 'rest' = Falsely detected sleep / nap, rejected in confirm prompt by user
  - `ring_id` string, nullable — Encrypted identifier of the ring that produced this sleep data.
  - `app_sleep_phase_5_min` string, nullable — 5-minute sleep phase classification for the period aligned with what is shown in the app where every character corresponds to: '1' = deep sleep, '2' = light sleep, '3' = REM sleep '4' = awake. Example: "444423323441114". NOTE: This field will be removed in the future after a transition period.

## Other responses

- `400` — Client Exception
- `401` — Unauthorized access exception. Usually means the access token is expired, malformed or revoked.
- `403` — Access forbidden. Usually means the user's subscription to Oura has expired and their data is not available via the API.
- `404` — Not Found
- `422` — Validation Error
- `429` — Request Rate Limit Exceeded.

---

[API](https://skmtc.dev/ouraring/apis/oura-api-documentation.md) · [All operations](https://skmtc.dev/ouraring/apis/oura-api-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ouraring/oura-api-documentation/revisions/8b8ae3b61eda/schema)
