Skip to content
AF

Heart Rate Measurement (0x2A37): byte layout

GATT characteristic · org.bluetooth.characteristic.heart_rate_measurement · read from the Bluetooth SIG’s repository on 2026-10-17 · commit 408f4a0 (2026-10-14)

Heart Rate Measurement is Bluetooth GATT characteristic 0x2A37, org.bluetooth.characteristic.heart_rate_measurement in the Bluetooth SIG's assigned numbers. The SIG's GATT Specification Supplement file lays its value out as 5 fields: Flags, Heart Rate Measurement Value (8 bit resolution), Heart Rate Measurement Value (16 bit resolution), Energy Expended and RR-interval. The first, Flags, is a boolean[8]; 4 of the others are present only when a bit of it is set as the field's text states, so after the first field whose size can change, offsets depend on the fields before them.

UUID
0x2A37
Identifier
org.bluetooth.characteristic.heart_rate_measurement
The SIG’s description
The Heart Rate Measurement characteristic is used to represent data related to a heart rate measurement.The structure of this characteristic is defined below.
Service the SIG’s files tie it to
None: no file in the repository lists this characteristic under a service.
Source file
gss/org.bluetooth.characteristic.heart_rate_measurement.yaml

Byte layout: 5 fields

In the order the SIG’s structure lists them. Type and size are as published; sizes count octets except where a struct is marked as sized in bits. The offset is printed only where every earlier field has a fixed size; where an earlier field can be absent or vary, the cell names what it depends on. “Present when” is read from the field’s own “Present if” line, shown in full in the field notes below.

OffsetFieldTypeSizePresent whenUnit
0Flagsboolean[8]1Always (fixed size)—
1Heart Rate Measurement Value (8 bit resolution)uint80 or 1Bit 0 of Flags is 0period (beats per minute)org.bluetooth.unit.period.beats_per_minute
Depends on Flags (bit 0)Heart Rate Measurement Value (16 bit resolution)uint160 or 2Bit 0 of Flags is 1period (beats per minute)org.bluetooth.unit.period.beats_per_minute
Depends on Flags (bit 0)Energy Expendeduint160 or 2Bit 3 of Flags is 1energy (joule)org.bluetooth.unit.energy.joule
Depends on Flags (bits 0 and 3)RR-intervaluint16[n]0 or n*2Bit 4 of Flags is 1—

Field notes

Each field’s text in the SIG’s file, line by line.

Flags boolean[8] · 1
See Flags
Heart Rate Measurement Value (8 bit resolution) uint8 · 0 or 1
Unit: org.bluetooth.unit.period.beats_per_minutePresent if bit 0 of Flags field is set to 0
Heart Rate Measurement Value (16 bit resolution) uint16 · 0 or 2
Unit: org.bluetooth.unit.period.beats_per_minutePresent if bit 0 of Flags field is set to 1
Energy Expended uint16 · 0 or 2
Unit: org.bluetooth.unit.energy.joulePresent if bit 3 of Flags field is set to 1
RR-interval uint16[n] · 0 or n*2
See RR-IntervalPresent if bit 4 of Flags field is set to 1

Flags and value tables

The definitions the SIG’s file gives for its fields, every row as published. On a flags table the last column lists the fields whose “Present if” line names that bit.

Flags

The bits of this field are defined below.

BitDescriptionFields its condition names
0Heart Rate Value Format:0 = Heart Rate Value Format is set to uint81 = Heart Rate Value Format is set to uint16Heart Rate Measurement Value (8 bit resolution) when 0Heart Rate Measurement Value (16 bit resolution) when 1
1Sensor Contact detected—
2Sensor Contact Supported—
3Energy Expended presentEnergy Expended when 1
4RR-Interval presentRR-interval when 1
5–7Reserved for Future Use—

RR-Interval

The RR-Interval value represents the time between two R-Wave detections. Each RR-Interval value is represented by a uint16 with 1/1024 second as the unit. Because it is possible to measure several RR-Intervals between transmissions of the Heart Rate Measurement characteristic, multiple RR-Interval sub-fields can be present in the characteristic. The number of RR-Interval sub-fields present is determined by a combination of the overall length of the characteristic and whether or not the characteristic contains the Energy Expended field.Where there are multiple RR-Interval values transmitted in the Heart Rate Measurement characteristic, the structure of this field is defined below.

RR-Interval FieldDescription
RR-Interval Value 0Oldest RR-Interval value
RR-Interval Value 1
RR-Interval Value 2
…
RR-Interval Value nNewest RR-Interval value

Guides on this site

The metric Heart Rate Measurement carries, on every platform this site covers — each type quoted in its platform's own words:

The connected-device guides that name 0x2A37:

Questions

What is the UUID of the Heart Rate Measurement characteristic?
0x2A37. The Bluetooth SIG's characteristic_uuids.yaml lists Heart Rate Measurement as 0x2A37 with the identifier org.bluetooth.characteristic.heart_rate_measurement. No file in the SIG's repository ties it to a service: the repository lists service and characteristic UUIDs separately.
Which Heart Rate Measurement fields are optional?
4 of its 5 fields have a published size that can be zero: Heart Rate Measurement Value (8 bit resolution) (0 or 1; Present if bit 0 of Flags field is set to 0); Heart Rate Measurement Value (16 bit resolution) (0 or 2; Present if bit 0 of Flags field is set to 1); Energy Expended (0 or 2; Present if bit 3 of Flags field is set to 1); RR-interval (0 or n*2; Present if bit 4 of Flags field is set to 1). Flags (1) has a fixed size.
What units does Heart Rate Measurement use?
The SIG's text names a unit for 3 of the 5 fields: Heart Rate Measurement Value (8 bit resolution): period (beats per minute) (org.bluetooth.unit.period.beats_per_minute); Heart Rate Measurement Value (16 bit resolution): period (beats per minute) (org.bluetooth.unit.period.beats_per_minute); Energy Expended: energy (joule) (org.bluetooth.unit.energy.joule).
What do the bits of the Heart Rate Measurement Flags field mean?
The SIG defines them as: bit 0, Heart Rate Value Format: 0 = Heart Rate Value Format is set to uint8; 1 = Heart Rate Value Format is set to uint16 (Heart Rate Measurement Value (8 bit resolution) when 0, Heart Rate Measurement Value (16 bit resolution) when 1); bit 1, Sensor Contact detected; bit 2, Sensor Contact Supported; bit 3, Energy Expended present (Energy Expended when 1); bit 4, RR-Interval present (RR-interval when 1). The remaining bits are reserved for future use.
Which values does the Heart Rate Measurement RR-Interval table define?
RR-Interval Value 0: Oldest RR-Interval value; RR-Interval Value n: Newest RR-Interval value. The other rows are reserved for future use or carry no text.

Source

Read on 2026-10-17 from gss/org.bluetooth.characteristic.heart_rate_measurement.yaml and assigned_numbers/uuids/characteristic_uuids.yaml in the Bluetooth SIG’s public repository (branch main, commit 408f4a0, committed 2026-10-14), by scripts/fetch-bluetooth-gatt.mjs. The file’s notice says it is proprietary to Bluetooth SIG, that furnishing it grants no licence, and that it is subject to change without notice; it is © Bluetooth SIG, Inc., and its text is quoted here for identification. Generated by AIFitnessAPI, which is not affiliated with Bluetooth SIG; the SIG’s file remains the authority. The full notice and the conventions used on these pages are on the reference hub.

← All Bluetooth GATT characteristics