Bluetooth GATT characteristics for fitness and health devices
97 characteristics · 44 byte-layout pages · 13 services · read from the Bluetooth SIG’s repository on 2026-10-17 · commit 408f4a0 (2026-10-14)
The Bluetooth SIG publishes GATT characteristic structures as YAML files in its public repository — 278 files alongside the 512 characteristic UUIDs it lists. This reference reads that repository for 97 characteristics chosen for fitness and health devices: 90 have a published structure, the 44 with at least two fields or a flags field get a page laying out every field’s type and size, its offset where every earlier size is fixed, and its unit and the Flags bit that makes it present where the SIG’s text states them, and 7 have no structure file at all. The SIG’s files tie characteristics to a service only in permitted-characteristics lists, which here means the 39 User Data characteristics.
This is the wire-format companion to the connected-devices guides, which cover pairing, subscribing and testing: Connect a Bluetooth Heart Rate Monitor to Your App, Reading Cycling Power, Cadence, and Speed Sensors in an App, What Is FTMS? The Bluetooth Fitness Machine Service, Web Bluetooth for Fitness Apps in the Browser, Core Bluetooth for Fitness Devices on iOS and Testing Bluetooth Fitness Device Integrations.
What a GATT service and characteristic are
Google’s Android documentation (“Bluetooth Low Energy”, last updated 2026-02-26, read 2026-10-17) defines the terms this way:
- Generic Attribute Profile (GATT)
- “The GATT profile is a general specification for sending and receiving short pieces of data known as "attributes" over a BLE link. All current BLE application profiles are based on GATT.”
- Service
- “A service is a collection of characteristics. For example, you could have a service called "Heart Rate Monitor" that includes characteristics such as "heart rate measurement."”
- Characteristic
- “A characteristic contains a single value and 0-n descriptors that describe the characteristic's value. A characteristic can be thought of as a type, analogous to a class.”
- Descriptor
- “Descriptors are defined attributes that describe a characteristic value. For example, a descriptor might specify a human-readable description, an acceptable range for a characteristic's value, or a unit of measure that is specific to a characteristic's value.”
Source: developer.android.com. The Bluetooth SIG’s repository keeps the two kinds of identifier in separate lists — 76 service UUIDs in assigned_numbers/uuids/service_uuids.yaml and 512 characteristic UUIDs in assigned_numbers/uuids/characteristic_uuids.yaml — and publishes GATT Specification Supplement files, one per characteristic it describes: 278 of them in gss/, each listing the fields of that characteristic’s value. Those files are what the pages here are built from.
The services in scope (13)
Chosen for heart rate monitors, cycling power and speed-and-cadence sensors, running sensors, fitness machines (treadmills, cross trainers, step and stair climbers, rowers, indoor bikes), weight scales, body composition analysers, glucose meters and CGMs, blood pressure monitors, pulse oximeters and thermometers, plus User Data. Names and UUIDs as assigned_numbers/uuids/service_uuids.yaml lists them. Only a permitted-characteristics file says which characteristics belong to a service, and only User Data has one among these.
| UUID | Service | Identifier | Characteristics the SIG lists for it |
|---|---|---|---|
| 0x1808 | Glucose | org.bluetooth.service.glucose | Not listed in the repository |
| 0x1809 | Health Thermometer | org.bluetooth.service.health_thermometer | Not listed in the repository |
| 0x180D | Heart Rate | org.bluetooth.service.heart_rate | Not listed in the repository |
| 0x1810 | Blood Pressure | org.bluetooth.service.blood_pressure | Not listed in the repository |
| 0x1814 | Running Speed and Cadence | org.bluetooth.service.running_speed_and_cadence | Not listed in the repository |
| 0x1816 | Cycling Speed and Cadence | org.bluetooth.service.cycling_speed_and_cadence | Not listed in the repository |
| 0x1818 | Cycling Power | org.bluetooth.service.cycling_power | Not listed in the repository |
| 0x181B | Body Composition | org.bluetooth.service.body_composition | Not listed in the repository |
| 0x181C | User Data | org.bluetooth.service.user_data | 39, in uds_permitted_characteristics.yaml (marked below) |
| 0x181D | Weight Scale | org.bluetooth.service.weight_scale | Not listed in the repository |
| 0x181F | Continuous Glucose Monitoring | org.bluetooth.service.continuous_glucose_monitoring | Not listed in the repository |
| 0x1822 | Pulse Oximeter | org.bluetooth.service.pulse_oximeter | Not listed in the repository |
| 0x1826 | Fitness Machine | org.bluetooth.service.fitness_machine | Not listed in the repository |
Every characteristic in scope (97)
In UUID order, the order of assigned_numbers/uuids/characteristic_uuids.yaml. A name links to its byte-layout page where the structure has at least two fields or a flags field; a structure with one field opens in place. The last column shows a service only where a permitted-characteristics file names one.
| UUID | Characteristic | Structure | Service per the SIG’s lists | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x2A08 | Date Timeorg.bluetooth.characteristic.date_time | 6 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A0D | DST Offsetorg.bluetooth.characteristic.dst_offsetStructureThe DST Offset characteristic is used to represent daylight saving time information associated with time.The structure of this characteristic is defined below. DST Offset uint8 · 1 Present when: Always (fixed size) 0: Standard Time2: Half an hour Daylight Time (+ 0.5h)4: Daylight Time (+ 1h)8: Double Daylight Time (+ 2h)255: DST offset unknownAll other values: Reserved for Future Use | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A0E | Time Zoneorg.bluetooth.characteristic.time_zoneStructureThe Time Zone characteristic is used to represent the time difference in 15-minute increments between local standard time and UTC.The structure of this characteristic is defined below. Time Zone sint8 · 1 Present when: Always (fixed size) This field represents the offset from UTC in number of 15-minute increments.Valid range from -48 to +56.A value of -128 means that the time zone offset is not known.All other values are Reserved for Future Use.The offset defined in this characteristic is constant regardless of whether daylight savings is in effect. | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A18 | Glucose Measurementorg.bluetooth.characteristic.glucose_measurement | 7 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A1C | Temperature Measurementorg.bluetooth.characteristic.temperature_measurement | 5 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A1D | Temperature Typeorg.bluetooth.characteristic.temperature_typeStructureThe Temperature Type characteristic is used to represent the location of a temperature measurement. These values correspond to the Temperature Type descriptions used in IEEE 11073-10408-2008 Temperature Type Description uint8 · 1 Present when: Always (fixed size) See Temperature Type DescriptionThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.temperature_type.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A1E | Intermediate Temperatureorg.bluetooth.characteristic.intermediate_temperature | 5 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A21 | Measurement Intervalorg.bluetooth.characteristic.measurement_intervalStructureThe Measurement Interval characteristic is used to represent the time between measurements.The structure of this characteristic is defined below. Measurement IntervalThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.measurement_interval.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A34 | Glucose Measurement Contextorg.bluetooth.characteristic.glucose_measurement_context | 12 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A35 | Blood Pressure Measurementorg.bluetooth.characteristic.blood_pressure_measurement | 11 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A36 | Intermediate Cuff Pressureorg.bluetooth.characteristic.intermediate_cuff_pressure | 9 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A37 | Heart Rate Measurementorg.bluetooth.characteristic.heart_rate_measurement | 5 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A38 | Body Sensor Locationorg.bluetooth.characteristic.body_sensor_locationStructureThe Body Sensor Location characteristic is used to represent the location of a sensor on a human body.The structure of this characteristic is defined below. Body Sensor LocationThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.body_sensor_location.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A39 | Heart Rate Control Pointorg.bluetooth.characteristic.heart_rate_control_pointStructureThe Heart Rate Control Point characteristic is used to enable device-specific procedures related to a heart rate sensor.The structure of this characteristic is defined below. Heart Rate Control PointThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.heart_rate_control_point.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A49 | Blood Pressure Featureorg.bluetooth.characteristic.blood_pressure_featureStructureThe Blood Pressure Feature characteristic is used to represent the supported features of a blood pressure sensor.The structure of this characteristic is defined below. Blood Pressure FeatureThe bits of this field are defined below.
Source: gss/org.bluetooth.characteristic.blood_pressure_feature.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A51 | Glucose Featureorg.bluetooth.characteristic.glucose_featureStructureThe Glucose Feature characteristic is used to represent the supported features of a glucose sensor.The structure of this characteristic is defined below. Glucose FeatureThe bits of this field are defined below.
Source: gss/org.bluetooth.characteristic.glucose_feature.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A52 | Record Access Control Pointorg.bluetooth.characteristic.record_access_control_point | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A53 | RSC Measurementorg.bluetooth.characteristic.rsc_measurement | 5 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A54 | RSC Featureorg.bluetooth.characteristic.rsc_featureStructureThe RSC Feature characteristic is used to represent the supported features of a running speed and cadence (RSC) sensor.The structure of this characteristic is defined below. RSC FeatureThe bits of this field are defined below.
| 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A55 | SC Control Pointorg.bluetooth.characteristic.sc_control_point | 2 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A5B | CSC Measurementorg.bluetooth.characteristic.csc_measurement | 3 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A5C | CSC Featureorg.bluetooth.characteristic.csc_featureStructureThe CSC Feature characteristic is used to represent the supported features of a cycling speed and cadence (CSC) sensor.The structure of this characteristic is defined below. CSC FeatureThe bits of this field are defined below.
| 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A5D | Sensor Locationorg.bluetooth.characteristic.sensor_locationStructureThe Sensor Location characteristic is used to represent the location of the sensor.The structure of this characteristic is defined below. Sensor LocationThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.sensor_location.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A5E | PLX Spot-Check Measurementorg.bluetooth.characteristic.plx_spot_check_measurement | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A5F | PLX Continuous Measurementorg.bluetooth.characteristic.plx_continuous_measurement | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A60 | PLX Featuresorg.bluetooth.characteristic.plx_features | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A63 | Cycling Power Measurementorg.bluetooth.characteristic.cycling_power_measurement | 12 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A64 | Cycling Power Vectororg.bluetooth.characteristic.cycling_power_vector | 5 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A65 | Cycling Power Featureorg.bluetooth.characteristic.cycling_power_featureStructureThe Cycling Power Feature characteristic is used to represent the supported features of a cycling power sensor.The structure of this characteristic is defined below. Cycling Power FeatureThe bits of this field are defined below.
Source: gss/org.bluetooth.characteristic.cycling_power_feature.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A66 | Cycling Power Control Pointorg.bluetooth.characteristic.cycling_power_control_point | 2 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A7E | Aerobic Heart Rate Lower Limitorg.bluetooth.characteristic.aerobic_heart_rate_lower_limitStructureThe Aerobic Heart Rate Lower Limit characteristic is used to represent the desired lower limit of the heart rate, where a user enhances his or her endurance while exercising.The structure of this characteristic is defined below. Aerobic Heart Rate Lower Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.aerobic_heart_rate_lower_limit.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A7F | Aerobic Thresholdorg.bluetooth.characteristic.aerobic_thresholdStructureThe Aerobic Threshold characteristic is used to represent the aerobic threshold of a user. Aerobic Threshold and Anaerobic Threshold characteristics together with the Sport Type For Aerobic And Anaerobic Thresholds characteristic describe the metabolic thresholds of the user. The Sport Type For Aerobic And Anaerobic Thresholds characteristic value identifies how the measurement was performed.The structure of this characteristic is defined below. Aerobic Threshold uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.aerobic_threshold.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A80 | Ageorg.bluetooth.characteristic.ageStructureThe Age characteristic is used to represent the age of a user.The structure of this characteristic is defined below. Age uint8 · 1 Present when: Always (fixed size) Unit: time (year) org.bluetooth.unit.time.year Unit: org.bluetooth.unit.time.year | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A81 | Anaerobic Heart Rate Lower Limitorg.bluetooth.characteristic.anaerobic_heart_rate_lower_limitStructureThe Anaerobic Heart Rate Lower Limit characteristic is used to represent the desired lower limit of the heart rate, where a user enhances his or her anaerobic tolerance while exercising.The structure of this characteristic is defined below. Anaerobic Heart Rate Lower Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.anaerobic_heart_rate_lower_limit.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A82 | Anaerobic Heart Rate Upper Limitorg.bluetooth.characteristic.anaerobic_heart_rate_upper_limitStructureThe Anaerobic Heart Rate Upper Limit characteristic is used to represent the desired upper limit of the heart rate, where a user enhances his or her anaerobic tolerance while exercising.The structure of this characteristic is defined below. Anaerobic Heart Rate Upper Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.anaerobic_heart_rate_upper_limit.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A83 | Anaerobic Thresholdorg.bluetooth.characteristic.anaerobic_thresholdStructureThe Anaerobic Threshold characteristic is used to represent the anaerobic threshold of a user. The Aerobic Threshold and Anaerobic Threshold characteristics together with the Sport Type For Aerobic And Anaerobic Thresholds characteristic describe the metabolic thresholds of the user. The Sport Type For Aerobic And Anaerobic Thresholds characteristic value identifies how the measurement was performed.The structure of this characteristic is defined below. Anaerobic Threshold uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.anaerobic_threshold.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A84 | Aerobic Heart Rate Upper Limitorg.bluetooth.characteristic.aerobic_heart_rate_upper_limitStructureThe Aerobic Heart Rate Upper Limit characteristic is used to represent the desired upper limit of the heart rate, where a user enhances his or her endurance while exercising.The structure of this characteristic is defined below. Aerobic Heart Rate Upper Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.aerobic_heart_rate_upper_limit.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A85 | Date of Birthorg.bluetooth.characteristic.date_of_birth | 3 fields | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A86 | Date of Threshold Assessmentorg.bluetooth.characteristic.date_of_threshold_assessment | 3 fields | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A87 | Email Addressorg.bluetooth.characteristic.email_addressStructureThe Email Address characteristic is used to represent the email address of a user.The structure of this characteristic is defined below. Email Address utf8s · variable Present when: Not stated in the field's text UTF-8 string | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A88 | Fat Burn Heart Rate Lower Limitorg.bluetooth.characteristic.fat_burn_heart_rate_lower_limitStructureThe Fat Burn Heart Rate Lower Limit characteristic is used to represent the desired lower limit of the heart rate, where a user maximizes the fat burn while exercising.The structure of this characteristic is defined below. Fat Burn Heart Rate Lower Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.fat_burn_heart_rate_lower_limit.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A89 | Fat Burn Heart Rate Upper Limitorg.bluetooth.characteristic.fat_burn_heart_rate_upper_limitStructureThe Fat Burn Heart Rate Upper Limit characteristic is used to represent the desired upper limit of the heart rate, where a user maximizes the fat burn while exercising.The structure of this characteristic is defined below. Fat Burn Heart Rate Upper Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.fat_burn_heart_rate_upper_limit.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A8A | First Nameorg.bluetooth.characteristic.first_nameStructureThe First Name characteristic is used to represent the first name of a user.The structure of this characteristic is defined below. First Name utf8s · variable Present when: Not stated in the field's text UTF-8 string | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A8B | Five Zone Heart Rate Limitsorg.bluetooth.characteristic.five_zone_heart_rate_limits | 4 fields | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A8C | Genderorg.bluetooth.characteristic.genderStructureThe Gender characteristic is used to represent the gender of a user.The structure of this characteristic is defined below. Gender uint8 · 1 Present when: Always (fixed size) 0: Male1: Female2: Unspecified3–255: Reserved for Future Use | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A8D | Heart Rate Maxorg.bluetooth.characteristic.heart_rate_maxStructureThe Heart Rate Max characteristic is used to represent the maximum heart rate of a user which the user intends not to exceed.The structure of this characteristic is defined below. Heart Rate Max uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.heart_rate_max.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A8E | Heightorg.bluetooth.characteristic.heightStructureThe Height characteristic is used to represent the height of a user.The structure of this characteristic is defined below. Height uint16 · 2 Present when: Always (fixed size) Unit: not an id in units.yaml org.bluetooth.unit.length.meter Base Unit: org.bluetooth.unit.length.meterRepresented values: M = 1, d = -2, b = 0Unit is 0.01 meter. | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A8F | Hip Circumferenceorg.bluetooth.characteristic.hip_circumferenceStructureThe Hip Circumference characteristic is used to represent the hip circumference measurement of a user.The structure of this characteristic is defined below. Hip Circumference uint16 · 2 Present when: Always (fixed size) Unit: not an id in units.yaml org.bluetooth.unit.length.meter Base Unit: org.bluetooth.unit.length.meterRepresented values: M = 1, d = -2, b = 0Unit is 0.01 meter. Source: gss/org.bluetooth.characteristic.hip_circumference.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A90 | Last Nameorg.bluetooth.characteristic.last_nameStructureThe Last Name characteristic is used to represent the last name of a user.The structure of this characteristic is defined below. Last Name utf8s · variable Present when: Not stated in the field's text UTF-8 string | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A91 | Maximum Recommended Heart Rateorg.bluetooth.characteristic.maximum_recommended_heart_rateStructureThe Maximum Recommended Heart Rate characteristic is used to represent the maximum recommended heart rate of a user. Maximum recommended heart rate is a threshold that is intended to be set to limit exertion. The maximum recommended heart rate is less than or equal to the maximum heart rate recommended for a user.The structure of this characteristic is defined below. Maximum Recommended Heart Rate uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.maximum_recommended_heart_rate.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A92 | Resting Heart Rateorg.bluetooth.characteristic.resting_heart_rateStructureThe Resting Heart Rate characteristic is used to represent the resting heart rate of a user.The structure of this characteristic is defined below. Resting Heart Rate uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.resting_heart_rate.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A93 | Sport Type for Aerobic and Anaerobic Thresholdsorg.bluetooth.characteristic.sport_type_for_aerobic_and_anaerobic_thresholdsStructureThe Sport Type for Aerobic and Anaerobic Thresholds characteristic is used to represent the sport type applicable to aerobic and anaerobic thresholds for a user. The value identifies how the measurement(s) were performed. The Aerobic Threshold and Anaerobic Threshold characteristics together with the Sport Type For Aerobic And Anaerobic Thresholds characteristic describe the metabolic thresholds of the user.The structure of this characteristic is defined below. Sport Type for Aerobic and Anaerobic Thresholds uint8 · 1 Present when: Always (fixed size) Sport Type for Aerobic and Anaerobic ThresholdsThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.sport_type_for_aerobic_and_anaerobic_thresholds.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A94 | Three Zone Heart Rate Limitsorg.bluetooth.characteristic.three_zone_heart_rate_limits | 2 fields | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A95 | Two Zone Heart Rate Limitsorg.bluetooth.characteristic.two_zone_heart_rate_limitsStructureThe Two Zone Heart Rate Limits characteristic is used to represent the heart rate limit between the heart rate zones for the two-zone heart rate definition (Fitness and Fat Burn) of a user.The structure of this characteristic is defined below. Two Zone Heart Rate Limit - Fat Burn / Fitness Limit uint8 · 1 Present when: Always (fixed size) Unit: period (beats per minute) org.bluetooth.unit.period.beats_per_minute Unit: org.bluetooth.unit.period.beats_per_minute Source: gss/org.bluetooth.characteristic.two_zone_heart_rate_limits.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A96 | VO2 Maxorg.bluetooth.characteristic.vo2_maxStructureThe VO2 Max characteristic is used to represent the maximal oxygen uptake of a user.The structure of this characteristic is defined below. VO2 Max uint8 · 1 Present when: Always (fixed size) Unit: milliliter (per kilogram per minute) org.bluetooth.unit.transfer_rate.milliliter_per_kilogram_per_minute Unit: org.bluetooth.unit.transfer_rate.milliliter_per_kilogram_per_minute | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A97 | Waist Circumferenceorg.bluetooth.characteristic.waist_circumferenceStructureThe Waist Circumference characteristic is used to represent the waist measurement of a user.The structure of this characteristic is defined below. Waist Circumference uint16 · 2 Present when: Always (fixed size) Unit: not an id in units.yaml org.bluetooth.unit.length.meter Base Unit: org.bluetooth.unit.length.meterRepresented values: M = 1, d = -2, b = 0Unit is 0.01 meter. Source: gss/org.bluetooth.characteristic.waist_circumference.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A98 | Weightorg.bluetooth.characteristic.weightStructureThe Weight characteristic is used to represent the weight of a user.The structure of this characteristic is defined below. Weight uint16 · 2 Present when: Always (fixed size) Unit: mass (kilogram) org.bluetooth.unit.mass.kilogram Base Unit: org.bluetooth.unit.mass.kilogramRepresented values: M = 5, d = -3, b = 0Unit is 0.005 kilogram. | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A9B | Body Composition Featureorg.bluetooth.characteristic.body_composition_featureStructureThe Body Composition Feature characteristic is used to represent the supported features of a body composition sensor.The structure of this characteristic is defined below. Body Composition Feature boolean[32] · 4 Present when: Always (fixed size) Body Composition FeatureThe bits of this field are defined below.
Source: gss/org.bluetooth.characteristic.body_composition_feature.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A9C | Body Composition Measurementorg.bluetooth.characteristic.body_composition_measurement | 13 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A9D | Weight Measurementorg.bluetooth.characteristic.weight_measurement | 6 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A9E | Weight Scale Featureorg.bluetooth.characteristic.weight_scale_featureStructureThe Weight Scale Feature characteristic is used to represent the supported features of a weight scale.The structure of this characteristic is defined below. Weight Scale FeatureThe bits of this field are defined below.
Source: gss/org.bluetooth.characteristic.weight_scale_feature.yaml | 1 field | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AA2 | Languageorg.bluetooth.characteristic.languageStructureThe Language characteristic is used to represent the preferred language of a user.The Language definition is based on ISO 639-1 Language utf8s · variable Present when: Not stated in the field's text UTF-8 string | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AA7 | CGM Measurementorg.bluetooth.characteristic.cgm_measurement | 1 field · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AA8 | CGM Featureorg.bluetooth.characteristic.cgm_feature | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AA9 | CGM Statusorg.bluetooth.characteristic.cgm_status | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AAA | CGM Session Start Timeorg.bluetooth.characteristic.cgm_session_start_time | 4 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AAB | CGM Session Run Timeorg.bluetooth.characteristic.cgm_session_run_time | 2 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AAC | CGM Specific Ops Control Pointorg.bluetooth.characteristic.cgm_specific_ops_control_point | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2ACC | Fitness Machine Featureorg.bluetooth.characteristic.fitness_machine_feature | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2ACD | Treadmill Dataorg.bluetooth.characteristic.treadmill_data | 19 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2ACE | Cross Trainer Dataorg.bluetooth.characteristic.cross_trainer_data | 21 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2ACF | Step Climber Dataorg.bluetooth.characteristic.step_climber_data | 13 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD0 | Stair Climber Dataorg.bluetooth.characteristic.stair_climber_data | 13 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD1 | Rower Dataorg.bluetooth.characteristic.rower_data | 17 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD2 | Indoor Bike Dataorg.bluetooth.characteristic.indoor_bike_data | 16 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD3 | Training Statusorg.bluetooth.characteristic.training_status | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD4 | Supported Speed Rangeorg.bluetooth.characteristic.supported_speed_range | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD5 | Supported Inclination Rangeorg.bluetooth.characteristic.supported_inclination_range | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD6 | Supported Resistance Level Rangeorg.bluetooth.characteristic.supported_resistance_level_range | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD7 | Supported Heart Rate Rangeorg.bluetooth.characteristic.supported_heart_rate_range | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD8 | Supported Power Rangeorg.bluetooth.characteristic.supported_power_range | 3 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2AD9 | Fitness Machine Control Pointorg.bluetooth.characteristic.fitness_machine_control_point | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2ADA | Fitness Machine Statusorg.bluetooth.characteristic.fitness_machine_status | No gss file | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B34 | Enhanced Blood Pressure Measurementorg.bluetooth.characteristic.enhanced_blood_pressure_measurement | 8 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B35 | Enhanced Intermediate Cuff Pressureorg.bluetooth.characteristic.enhanced_intermediate_cuff_pressure | 7 fields · Flags | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B36 | Blood Pressure Recordorg.bluetooth.characteristic.blood_pressure_record | 5 fields | — | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B46 | Preferred Unitsorg.bluetooth.characteristic.preferred_unitsStructureThe Preferred Units characteristic is the list of units the user prefers.The structure of this characteristic is defined below. UnitsThis field is an array of 16-bit UUIDs from the available units defined in the Bluetooth SIG Assigned Numbers Source: gss/org.bluetooth.characteristic.preferred_units.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B47 | High Resolution Heightorg.bluetooth.characteristic.high_resolution_heightStructureThe High Resolution Height characteristic is used to represent the height of a user and is used when a resolution of 0.1 mm is required.The structure of this characteristic is defined below. Height uint16 · 2 Present when: Always (fixed size) Unit: not an id in units.yaml org.bluetooth.unit.length.meter Base Unit: org.bluetooth.unit.length.meterRepresented values: M = 1, d = -4, b = 0Unit is meter with 0.0001 m (e.g., 0.1 mm) Source: gss/org.bluetooth.characteristic.high_resolution_height.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B48 | Middle Nameorg.bluetooth.characteristic.middle_nameStructureThe Middle Name characteristic is used to represent the middle name of a user.The structure of this characteristic is defined below. Middle Name utf8s · variable Present when: Not stated in the field's text UTF-8 string | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B49 | Stride Lengthorg.bluetooth.characteristic.stride_lengthStructureThe Stride Length characteristic is used to represent the stride length of a user.The structure of this characteristic is defined below. Stride Length uint16 · 2 Present when: Always (fixed size) Unit: length (metre) org.bluetooth.unit.length.metre Base Unit: org.bluetooth.unit.length.metreRepresented values: M = 1, d = -3, b = 0Unit is meter with a resolution of 0.001 m (e.g., 1 mm) | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B4A | Handednessorg.bluetooth.characteristic.handednessStructureThe Handedness characteristic is used to represent the handedness of a user.The structure of this characteristic is defined below. HandednessThe values of this field are defined below.
| 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B4B | Device Wearing Positionorg.bluetooth.characteristic.device_wearing_positionStructureThe Device Wearing Position characteristic is used to represent the position where a user is wearing the device.The structure of this characteristic is defined below. Device Wearing PositionThe values of this field are defined below.
Source: gss/org.bluetooth.characteristic.device_wearing_position.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B4C | Four Zone Heart Rate Limitsorg.bluetooth.characteristic.four_zone_heart_rate_limits | 3 fields | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B4D | High Intensity Exercise Thresholdorg.bluetooth.characteristic.high_intensity_exercise_threshold | 5 fields | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B4E | Activity Goalorg.bluetooth.characteristic.activity_goal | 8 fields · Flags | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B4F | Sedentary Interval Notificationorg.bluetooth.characteristic.sedentary_interval_notificationStructureThe Sedentary Interval Notification characteristic is used to represent the sedentary interval notification of a user. The sedentary interval notification is the sedentary time interval after which a user wants to be notified.The structure of this characteristic is defined below. Sedentary Interval Notification uint16 · 2 Present when: Always (fixed size) Unit: time (second) org.bluetooth.unit.time.second Unit: org.bluetooth.unit.time.secondSee Sedentary Interval Notification Sedentary Interval NotificationA value of 0x0000 in the Sedentary Interval Notification field represents that the user does not want to be notified about sedentary intervals. Source: gss/org.bluetooth.characteristic.sedentary_interval_notification.yaml | 1 field | User Data (0x181C) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2B50 | Caloric Intakeorg.bluetooth.characteristic.caloric_intakeStructureThe Caloric Intake characteristic is used to represent the calorie intake per day of a user.The structure of this characteristic is defined below. Caloric Intake uint16 · 2 Present when: Always (fixed size) Unit: energy (kilogram calorie) org.bluetooth.unit.energy.kilogram_calorie Unit: org.bluetooth.unit.energy.kilogram_calorie Source: gss/org.bluetooth.characteristic.caloric_intake.yaml | 1 field | User Data (0x181C) |
How a Flags field makes fields optional
In the SIG’s files a field that is not always there is published with a size such as “0 or 2” and a line that says when it is present. Heart Rate Measurement (0x2A37) shows the pattern. Its first field is Flags, a boolean[8] of size 1, whose bits the file defines (“The bits of this field are defined below.”), and each later field states its own condition:
| Field | Size | The SIG’s line |
|---|---|---|
| Flags | 1 | — |
| 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 |
Bit 0 of that Flags field is defined in the file as:
Heart Rate Value Format:0 = Heart Rate Value Format is set to uint81 = Heart Rate Value Format is set to uint16
So Heart Rate Measurement Value (8 bit resolution) is present when bit 0 is 0, and Heart Rate Measurement Value (16 bit resolution) when it is 1. The same shape runs through the scope: of the 335 structure fields, 193 have a “0 or N” size and 184 of those carry a “Present if bit N of … field is set to …” line. 16 of the conditions are met by a bit that is 0 rather than 1, among them Temperature Measurement’s Temperature Measurement Value (Celsius), Intermediate Temperature’s Intermediate Temperature (Celsius), Blood Pressure Measurement’s Blood Pressure Measurement Compound Value - Systolic (mmHg) and Blood Pressure Measurement’s Blood Pressure Measurement Compound Value - Diastolic (mmHg) and 12 more. Because any of these may be absent, a field’s position depends on the fields before it, which is why the layout tables print an offset only where every earlier field has a fixed size.
In scope, with no structure in the repository (7)
These have a UUID in assigned_numbers/uuids/characteristic_uuids.yaml but no file in gss/ at commit 408f4a0, so this reference prints no byte layout for them:
- PLX Spot-Check Measurement 0x2A5E
- PLX Continuous Measurement 0x2A5F
- PLX Features 0x2A60
- Fitness Machine Feature 0x2ACC
- Training Status 0x2AD3
- Fitness Machine Control Point 0x2AD9
- Fitness Machine Status 0x2ADA
Reading these pages
- Names, types, sizes and text are copied from the SIG’s files. Sizes count octets, except in a struct the file marks as sized in bits: Cycling Power Measurement’s Extreme Angles, whose two 12-bit values, its text says, “are concatenated into a uint24 value (3 octets)”.
- An offset is a sum of the sizes before a field and is printed only where all of them are plain numbers. “Present when” is the field’s own “Present if bit N of … field is set to …” line, parsed; any other wording is shown as written.
- A unit is every
org.bluetooth.unit…id in a field’s text, named fromassigned_numbers/uuids/units.yamlwhere that file has exactly that id. Where it does not (the text writesorg.bluetooth.unit.mass_density.kilogram_per_liter, for instance), the id is shown as written and flagged. - Cross-references in the SIG’s text become links where they point at a characteristic or definition here. One to a section the YAML files do not include is shown as “§ label”, and a bibliography key as “[key]”.
- The 97 were chosen by this site: 55 for the device categories above, the 39 on the SIG’s User Data list, and the 3 those structures refer to. The list is in
scripts/fetch-bluetooth-gatt.mjs.
Questions
Which Bluetooth GATT characteristics does this fitness device reference cover?
97: 55 chosen for heart rate monitors, cycling power and speed-and-cadence sensors, running sensors, fitness machines (treadmills, cross trainers, step and stair climbers, rowers, indoor bikes), weight scales, body composition analysers, glucose meters and CGMs, blood pressure monitors, pulse oximeters and thermometers; the 39 on the Bluetooth SIG's User Data list; and the 3 characteristics those structures refer to (Date Time, DST Offset and Time Zone). 90 have a structure in the SIG's GATT Specification Supplement files, and the 44 with at least two fields or a flags field have a page of their own.
Does the Bluetooth SIG publish which characteristics belong to each GATT service?
Not in its public repository, apart from 4 permitted-characteristics lists: Cookware (0x185D, 3 characteristics), Environmental Sensing (0x181A, 31 characteristics), Industrial Measurement Device (0x185A, 7 characteristics) and User Data (0x181C, 39 characteristics). Every other file assigns UUIDs to services and to characteristics in separate lists, so this reference ties a characteristic to a service only where one of those lists does, which here means the 39 User Data characteristics.
Why do some characteristics in this Bluetooth reference have no byte layout?
Because the SIG's repository at commit 408f4a0 (branch main, committed 2026-10-14) has no GATT Specification Supplement file for them: PLX Spot-Check Measurement (0x2A5E), PLX Continuous Measurement (0x2A5F), PLX Features (0x2A60), Fitness Machine Feature (0x2ACC), Training Status (0x2AD3), Fitness Machine Control Point (0x2AD9) and Fitness Machine Status (0x2ADA). Their UUIDs and names come from characteristic_uuids.yaml; no structure is printed for a characteristic whose structure was not read.
What does a size of “0 or 2” mean in the Bluetooth SIG's GATT structures?
That the field is either absent or 2 octets long. Of the 335 structure fields in scope, 193 have a size of that “0 or N” form, and 184 of those carry a line such as “Present if bit 3 of Flags field is set to 1” saying when the field is there; 16 conditions are met when the bit is 0, not 1. Because a field may be absent, this reference prints an offset only where every earlier field has a fixed size.
Where does this Bluetooth GATT data come from, and under what terms?
From the Bluetooth SIG's public repository on Bitbucket (bitbucket.org/bluetooth-SIG/public), branch main at commit 408f4a0, committed 2026-10-14 and read 2026-10-17. The repository has no README or licence file; every file carries the same notice, which says “This document is proprietary to Bluetooth SIG.” and “The furnishing of this document does not grant any license to any intellectual property of Bluetooth SIG or its members.” The SIG's text is quoted here with that attribution; this site is not affiliated with Bluetooth SIG.
Source and terms
Read on 2026-10-17 from the Bluetooth SIG’s public repository, bitbucket.org/bluetooth-SIG/public (“Public YAML files for Bluetooth SIG Assigned Numbers, GATT Specification Supplement, and Device Properties”), branch main at commit 408f4a0, committed 2026-10-14, as one archive of that commit, by scripts/fetch-bluetooth-gatt.mjs. 285 files were read. The repository has no README or licence file; every one of those files opens with the same notice, reproduced below. The SIG’s text is quoted on these pages with that attribution and is not relicensed by this site, and the open dataset built from this reference carries the structural facts, not the SIG’s descriptions. AIFitnessAPI is not affiliated with Bluetooth SIG, Inc., which owns the Bluetooth word mark and logos; the SIG’s files remain the authority.
The notice in every file, verbatim
This document, regardless of its title or content, is not a Bluetooth Specification as defined in the Bluetooth Patent/Copyright License Agreement (“PCLA”) and Bluetooth Trademark License Agreement. Use of this document by members of Bluetooth SIG is governed by the membership and other related agreements between Bluetooth SIG Inc. (“Bluetooth SIG”) and its members, including the PCLA and other agreements posted on Bluetooth SIG’s website located at www.bluetooth.com.
THIS DOCUMENT IS PROVIDED “AS IS” AND BLUETOOTH SIG, ITS MEMBERS, AND THEIR AFFILIATES MAKE NO REPRESENTATIONS OR WARRANTIES AND DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT, FITNESS FOR ANY PARTICULAR PURPOSE, THAT THE CONTENT OF THIS DOCUMENT IS FREE OF ERRORS.
TO THE EXTENT NOT PROHIBITED BY LAW, BLUETOOTH SIG, ITS MEMBERS, AND THEIR AFFILIATES DISCLAIM ALL LIABILITY ARISING OUT OF OR RELATING TO USE OF THIS DOCUMENT AND ANY INFORMATION CONTAINED IN THIS DOCUMENT, INCLUDING LOST REVENUE, PROFITS, DATA OR PROGRAMS, OR BUSINESS INTERRUPTION, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, AND EVEN IF BLUETOOTH SIG, ITS MEMBERS, OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
This document is proprietary to Bluetooth SIG. This document may contain or cover subject matter that is intellectual property of Bluetooth SIG and its members. The furnishing of this document does not grant any license to any intellectual property of Bluetooth SIG or its members.
This document is subject to change without notice.
Copyright © 2020–2026 by Bluetooth SIG, Inc. The Bluetooth word mark and logos are owned by Bluetooth SIG, Inc. Other third-party brands and names are the property of their respective owners.
The structural facts are also published as an open dataset: Bluetooth fitness GATT characteristics.