API Reference

Derived Metrics

Full stats output — energy, recovery, drift, zones, MFI, and 60+ derived values.

When returnStats: true is set in the request, the result includes a stats object with the complete physiological profile. This requires demographic fields (weight, height, age, gender) in settings.

Overview

The stats object is organized into sections:

SectionKey metrics
thresholdsV0–V5 speed thresholds (m/s)
energyRMR, session calories, fat/carb oxidation, TEF, TDEE
bodyBMI, muscle %, fat %
metabolic_factorsBF, AF, FF, ECF for continuous HR monitoring
recoveryHR curve, time constants, EPOC, muscular recovery
cardiac_driftDrift magnitude, rate, metabolic debt
training_load5-zone suffer score, oxidative/glycolytic partitioning
hr_zones6 training zones (Z0–Z5) with HR boundaries
metabolic_zones3 metabolic zones (MZ0–MZ2, slow domain)
fiber_zones12 fiber zones (Z0–Z11)
running / cycling / team_sportsSport-specific outputs
vo2maxEstimated VO2max
mfiMetabolic Fitness Index (0–5)
rziResting Zone Index (0–3)

Speed thresholds

"thresholds": {
  "Vi": 0.652,
  "V0": 0.94, "V1": 1.59, "V2": 2.24,
  "V3": 2.90, "V4": 3.55, "V5": 4.20
}

All values in m/s. These define the V-scale — the individual's physiological intensity axis.

  • V0: Fat–carb crossover (Fatmax). Aligns with VT1/GET.
  • V1: Aerobic threshold. Top of the fat-dominant zone.
  • V2: Lactate threshold (LT2/VT2). The heavy-domain boundary.
  • V2.5: Maximum aerobic speed. Coincides with HRmax.
  • V5: Internal speed parameter (Vmax is derived from V5 and E).

Energy expenditure

"energy": {
  "rmr_kcal_day": 1489,
  "rmr_kcal_min": 1.03,
  "rmr_o2_ml_kg_min": 2.86,
  "resting_hr_bpm": 47,
  "fat_max_oxidation_g_min": 0.56,
  "fat_max_speed_mps": 1.59,
  "base_fat_oxidation": 0.71,
  "carb_oxidation_g_min": 3.20,
  "carb_footprint_g_km": 19.2,
  "fat_footprint_g_km": 2.0,
  "cho_burn_rate_g_min": 0.25,
  "session_calories": 320,
  "tef_kcal_day": 194,
  "tdee_kcal_day": 2129
}

Session calories uses the actual HR data from the session, converting each beat to kcal via the individualized Activity Factor.

Metabolic factors

"metabolic_factors": {
  "basal_hr_bpm": 62.4,
  "max_power_watts": 361,
  "activity_factor": 10.68,
  "base_factor": 4.76,
  "food_factor": 1017.9,
  "exercise_correction_factor": 1.067
}

These factors enable continuous all-day HR-to-calorie conversion:

  • BF (base_factor): beats per kcal at rest
  • AF (activity_factor): beats per kcal during exercise
  • FF (food_factor): beats per kcal for post-meal thermogenesis (energy intake estimation)

Recovery kinetics

"recovery": {
  "tau_base_s": 33.8,
  "tau_response_s": 66.6,
  "tau_debt_s": 1000.0,
  "resting_hr_bpm": 48,
  "hr_at_30s": 122,
  "hr_at_60s": 104,
  "hr_at_120s": 87,
  "hr_at_300s": 77,
  "time_to_hr_recovery_s": 780,
  "muscular_recovery_hours": 11.0,
  "epoc_fast_bpm": 56.0,
  "epoc_slow_bpm": 30.7
}

Recovery HR curve is simulated from a 30-minute moderate exercise session. EPOC is partitioned into fast (alactacid: PCr resynthesis) and slow (lactacid: glycolytic debt clearance) components.

Cardiac drift

"cardiac_drift": {
  "drift_end_bpm": 40.4,
  "drift_pct": 21.8,
  "drift_rate_bpm_min": 1.01,
  "debt_end": 617353,
  "metabolic_load": 617353
}

Computed from the session's speed data using the logarithmic debt model.

Training load

"training_load": {
  "zone1": 3.82, "zone2": 4.43, "zone3": 2.35, "zone4": 0.0, "zone5": 0.0,
  "total": 10.61,
  "metabolic_load": 617353,
  "hrd_oxidative": 8.25,
  "hrd_glycolytic": 2.35,
  "glycolytic_ratio": 0.222,
  "load_tz": 12.96
}

Training load is partitioned into oxidative and glycolytic components. The glycolytic ratio indicates what fraction of the session's stress came from anaerobic metabolism. load_tz weights glycolytic stress 2x due to its higher physiological cost.

Zones

See dedicated pages: HR zones, Metabolic zones, fiber zones are in the fiber_zones array (12 zones, Z0–Z11).

Sport-specific

Set sport in settings to get sport-specific outputs. See: