Skip to content

Activity Fields

FitRepo extracts 25+ fields from each FIT file. Fields that aren’t present in a given activity are stored as null.

FieldTypeDescription
idUUIDFitRepo internal ID
user_idUUIDOwner
sourcestringHow the activity was received: wahoo_webhook or wahoo_backfill
wahoo_idstringWahoo workout summary ID
namestringActivity name
sportstringSport category (e.g. cycling, running)
sport_typestringDetailed sport type from FIT file (e.g. road, trail)
started_attimestamptzActivity start time (UTC)
created_attimestamptzWhen FitRepo received the activity
FieldTypeUnitDescription
duration_secsintegersecondsTotal elapsed time
timer_secsintegersecondsMoving time (excludes pauses)
distance_metersrealmetresTotal distance
ascent_metersrealmetresTotal ascent
FieldTypeUnitDescription
avg_powerrealwattsAverage power
normalized_powerrealwattsNormalised Power (NP) — accounts for variability
max_powerrealwattsPeak 1-second power
intensity_factorrealIF = NP ÷ FTP (requires FTP to be set)
tssrealTraining Stress Score from FIT file
threshold_powerintegerwattsFTP value stored in the FIT file
variability_indexrealVI = NP ÷ avg_power (measure of pacing consistency)
FieldTypeUnitDescription
avg_heart_raterealbpmAverage heart rate
max_heart_raterealbpmPeak heart rate
FieldTypeUnitDescription
avg_cadencerealrpmAverage cadence
max_cadencerealrpmPeak cadence
FieldTypeUnitDescription
avg_speedrealm/sAverage speed (multiply by 3.6 for km/h)
max_speedrealm/sPeak speed
caloriesrealkcalTotal energy expenditure
avg_temperaturereal°CAverage ambient temperature
FieldTypeDescription
training_loadrealGarmin/Wahoo training load score (if present in FIT)
aerobic_terealAerobic training effect (0–5 scale)
anaerobic_terealAnaerobic training effect (0–5 scale)
FieldTypeDescription
best_effortsJSONBMean-maximal power map: duration (seconds) → best watts

Example value:

{
"5": 520,
"10": 480,
"30": 420,
"60": 390,
"300": 318,
"600": 295,
"1200": 268,
"1800": 252,
"3600": 238
}

See Best Efforts (MMP) for methodology.

FieldTypeDescription
storage_keytextPath of the raw FIT file in R2 object storage (may be null if upload failed)
filenametextOriginal FIT filename
sha256textSHA-256 hash of the FIT file bytes
  • Power fields (avg_power, normalized_power, etc.) are null for activities without a power meter.
  • intensity_factor and tss are null when not present in the FIT file.
  • best_efforts is null for non-cycling activities or very short rides with insufficient data.
  • Temperature is null when the device didn’t record it.