Documentation Index
Fetch the complete documentation index at: https://mintlify.com/bWanShiTong/reverse-engineering-whoop-post/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Whoop 4.0 can be manually triggered to start and stop activity recording. When an activity is started, the device begins streaming real-time data including heart rate, RR intervals, and other metrics via theDATA_FROM_STRAP characteristic.
Activity Commands
Activity control uses the same packet format as other device commands:Packet Structure
| Offset | Size | Field | Description |
|---|---|---|---|
| 0x00 | 5 bytes | Header | Always aa0800a823 |
| 0x05 | 1 byte | Packet Count | Increments with each packet |
| 0x06 | 1 byte | Category | 0x03 for activity/recording control |
| 0x07 | 1 byte | State | 0x00 = Stop, 0x01 = Start |
| 0x08 | 4 bytes | Checksum | CRC-32 with custom parameters |
Starting an Activity
Using gatttool
Using Python
Enable notifications onDATA_FROM_STRAP to receive real-time activity data:
Activity Data Format
When an activity is running, the device sends 24-byte packets onDATA_FROM_STRAP every second:
Packet Breakdown
| Offset | Size | Field | Description |
|---|---|---|---|
| 0x00 | 5 bytes | Header | aa1800ff2802 |
| 0x05 | 4 bytes | Unix Time | Little-endian timestamp |
| 0x09 | 2 bytes | Unknown | Purpose unclear |
| 0x0B | 1 byte | Heart Rate | BPM value |
| 0x0C | 1 byte | RR Count | Number of RR intervals |
| 0x0D | 8 bytes | RR Data | RR interval values |
| 0x15 | 3 bytes | Unknown | Purpose unclear |
| 0x18 | 4 bytes | Checksum | CRC-32 |
Real-Time Data Example
Parsing the first packet:- Header:
aa1800ff2802 - Unix Time:
6665896ad(little-endian) = specific timestamp - Heart Rate:
42= 66 BPM - RR Count:
01= 1 interval in this packet - RR Data:
6706= RR interval value - Checksum:
3ba00d4d
Command Categories
The category byte (0x03) is used for multiple recording-related functions:
| Command | Category | Value | Description |
|---|---|---|---|
| Start Activity | 0x03 | 0x01 | Begin activity recording |
| Stop Activity | 0x03 | 0x00 | End activity recording |
| Sleep Start | 0x03 | 0x00 | Special sleep tracking mode |
Characteristics Used
CMD_TO_STRAP (Control)
- UUID:
61080002-8d6d-82b8-614a-1c8cb0f8dcc6 - Handle:
0x0010 - Properties: Write only
- Purpose: Send start/stop commands
DATA_FROM_STRAP (Real-time Data)
- UUID:
61080005-8d6d-82b8-614a-1c8cb0f8dcc6 - Handle:
0x0018 - Properties: Notify
- Purpose: Receive real-time activity data
- Update Rate: ~1 second during activity
Related Commands
Other commands that trigger similar data streams:0x03 and trigger data notifications on DATA_FROM_STRAP.
Stopping Data Stream
Send the stop command to end the activity and stop notifications:DATA_FROM_STRAP notifications will cease immediately.
Use Cases
- Manual activity logging: Start tracking when automatic detection fails
- Custom workout apps: Build your own activity tracking interface
- Real-time monitoring: Stream live heart rate and RR data during workouts
- Data collection: Gather raw sensor data for analysis
Notes
The packet count field is not validated. You can reuse the same count value across multiple commands.