Unknown FIT message types — the numbers the SDK does not name

FIT files contain message types the SDK has no name for. That is normal, it is readable, and refusing the file over it is the wrong response. Here is what actually appears in real files.

Open your file

Drop your file here

a .fit file with message types your tool did not recognise

No account. No upload. The file is read on this device and never leaves it.

Nothing has been sent anywhere. 0 requests to this site, for the page's own code.

Why unnamed messages exist

Every FIT message carries a global message number. The SDK profile maps some of those numbers to names — 20 is record, 18 is session. Manufacturers are free to use numbers the profile does not cover, and the profile itself is revised: our corpus contains 241 distinct profile versions, so "the SDK" is not one thing.

The important structural point: an unnamed message is still fully readable. Its definition message states its field numbers, sizes and types, so a parser knows exactly how to walk it. What it loses is the human-readable name, not the data.

What is actually in real files

Across 68,068 files we see 79 message types that carry data, of which 1 is unnamed by the profile we build against (profile.xlsx:250986b:1407f:126m): message number 69.

That number is lower than you might expect, and the reason is worth stating precisely, because it is the difference between two true statements. We count messages that produced data. A message type that appears in a file but which our mapping does not yet turn into a measurement is invisible to this count — so "79 message types" is a claim about what reaches a user, not about what the format contains.

The full list, most useful as a check against your own file:

69 · aad_accel_features · accelerometer_data · activity · ant_rx · ant_tx · aviation_attitude · barometer_data · beat_intervals · blood_pressure · camera_event · chrono_shot_data · chrono_shot_session · climb_pro · course_point · dev · device_aux_battery_info · device_info · device_settings · dive_settings · dive_summary · event · file_id · goal · gps_metadata · gyroscope_data · hr · hrv_status_summary · hrv_value · hsa_accelerometer_data · hsa_body_battery_data · hsa_configuration_data · hsa_event · hsa_gyroscope_data · hsa_heart_rate_data · hsa_respiration_data · hsa_spo2_data · hsa_step_data · hsa_stress_data · hsa_wrist_temperature_data · jump · lap · length · magnetometer_data · max_met_data · monitoring · monitoring_hr_data · monitoring_info · nap_event · nmea_sentence · obdii_data · ohr_settings · one_d_sensor_calibration · raw_bbi · record · respiration_rate · schedule · segment_lap · session · set · skin_temp_overnight · sleep_disruption_overnight_severity · sleep_disruption_severity_period · sleep_level · split · spo2_data · stress_level · tank_summary · tank_update · three_d_sensor_calibration · time_in_zone · timestamp_correlation · totals · training_file · video_clip · video_frame · weather_alert · weather_conditions · weight_scale

What a parser should do