Skip to content
AF

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.

OffsetFieldTypeSizePresent whenUnit
0Flagsboolean[16]2Always (fixed size)—
2Body Fat Percentageuint162Always (fixed size)percentageorg.bluetooth.unit.percentage
4Time Stampstruct0 or 7Bit 1 of Flags is 1—
Depends on Flags (bit 1)User IDuint80 or 1Bit 2 of Flags is 1—
Depends on Flags (bits 1 and 2)Basal Metabolismuint160 or 2Bit 3 of Flags is 1energy (joule)org.bluetooth.unit.energy.joule
Depends on Flags (bits 1, 2 and 3)Muscle Percentageuint160 or 2Bit 4 of Flags is 1percentageorg.bluetooth.unit.percentage
Depends on Flags (bits 1, 2, 3 and 4)Muscle Massuint160 or 2Bit 5 of Flags is 1—
Depends on Flags (bits 1, 2, 3, 4 and 5)Fat Free Massuint160 or 2Bit 6 of Flags is 1—
Depends on Flags (bits 1, 2, 3, 4, 5 and 6)Soft Lean Massuint160 or 2Bit 7 of Flags is 1—
Depends on Flags (bits 1, 2, 3, 4, 5, 6 and 7)Body Water Massuint160 or 2Bit 8 of Flags is 1—
Depends on Flags (bits 1, 2, 3, 4, 5, 6, 7 and 8)Impedanceuint160 or 2Bit 9 of Flags is 1electric resistance (ohm)org.bluetooth.unit.electric_resistance.ohm
Depends on Flags (bits 1, 2, 3, 4, 5, 6, 7, 8 and 9)Weightuint160 or 2Bit 10 of Flags is 1—
Depends on Flags (bits 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10)Heightuint160 or 2Bit 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.

BitDescriptionFields its condition names
0Measurement 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))—
1Time Stamp presentTime Stamp when 1
2User ID presentUser ID when 1
3Basal Metabolism presentBasal Metabolism when 1
4Muscle Percentage presentMuscle Percentage when 1
5Muscle Mass presentMuscle Mass when 1
6Fat Free Mass presentFat Free Mass when 1
7Soft Lean Mass presentSoft Lean Mass when 1
8Body Water Mass presentBody Water Mass when 1
9Impedance presentImpedance when 1
10Weight presentWeight when 1
11Height presentHeight when 1
12Multiple Packet Measurement—
13–15Reserved 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.

← All Bluetooth GATT characteristics