Vital · Schema

VitalSleepSummary

A normalized per-night sleep summary aggregated from any supported wearable/device source. One record per sleep session.

Health DataWearablesLab TestingDigital HealthHealth TechHealthcareHIPAAHealthKitHealth ConnectEHREMRBiomarkersDiagnosticsContinuous Glucose MonitoringSleepActivityHeart RateWebhookPhlebotomyLab Orders

Properties

Name Type Description
id string
user_id string
calendar_date string Calendar date the sleep session ended on.
bedtime_start string
bedtime_end string
timezone_offset integer Offset from UTC in seconds.
duration integer Total duration in bed, in seconds.
total integer Total sleep time in seconds (all stages combined).
awake integer Awake time in seconds.
light integer Light-sleep time in seconds.
rem integer REM-sleep time in seconds.
deep integer Deep-sleep time in seconds.
score integernull Provider-reported sleep score (0-100).
hr_average numbernull
hr_lowest numbernull
hrv_avg numbernull
respiratory_rate numbernull
temperature_delta numbernull
source object
View JSON Schema on GitHub

JSON Schema

vital-sleep-summary-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/vital-io/main/json-schema/vital-sleep-summary-schema.json",
  "title": "VitalSleepSummary",
  "description": "A normalized per-night sleep summary aggregated from any supported wearable/device source. One record per sleep session.",
  "type": "object",
  "required": ["id", "user_id", "calendar_date", "source"],
  "properties": {
    "id": {"type": "string", "format": "uuid"},
    "user_id": {"type": "string", "format": "uuid"},
    "calendar_date": {"type": "string", "format": "date", "description": "Calendar date the sleep session ended on."},
    "bedtime_start": {"type": "string", "format": "date-time"},
    "bedtime_end": {"type": "string", "format": "date-time"},
    "timezone_offset": {"type": "integer", "description": "Offset from UTC in seconds."},
    "duration": {"type": "integer", "description": "Total duration in bed, in seconds."},
    "total": {"type": "integer", "description": "Total sleep time in seconds (all stages combined)."},
    "awake": {"type": "integer", "description": "Awake time in seconds."},
    "light": {"type": "integer", "description": "Light-sleep time in seconds."},
    "rem": {"type": "integer", "description": "REM-sleep time in seconds."},
    "deep": {"type": "integer", "description": "Deep-sleep time in seconds."},
    "score": {"type": ["integer", "null"], "description": "Provider-reported sleep score (0-100)."},
    "hr_average": {"type": ["number", "null"]},
    "hr_lowest": {"type": ["number", "null"]},
    "hrv_avg": {"type": ["number", "null"]},
    "respiratory_rate": {"type": ["number", "null"]},
    "temperature_delta": {"type": ["number", "null"]},
    "source": {
      "type": "object",
      "required": ["provider", "type"],
      "properties": {
        "provider": {"type": "string", "examples": ["oura", "whoop", "garmin", "fitbit", "apple_health_kit"]},
        "type": {"type": "string", "examples": ["watch", "ring", "phone", "manual"]},
        "name": {"type": "string"}
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/vital-sleep-summary"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.