For the complete documentation index, see llms.txt. This page is also available as Markdown.

Why are HRV and resting heart rate null on some Garmin sleep records?

Garmin sleep HRV and resting heart rate come from separate Garmin summaries, so they can be empty on a sleep record until those summaries arrive.

Garmin sleep HRV and resting heart rate come from separate Garmin summaries, so they can be empty on a sleep record until those summaries arrive.

All of these fields are under heart_rate_data.summary on the sleep payload:

  • avg_hrv_sdnn is always empty for Garmin.

  • avg_hrv_rmssd comes from Garmin's overnight HRV summary, which Garmin sends separately from the sleep stages. It is empty when Garmin hasn't sent an HRV reading for that night. Garmin daily payloads don't carry HRV.

  • resting_hr_bpm is copied from the daily summary for the day the user woke up, so it is the same whole-day value as resting_hr_bpm on that daily payload. It stays empty until Garmin has sent that day's daily summary.

  • min_hr_bpm, avg_hr_bpm and max_hr_bpm are worked out from the heart rate readings inside the sleep window. min_hr_bpm is the lowest reading, not a resting heart rate measurement.

To get one resting heart rate per day for Garmin, read it from the daily payload. If you use the sleep record, upsert on metadata.summary_id and read it again after the daily summary has arrived.

Field definitions are in the data models reference.

Last updated

Was this helpful?