POST /v1/logs/batch or the Python SDK; see How logs work for submission fields and the difference between lifecycle-tracked and point-in-time log types.
Heart rate data
Type:heart_rate_data · Source: Python SDK / REST, App SDK (coming soon) · Extensible
Reserved for heart rate or HRV from a device or integration: resting_bpm, avg/min/max_bpm, avg_hrv_sdnn_ms, period, device_provider.
Payload
Resting heart rate in beats per minute.
Average heart rate in bpm over the measurement period.
Minimum heart rate in bpm over the measurement period.
Maximum heart rate in bpm over the measurement period.
Heart rate variability (SDNN) in milliseconds.
Count of irregular rhythm events detected by the device.
Device or integration provider.. Example:
garmin, fitbit, apple_healthOpen key/value bag for client/source-specific fields that lack a typed slot; merged into the entry’s extensions (leaf-level, last-writer-wins by event timestamp).
Related types: Use
vitals_measurement for vital signs from exam or flowsheet. Not intended for single spot HR in a vitals set (vitals_measurement with heart_rate_bpm). Always include period to anchor the measurement window; include device_provider when multiple simultaneous sources are possible.Sleep data
Type:sleep_data · Source: Python SDK / REST, App SDK (coming soon) · Extensible
Reserved for one sleep session from a device or integration. Each event represents a single session; include period (full sleep window, UTC start to end) and device_provider: total_sleep_minutes, stages, period, device_provider.
Payload
Total sleep duration in minutes.
Duration in deep/slow-wave sleep stage (minutes).
Duration in REM sleep stage (minutes).
Duration in light sleep stage (minutes).
Wake after sleep onset (WASO) in minutes.
Device or integration provider.. Example:
garmin, fitbit, apple_healthOpen key/value bag for client/source-specific fields that lack a typed slot; merged into the entry’s extensions (leaf-level, last-writer-wins by event timestamp).
Related types: Use
activity_data for activity or steps, vitals_measurement for vitals.Activity data
Type:activity_data · Source: Python SDK / REST, App SDK (coming soon), signal_feature_pipeline · Extensible
Reserved for activity measurements from wearables, device integrations, or the signal feature pipeline. Each event covers one measurement period (a daily summary or a single detected walking bout); always set period to define the window: steps, walks, active_minutes, sedentary_minutes, calories, floors_climbed, exercise_sessions, period, device_provider, local_date.
Payload
Step count within the measurement period.
Number of discrete walking bouts.
Total minutes spent walking.
Percentage of time spent at home location (0–100).. Minimum: 0. Maximum: 100
Distance with explicit unit. Server normalises to metres.
Minutes of moderate-to-vigorous activity.
Sedentary minutes within the measurement period.
Total calories burned.
Active calories burned.
Number of floors climbed.
Device or integration provider.. Example:
garmin, fitbit, apple_healthISO 8601 date (YYYY-MM-DD) in the patient’s local timezone, derived from utc_offset_seconds. Preferred anchor for per-day grouping when period spans midnight in UTC.
UTC offset of the sensor at the time of the measurement, in seconds (e.g. -18000 for UTC-5).
Open key/value bag for client/source-specific fields that lack a typed slot; merged into the entry’s extensions (leaf-level, last-writer-wins by event timestamp).
Related types: Use
vitals_measurement for vital signs, sleep_data for sleep, heart_rate_data for heart rate.CGM reading
Type:cgm_reading · Source: Python SDK / REST, App SDK (coming soon) · Extensible
Reserved for a single CGM reading from a continuous glucose device: glucose_mg_dl + sensor_timestamp; trend_arrow, glucose_flag, device_provider optional.
Payload
Blood glucose in mg/dL. To convert to mmol/L divide by 18.018.
e.g. rising, falling, steady.. Example:
rising, falling, stableWhether glucose is above, below, or within range.. One of:
high, low, normalISO 8601 UTC timestamp from the CGM sensor.
Device or integration provider.. Example:
dexcom, freestyle_libre, eversenseOpen key/value bag for client/source-specific fields that lack a typed slot; merged into the entry’s extensions (leaf-level, last-writer-wins by event timestamp).
Related types: Use
lab_results for lab glucose or other lab results. Not intended for fingerstick or other non-CGM glucose (lab_results if from lab).SpO2 reading
Type:spo2_reading · Source: Python SDK / REST, App SDK (coming soon) · Extensible
Reserved for SpO2 from pulse oximeter or wearable: spo2_percent (+ pulse_bpm, measurement_context, sensor_timestamp, device_provider). Always include sensor_timestamp and device_provider.
Payload
Oxygen saturation percentage (0–100).. Minimum: 0. Maximum: 100
Simultaneous pulse rate in beats per minute.
Conditions under which SpO2 was measured.. One of:
resting, during_sleep, activityISO 8601 UTC datetime of the reading.
Device or integration provider.. Example:
withings, garmin, fitbitOpen key/value bag for client/source-specific fields that lack a typed slot; merged into the entry’s extensions (leaf-level, last-writer-wins by event timestamp).
Related types: Use
lab_results for lab results. Not intended for vitals from exam/flowsheet (vitals_measurement when SpO2 is part of a broader vitals set).Weight measurement
Type:weight_measurement · Source: Python SDK / REST, App SDK (coming soon) · Extensible
Reserved for weight from a connected scale device: weight_kg (+ body_fat_percent, bmi, sensor_timestamp, device_provider).
Payload
Body weight in kilograms.
Body fat percentage (0–100).. Minimum: 0. Maximum: 100
Body mass index (calculated). Provide if returned by the device.
ISO 8601 UTC datetime of the measurement.
Device or integration provider.. Example:
withings, omron, fitbitOpen key/value bag for client/source-specific fields that lack a typed slot; merged into the entry’s extensions (leaf-level, last-writer-wins by event timestamp).
Related types: Use
vitals_measurement for weight from vitals/flowsheet, lab_results for lab or other.
