> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/hr-zone-data-empty-per-provider.md).

# Why is hr\_zone\_data always empty for this provider?

`hr_zone_data` is **only populated for providers that expose it through their API**.

* Garmin and Apple Health do not currently expose HR zone data (Apple does not provide zones for workouts; Garmin does not expose them even though the Garmin app shows them), so the object arrives empty for those providers.
* Some providers do send pre-calculated zones: Fitbit, Polar, Strava, Suunto, TrainingPeaks, WHOOP.

This is a provider-API limitation, not a mapping issue, and Garmin's would populate automatically if Garmin exposed it. To see which fields each provider returns, **use the payload simulator** in the [dashboard's generate section](https://github.com/tryterra/api-faqs/blob/main/dashboard/README.md).

If you need zones for an unsupported provider, derive them yourself:

* Use recorded `max_hr_bpm` from activities, or a theoretical max (e.g. 220 minus age).
* Compute zones from raw heart rate samples.

`user_max_hr_bpm` is only populated when a provider sends a theoretical max, which most (including Garmin) do not.
