Overview
The Whoop 4.0 device communicates primarily through Bluetooth Low Energy (BLE) using a custom service alongside the standard Heart Rate service. Most data exchange between the device and app occurs through theCUSTOM SERVICE.
Standard Services
Heart Rate Service
The device exposes a standard BLE Heart Rate service, which means heart rate data can be read without additional reverse engineering. However, this service must be enabled through the custom service (see Broadcast Heart Rate).Custom Service
The custom service contains five characteristics that handle commands, events, and data transfer:| Characteristic UUID | Name | Writable | Readable | Notifiable | Handle |
|---|---|---|---|---|---|
| 0x61080002 | CMD_TO_STRAP | ✓ | - | - | 0x0010 |
| 0x61080003 | CMD_FROM_STRAP | - | - | ✓ | 0x0012 |
| 0x61080004 | EVENTS_FROM_STRAP | - | - | ✓ | 0x0015 |
| 0x61080005 | DATA_FROM_STRAP | - | - | ✓ | 0x0018 |
| 0x61080007 | MEMFAULT | - | - | ✓ | 0x001b |
Characteristic names were extracted from the decompiled APK.
CMD_TO_STRAP (0x61080002)
This is the only writable characteristic in the custom service. All commands sent to the device use this characteristic. Full UUID:61080002-8d6d-82b8-614a-1c8cb0f8dcc6
Handle: 0x0010
Example commands:
CMD_FROM_STRAP (0x61080003)
Receives notification responses from certain commands sent to the device. Full UUID:61080003-8d6d-82b8-614a-1c8cb0f8dcc6
Handle: 0x0012
EVENTS_FROM_STRAP (0x61080004)
Receives event notifications from the device. These packets contain timestamps and event data, though their exact purpose is still being researched. Full UUID:61080004-8d6d-82b8-614a-1c8cb0f8dcc6
Handle: 0x0015
Example packets:
DATA_FROM_STRAP (0x61080005)
Receives continuous data notifications from the device, including:- Real-time heart rate data during activities
- Respiratory rate (RR) data
- Historical data during sync operations
61080005-8d6d-82b8-614a-1c8cb0f8dcc6
Handle: 0x0018
Example real-time data:
MEMFAULT (0x61080007)
Purpose currently unknown, likely related to crash reporting or diagnostics. Full UUID:61080007-8d6d-82b8-614a-1c8cb0f8dcc6
Handle: 0x001b
Broadcast Heart Rate
The standard Heart Rate service must be explicitly enabled through the custom service:Connection Methods
Multiple tools can be used to connect to the Whoop 4.0:Using pygatt (Python)
Using gatttool (Command Line)
Using bleak (Python, for notifications)
Wireshark Capture
To capture BLE traffic for analysis:- Enable Bluetooth HCI snoop logging in Android Developer Settings
- Extract logs:
- Or stream live:
-
Filter for
btattto see only Bluetooth Attribute Protocol packets - Further filter for specific handles: