Body Composition Measurement (0x2A9C): byte layout
GATT characteristic · org.bluetooth.characteristic.body_composition_measurement · read from the Bluetooth SIG’s repository on 2026-10-17 · commit 408f4a0 (2026-10-14)
Body Composition Measurement is Bluetooth GATT characteristic 0x2A9C, org.bluetooth.characteristic.body_composition_measurement in the Bluetooth SIG's assigned numbers. The SIG's GATT Specification Supplement file lays its value out as 13 fields: Flags, Body Fat Percentage, Time Stamp, User ID, Basal Metabolism and 8 more. The first, Flags, is a boolean[16]; 11 of the others are present only when a bit of it is set as the field's text states, so after the first of those, a field's offset depends on which bits are set.
- UUID
- 0x2A9C
- Identifier
org.bluetooth.characteristic.body_composition_measurement- The SIG’s description
- The Body Composition Measurement characteristic is used to represent data related to a body composition 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.body_composition_measurement.yaml
Byte layout: 13 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.
| Offset | Field | Type | Size | Present when | Unit |
|---|---|---|---|---|---|
| 0 | Flags | boolean[16] | 2 | Always (fixed size) | — |
| 2 | Body Fat Percentage | uint16 | 2 | Always (fixed size) | percentageorg.bluetooth.unit.percentage |
| 4 | Time Stamp | struct | 0 or 7 | Bit 1 of Flags is 1 | — |
| Depends on Flags (bit 1) | User ID | uint8 | 0 or 1 | Bit 2 of Flags is 1 | — |
| Depends on Flags (bits 1 and 2) | Basal Metabolism | uint16 | 0 or 2 | Bit 3 of Flags is 1 | energy (joule)org.bluetooth.unit.energy.joule |
| Depends on Flags (bits 1, 2 and 3) | Muscle Percentage | uint16 | 0 or 2 | Bit 4 of Flags is 1 | percentageorg.bluetooth.unit.percentage |
| Depends on Flags (bits 1, 2, 3 and 4) | Muscle Mass | uint16 | 0 or 2 | Bit 5 of Flags is 1 | — |
| Depends on Flags (bits 1, 2, 3, 4 and 5) | Fat Free Mass | uint16 | 0 or 2 | Bit 6 of Flags is 1 | — |
| Depends on Flags (bits 1, 2, 3, 4, 5 and 6) | Soft Lean Mass | uint16 | 0 or 2 | Bit 7 of Flags is 1 | — |
| Depends on Flags (bits 1, 2, 3, 4, 5, 6 and 7) | Body Water Mass | uint16 | 0 or 2 | Bit 8 of Flags is 1 | — |
| Depends on Flags (bits 1, 2, 3, 4, 5, 6, 7 and 8) | Impedance | uint16 | 0 or 2 | Bit 9 of Flags is 1 | electric resistance (ohm)org.bluetooth.unit.electric_resistance.ohm |
| Depends on Flags (bits 1, 2, 3, 4, 5, 6, 7, 8 and 9) | Weight | uint16 | 0 or 2 | Bit 10 of Flags is 1 | — |
| Depends on Flags (bits 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10) | Height | uint16 | 0 or 2 | Bit 11 of Flags is 1 | — |
Field notes
Each field’s text in the SIG’s file, line by line.
- Flags boolean[16] · 2
- See Flags
- Body Fat Percentage uint16 · 2
- Base Unit: org.bluetooth.unit.percentageRepresented values: M = 1, d = -1, b = 0Unit is 1/10 of a percent
- Time Stamp struct · 0 or 7
- Refer to the Date Time characteristic in Date Time (0x2A08)Present if bit 1 of Flags field is set to 1
- User ID uint8 · 0 or 1
- See User IDPresent if bit 2 of Flags field is set to 1
- Basal Metabolism uint16 · 0 or 2
- Base Unit: org.bluetooth.unit.energy.jouleRepresented values: M = 1, d = 3, b = 0Unit is kilojoulesPresent if bit 3 of Flags field is set to 1
- Muscle Percentage uint16 · 0 or 2
- Base Unit: org.bluetooth.unit.percentageRepresented values: M = 1, d = -1, b = 0Unit is 1/10 of a percentPresent if bit 4 of Flags field is set to 1
- Muscle Mass uint16 · 0 or 2
- See Muscle MassPresent if bit 5 of Flags field is set to 1
- Fat Free Mass uint16 · 0 or 2
- See Fat Free MassPresent if bit 6 of Flags field is set to 1
- Soft Lean Mass uint16 · 0 or 2
- See Soft Lean MassPresent if bit 7 of Flags field is set to 1
- Body Water Mass uint16 · 0 or 2
- See Body Water MassPresent if bit 8 of Flags field is set to 1
- Impedance uint16 · 0 or 2
- Base Unit: org.bluetooth.unit.electric_resistance.ohmRepresented values: M = 1, d = -2, b = 0Unit is 1/10 of an OhmPresent if bit 9 of Flags field is set to 1
- Weight uint16 · 0 or 2
- See WeightPresent if bit 10 of Flags field is set to 1
- Height uint16 · 0 or 2
- See HeightPresent if bit 11 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.
| Bit | Description | Fields its condition names |
|---|---|---|
| 0 | Measurement Units:0 = SI (Weight and Mass in units of kilogram (kg) and Height in units of meter)1 = Imperial (Weight and Mass in units of pound (lb) and Height in units of inch (in)) | — |
| 1 | Time Stamp present | Time Stamp when 1 |
| 2 | User ID present | User ID when 1 |
| 3 | Basal Metabolism present | Basal Metabolism when 1 |
| 4 | Muscle Percentage present | Muscle Percentage when 1 |
| 5 | Muscle Mass present | Muscle Mass when 1 |
| 6 | Fat Free Mass present | Fat Free Mass when 1 |
| 7 | Soft Lean Mass present | Soft Lean Mass when 1 |
| 8 | Body Water Mass present | Body Water Mass when 1 |
| 9 | Impedance present | Impedance when 1 |
| 10 | Weight present | Weight when 1 |
| 11 | Height present | Height when 1 |
| 12 | Multiple Packet Measurement | — |
| 13–15 | Reserved for Future Use | — |
User ID
The special value of 0xFF for User ID represents "unknown user".
Muscle Mass
This field is in kilograms with resolution 0.005 if the bit 0 of the Flag field is 0 or in pounds with a resolution of 0.01 if the bit 0 of the Flag field is 1.
Fat Free Mass
This field is in kilograms with resolution 0.005 if the bit 0 of the Flag field is 0 or in pounds with a resolution of 0.01 if the bit 0 of the Flag field is 1.
Soft Lean Mass
This field is in kilograms with resolution 0.005 if the bit 0 of the Flag field is 0 or in pounds with a resolution of 0.01 if the bit 0 of the Flag field is 1.
Body Water Mass
This field is in kilograms with resolution 0.005 if the bit 0 of the Flag field is 0 or in pounds with a resolution of 0.01 if the bit 0 of the Flag field is 1.
Weight
This field is in kilograms with resolution 0.005 if the bit 0 of the Flag field is 0 or in pounds with a resolution of 0.01 if the bit 0 of the Flag field is 1.
Height
This field is in meters with a resolution of 0.001 if the bit 0 of the Flag field is 0 or in inches with a resolution of 0.1 if the bit 0 of the Flag field is 1.
Guides on this site
The metric Body Composition Measurement carries, on every platform this site covers — each type quoted in its platform's own words:
No guide on this site names 0x2A9C yet. The connected-devices guides cover pairing, subscribing and testing for the device types they do name.
Questions
- What is the UUID of the Body Composition Measurement characteristic?
- 0x2A9C. The Bluetooth SIG's characteristic_uuids.yaml lists Body Composition Measurement as 0x2A9C with the identifier org.bluetooth.characteristic.body_composition_measurement. No file in the SIG's repository ties it to a service: the repository lists service and characteristic UUIDs separately.
- Which Body Composition Measurement fields are optional?
- 11 of its 13 fields have a published size that can be zero: Time Stamp (0 or 7; Present if bit 1 of Flags field is set to 1); User ID (0 or 1; Present if bit 2 of Flags field is set to 1); Basal Metabolism (0 or 2; Present if bit 3 of Flags field is set to 1); Muscle Percentage (0 or 2; Present if bit 4 of Flags field is set to 1); Muscle Mass (0 or 2; Present if bit 5 of Flags field is set to 1); Fat Free Mass (0 or 2; Present if bit 6 of Flags field is set to 1); Soft Lean Mass (0 or 2; Present if bit 7 of Flags field is set to 1); Body Water Mass (0 or 2; Present if bit 8 of Flags field is set to 1); Impedance (0 or 2; Present if bit 9 of Flags field is set to 1); Weight (0 or 2; Present if bit 10 of Flags field is set to 1); Height (0 or 2; Present if bit 11 of Flags field is set to 1). Flags (2) and Body Fat Percentage (2) have a fixed size.
- What units does Body Composition Measurement use?
- The SIG's text names a unit for 4 of the 13 fields: Body Fat Percentage: percentage (org.bluetooth.unit.percentage); Basal Metabolism: energy (joule) (org.bluetooth.unit.energy.joule); Muscle Percentage: percentage (org.bluetooth.unit.percentage); Impedance: electric resistance (ohm) (org.bluetooth.unit.electric_resistance.ohm).
- What do the bits of the Body Composition Measurement Flags field mean?
- The SIG defines them as: bit 0, Measurement Units: 0 = SI (Weight and Mass in units of kilogram (kg) and Height in units of meter); 1 = Imperial (Weight and Mass in units of pound (lb) and Height in units of inch (in)); bit 1, Time Stamp present (Time Stamp when 1); bit 2, User ID present (User ID when 1); bit 3, Basal Metabolism present (Basal Metabolism when 1); bit 4, Muscle Percentage present (Muscle Percentage when 1); bit 5, Muscle Mass present (Muscle Mass when 1); bit 6, Fat Free Mass present (Fat Free Mass when 1); bit 7, Soft Lean Mass present (Soft Lean Mass when 1); bit 8, Body Water Mass present (Body Water Mass when 1); bit 9, Impedance present (Impedance when 1); bit 10, Weight present (Weight when 1); bit 11, Height present (Height when 1); bit 12, Multiple Packet Measurement. The remaining bits are reserved for future use.
Source
Read on 2026-10-17 from gss/org.bluetooth.characteristic.body_composition_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.