The Flexible and Interoperable Data Transfer (FIT) protocol is designed specifically for the storing and sharing of data that originates from sport, fitness and health devices. The FIT protocol defines a set of data storage templates (FIT messages) that can be used to store information such as user profiles, activity data, courses, and workouts. It is specifically designed to be compact, interoperable and extensible.
Files from different manufacturer (and even for some different products) are all slightly different and this can cause problems for software trying to load the FIT file. This document provides a summary of these differences in the data frames.
The official developer page is quite a useful resource for anyone requiring a detailed understanding of the FIT protocol.
There are a couple of useful data frames, providing device information:
Track data is is stored in “record” data frames:
Note: The enhanced_altitude and enhanced_speed are just 32-bit versions of altitude and speed which are 16-bit, thus capable of storing larger numbers.
The device information frames appear to be standard for all devices from a particular brand.
Garmin files always contain many device_info frames but the ones that are relevant all contain a serial number.
COROS | Garmin | |
---|---|---|
serial_number | - | Yes |
manufacturer | 294 | 1 |
product_name | COROS APEX Pro | - |
garmin_product | - | Yes |
software_version | - | Yes |
Notes:
The file identification frame appears to be standard for all devices from a particular brand.
The table below provides a single file_id example for each brand:
COROS | Garmin | Suunto | Timex | |
---|---|---|---|---|
e.g. APEX Pro | e.g. Fenix 5 | e.g. Ambit3 | e.g. Ironman | |
serial_number | - | 3949903342 | - | 4294967295 |
manufacturer | 294 | 1 | 23 | 16 |
product | 841 | - | 23 | 87 |
product_name | COROS APEX Pro | - | Suunto Ambit3 Sport | Timex Ironman GPS |
garmin_product | - | 2697 | - | - |
Notes:
The record frames are the most important content of the FIT files.
Each brand (and sometimes model) will contain slightly different data which is illustrated in the table below:
COROS | Garmin | Garmin | Suunto | Timex | |
---|---|---|---|---|---|
APEX Pro VERTIX VERTIX 2 |
Fenix 3 Fenix 5 Vivoactive 3 |
Fenix 6 Fenix 7 |
Ambit3 | Ironman | |
timestamp | Yes | Yes | Yes | Yes | Yes |
position_lat | Yes | Yes | Yes | Yes | Yes |
position_long | Yes | Yes | Yes | Yes | Yes |
altitude | - | Yes | - | Yes 2 | Yes |
enhanced_altitude 0 | - | Yes | Yes | Yes 2 | Yes |
distance | Yes | Yes | Yes | Yes 2 | Yes 3 |
speed | Yes | Yes | - | Yes 2 | Yes 3 |
enhanced_speed 0 | Yes | Yes | Yes | Yes 2 | Yes 3 |
vertical_speed | - | - | - | Yes 2 | - |
Sat | Yes 1 | - | - | - | - |
hdop | Yes 1 | - | - | - | - |
cog | Yes 1 | - | - | - | - |
0 The enhanced_altitude and enhanced_speed are just 32-bit versions of altitude and speed which are 16-bit, thus capable of storing larger numbers.
1 The APEX Pro, VERTIX and VERTIX 2 use “developer fields” to record Satellites, HDOP and COG.
2 The Ambit 3 will sometimes record individual frames containing just timestamp, position_lat and position_long.
3 The Ironman records multiple frames with the same timestamp. These frames must therefore be combined for subsequent analysis.