Oura Avg Sleep HR vs (Lowest) Resting HR

Hi @david , thanks for the beautiful work you are doing here, I just canceled Strava and funnelled that money to intervals.

I am not sure if this is a bug or a feature request - I noticed that there are two separate HR values in intervals.icu: Avg Sleep HR and Resting HR.

I can see both values in my data, although I have no idea where the Avg Sleep HR is coming from, since it is not coming from Oura.

The Resting HR is gotten from Oura API V2 sleep routelowest_heart_rate” data point, and synced to “Resting HR” value in intervals.

But the Avg Sleep HR I get is not correlated with any data coming from Oura, so I assume is coming from somewhere else, and the only somewhere else I have is Garmin data.

The thing is that I don’t wear my Garmin watch at night, so I have no sleep data in Garmin :slight_smile:

Now I have removed any sleep sync from Garmin (I used to have everything configured) and kept only sleep data from Oura, but I was wondering is the Average Sleep HR being synced from Oura from the sleep routeaverage_heart_rate” data point ?

See for instance data from 30th of December: the correct Avg Sleep HR according to Oura is 42 bpm
Screenshot 2025-01-02 at 8.59.20
but Intervals has 48 bpm


and that, I think, is not coming from Garmin

So where is it coming from?

Thanks!

Ps. FWIW I think a difference should be made between the awake lowest RHR, the sleep lowest RHR and the average Sleep HR. Those are all indicative of different dynamics in our body.

Those number are meaningless. They are way to dependent on artefacts and movement.
In my case, Avg Sleeping HR comes from my Coros watch.
You should be able to check where it might come from on the Settings page. Oura, for example, is not sending it.
Check all connections and see which parameters are configured to be brought in.

Thanks @MedTechCD, I did check that and there is no sign of “Avg Sleep HR” anywhere in either Oura’s or Connect’s settings, unless that is somehow included in “Sleep” (although if it was so why would Coros have it explicitly mentioned?).


Regarding the reliability of those numbers: “ŌURA Ring provided reliability as compared to ECG of (r = 0.999) and (r = 0.984) for HR and HRV”, which is more than ok for my needs.

I’m not questioning Oura numbers at all. I’m questioning anything ‘lowest’ or ‘highest’ when recorded over longer time spans because that’s always going to be skewed by artefacts. Garmin for example uses those stupid numbers for resting HR…

Gotcha, that is why I would like to get the average sleep HR.

I checked Oura’s API responses. It is coming from there :confused: BUT the numbers shown in Oura’s dashboard and the numbers that the API returns are different :frowning:

It turns out that the various averages of HR and HRV don’t agree with the actual data points returned by the Oura API:

| Day        |   Avg sleep HR (from API) |   Calculaed Avg HR |   Diff (bpm) |   Diff (%) |   Avg HRV (from API) |   Calculated Avg HRV |   Diff (ms) |   Diff (%) |
|------------+---------------------------+--------------------+--------------+------------+----------------------+----------------------+-------------+------------|
| 2024-11-02 |                     51.62 |              45.11 |         6.51 |      12.62 |                   68 |                68.40 |       -0.40 |      -0.59 |
| 2024-11-03 |                     52.75 |              48.20 |         4.55 |       8.62 |                   79 |                80.16 |       -1.16 |      -1.46 |
| 2024-11-04 |                     48.75 |              45.41 |         3.34 |       6.84 |                   72 |                71.25 |        0.75 |       1.04 |
| 2024-11-05 |                     51.12 |              45.22 |         5.90 |      11.55 |                   89 |                93.54 |       -4.54 |      -5.10 |
| 2024-11-06 |                     49.12 |              45.77 |         3.36 |       6.84 |                   66 |                64.58 |        1.42 |       2.14 |
| 2024-11-07 |                     53.00 |              44.84 |         8.16 |      15.40 |                   78 |                74.97 |        3.03 |       3.89 |

And the weird thing is that:

  • for HRV the Dashboard reports the same value as returned by the API in the “average_hrv” data point
  • while for HR the Dashboard reports the average of the hr data points, instead of the “average_sleep_hr”

Have you noticed something similar already @david ?

what is wrong with the lowest 1 minute average?

Not an answer to your inquiry, but my resting (and sleeping) HR is so naturally low that Garmin has no idea whether I’m sleeping. I’ve also noticed an interesting thing about the “last four hours” graph I get on my instinct - it has a built in minimum that is higher than my HR will occasionally (not often, though) drop to.

I’ve confirmed the wrist-based readings with a chest strap, many manual counts of long-duration, and during an ECG (which was prompted by my Doc being worried about how low my HR is).

For what it’s worth, my low RHR doesn’t seem to have bestowed upon me the elite performance characteristics that seems connected to people with really low RHRs.

This blogpost sums it up pretty nicely

1 Like

I have the same issue with Garmin due to my low HR, and the same was with the first version of Ōura algorithm: they couldn’t detect accurately my sleep patterns.

But the newest algorithm that ōura uses, which is fully ML based, learns from my HR and this one is very accurate.

So if you have the money and are interested in that data… :slight_smile:

1 Like

@david I have tried to replace the avgSleepingHR field with the average calculated over all the data points but the change only lives for a few seconds and then it gets overwritten by the one from the integration. Should I completely disable Oura integration if I want to overwrite that value?

Thanks. Fair enough, however the issue is overstated. 99.9% lowest HR happens at night and at similar parts of the night.

In practice, issues here are rare as under most circumstances your lowest 30 minutes will be in the night

4 posts were split to a new topic: Oura Ring (Request for SPO2 data)

Hey, some update here. I have discussed the issue with Oura and they agreed that there was a bug in the API, which they fixed on 7th of February (a week ago) so that every new avg_sleep_hr is going to be right! So from 7th Feb 2025 on the data will be correct. But before it won’t :confused: