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
providerstringData source: strava, wahoo, or upload
provider_activity_idstringSource platform’s ID
namestringActivity name
sport_typestringSport type string from FIT file (e.g. cycling, running)
started_attimestamptzActivity start time (UTC)
created_attimestamptzWhen FitRepo received the activity
FieldTypeUnitDescription
duration_sintegersecondsTotal elapsed time
moving_time_sintegersecondsTime with movement (excludes pauses)
distance_mrealmetresTotal distance
elevation_gain_mrealmetresTotal ascent
FieldTypeUnitDescription
avg_power_wrealwattsAverage power
normalized_power_wrealwattsNormalised Power (NP) — accounts for variability
max_power_wrealwattsPeak 1-second power
intensity_factorrealIF = NP ÷ FTP (requires FTP to be set)
tssrealTraining Stress Score = duration × IF² × 100
ftp_used_wintegerwattsFTP value used for TSS/IF calculations
variability_indexrealVI = NP ÷ avg_power (measure of pacing consistency)
FieldTypeUnitDescription
avg_hr_bpmrealbpmAverage heart rate
max_hr_bpmrealbpmPeak heart rate
FieldTypeUnitDescription
avg_cadence_rpmrealrpmAverage cadence
max_cadence_rpmrealrpmPeak cadence
FieldTypeUnitDescription
avg_speed_msrealm/sAverage speed (multiply by 3.6 for km/h)
max_speed_msrealm/sPeak speed
calories_kcalrealkcalTotal energy expenditure
avg_temperature_creal°CAverage ambient temperature
FieldTypeDescription
training_loadrealGarmin/Wahoo training load score (if present in FIT)
aerobic_training_effectrealAerobic training effect (0–5 scale)
anaerobic_training_effectrealAnaerobic 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
r2_keytextPath of the raw FIT file in R2 object storage (may be null if upload failed)
  • Power fields (avg_power_w, normalized_power_w, etc.) are null for activities without a power meter.
  • intensity_factor and tss are null when no FTP is set at the time of the activity.
  • 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.