Strava data exposure

{"schema_version":"1.0","generated_at":"2026-10-23T06:51:40+02:00","athlete":{"resting_hr":39,"max_hr":195,"threshold_hr":176,"threshold_pace":290,"hr_zones":[{"label":"Récupération","min":0,"max":133},{"label":"Endurance","min":134,"max":148},{"label":"Tempo","min":149,"max":164},{"label":"Seuil","min":165,"max":179},{"label":"Haute intensité","min":180,"max":250}]},"goals":[],"current_state":{"weekly_volume_km":0,"weekly_duration_sec":0,"weekly_quality_sessions":0,"28d_volume_km":0,"quality_sessions_28d":0},"recent_activities":[{"activity_id":20325487840,"date":"2026-09-25 17:29:39","sport_type":"Run","name":"Defi interentreprises 2026","distance_m":3480,"duration_s":null,"avg_pace_s_km":256.9,"avg_hr":178.6,"max_hr":193,"elevation_gain_m":7,"workout_type":"endurance","workout_subtype":null,"confidence":0.5,"confidence_level":"uncertain","signature":"endurance","work":{"duration_s":904,"distance_m":3475,"avg_pace_s_km":260.1,"avg_hr":178.8,"max_hr":193},"recovery":{"duration_s":0,"distance_m":0,"avg_pace_s_km":null,"avg_hr":null,"max_hr":null},"repetitions_count":0,"repetitions":[],"quality_metrics":[],"difficulty":{"score":0.72,"level":"hard","components":{"cardiovascular":0.9,"muscular":1,"volume":0.25,"specificity":0.5},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20280049550,"date":"2026-09-22 12:35:58","sport_type":"Run","name":"8 x 400+ + R=200m","distance_m":8000,"duration_s":null,"avg_pace_s_km":318,"avg_hr":162.6,"max_hr":184,"elevation_gain_m":59,"workout_type":"intervals","workout_subtype":"8x400","confidence":0.98,"confidence_level":"reliable","signature":"8x400","work":{"duration_s":768,"distance_m":3200,"avg_pace_s_km":240,"avg_hr":175.2,"max_hr":184},"recovery":{"duration_s":580,"distance_m":1400,"avg_pace_s_km":414.3,"avg_hr":172.2,"max_hr":183},"repetitions_count":8,"repetitions":[{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":167.6,"max_hr":176},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":173.1,"max_hr":180},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":173.8,"max_hr":181},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":176.1,"max_hr":183},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":178,"max_hr":182},{"index":null,"distance_m":400,"duration_s":97,"pace_s_km":242.5,"avg_hr":176.7,"max_hr":182},{"index":null,"distance_m":400,"duration_s":97,"pace_s_km":242.5,"avg_hr":177.1,"max_hr":182},{"index":null,"distance_m":400,"duration_s":99,"pace_s_km":247.5,"avg_hr":178.7,"max_hr":184}],"quality_metrics":{"pace_cv":0.015,"duration_cv":0.015,"distance_cv":0,"hr_cv":0.019,"hr_drift":0.066,"last_rep_vs_first_rep":0.042,"final_acceleration":3.6,"consistency_score":1},"difficulty":{"score":0.72,"level":"hard","components":{"cardiovascular":0.84,"muscular":1,"volume":0.21,"specificity":0.66},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20250270666,"date":"2026-09-20 09:22:06","sport_type":"Run","name":"3x1500m + R=2","distance_m":10000,"duration_s":null,"avg_pace_s_km":326,"avg_hr":162.3,"max_hr":184,"elevation_gain_m":3,"workout_type":"long_intervals","workout_subtype":"3x6min","confidence":0.98,"confidence_level":"reliable","signature":"3x6min","work":{"duration_s":1192,"distance_m":4535,"avg_pace_s_km":262.9,"avg_hr":178.1,"max_hr":184},"recovery":{"duration_s":223,"distance_m":591,"avg_pace_s_km":377.2,"avg_hr":168.7,"max_hr":180},"repetitions_count":3,"repetitions":[{"index":null,"distance_m":1516.6,"duration_s":393,"pace_s_km":258,"avg_hr":174.9,"max_hr":183},{"index":null,"distance_m":1507.9,"duration_s":399,"pace_s_km":263.2,"avg_hr":179,"max_hr":183},{"index":null,"distance_m":1510,"duration_s":400,"pace_s_km":263.7,"avg_hr":180.4,"max_hr":184}],"quality_metrics":{"pace_cv":0.01,"duration_cv":0.008,"distance_cv":0.002,"hr_cv":0.013,"hr_drift":0.031,"last_rep_vs_first_rep":0.022,"final_acceleration":1.2,"consistency_score":1},"difficulty":{"score":0.75,"level":"hard","components":{"cardiovascular":0.89,"muscular":1,"volume":0.32,"specificity":0.61},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20225587975,"date":"2026-09-18 12:37:43","sport_type":"Run","name":"Course à pied le midi","distance_m":6350,"duration_s":null,"avg_pace_s_km":357.2,"avg_hr":148,"max_hr":164,"elevation_gain_m":66,"workout_type":"endurance_active","workout_subtype":null,"confidence":0.7,"confidence_level":"probable","signature":"endurance_active","work":{"duration_s":2218,"distance_m":6178,"avg_pace_s_km":359,"avg_hr":148,"max_hr":164},"recovery":{"duration_s":0,"distance_m":0,"avg_pace_s_km":null,"avg_hr":null,"max_hr":null},"repetitions_count":0,"repetitions":[],"quality_metrics":[],"difficulty":{"score":0.43,"level":"moderate","components":{"cardiovascular":0.4,"muscular":0.32,"volume":0.55,"specificity":0.5},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20202472943,"date":"2026-09-16 17:35:25","sport_type":"Run","name":"Course à pied dans l'après-midi","distance_m":9000,"duration_s":null,"avg_pace_s_km":319.1,"avg_hr":167.4,"max_hr":185,"elevation_gain_m":53,"workout_type":"long_intervals","workout_subtype":"6x800","confidence":0.98,"confidence_level":"reliable","signature":"6x800","work":{"duration_s":1262,"distance_m":4800,"avg_pace_s_km":262.9,"avg_hr":178,"max_hr":185},"recovery":{"duration_s":450,"distance_m":1013,"avg_pace_s_km":444.1,"avg_hr":171.7,"max_hr":185},"repetitions_count":6,"repetitions":[{"index":null,"distance_m":800,"duration_s":214,"pace_s_km":267.5,"avg_hr":173.7,"max_hr":181},{"index":null,"distance_m":800,"duration_s":206,"pace_s_km":257.5,"avg_hr":175.4,"max_hr":181},{"index":null,"distance_m":800,"duration_s":213,"pace_s_km":266.3,"avg_hr":178.2,"max_hr":185},{"index":null,"distance_m":800,"duration_s":206,"pace_s_km":257.5,"avg_hr":179.8,"max_hr":185},{"index":null,"distance_m":800,"duration_s":215,"pace_s_km":268.8,"avg_hr":181.4,"max_hr":185},{"index":null,"distance_m":800,"duration_s":208,"pace_s_km":260,"avg_hr":179.5,"max_hr":184}],"quality_metrics":{"pace_cv":0.018,"duration_cv":0.018,"distance_cv":0,"hr_cv":0.015,"hr_drift":0.033,"last_rep_vs_first_rep":-0.028,"final_acceleration":-1.3,"consistency_score":1},"difficulty":{"score":0.75,"level":"hard","components":{"cardiovascular":0.89,"muscular":1,"volume":0.34,"specificity":0.61},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20154248065,"date":"2026-09-13 10:02:55","sport_type":"Run","name":"La Gobionne","distance_m":12080,"duration_s":null,"avg_pace_s_km":291.3,"avg_hr":179,"max_hr":189,"elevation_gain_m":36,"workout_type":"threshold","workout_subtype":null,"confidence":0.8,"confidence_level":"probable","signature":"threshold_60min","work":{"duration_s":3473,"distance_m":11888,"avg_pace_s_km":292.2,"avg_hr":179,"max_hr":189},"recovery":{"duration_s":0,"distance_m":0,"avg_pace_s_km":null,"avg_hr":null,"max_hr":null},"repetitions_count":0,"repetitions":[],"quality_metrics":[],"difficulty":{"score":0.85,"level":"very_hard","components":{"cardiovascular":0.91,"muscular":0.98,"volume":0.91,"specificity":0.5},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20153177385,"date":"2026-09-13 09:04:28","sport_type":"Run","name":"Échauffement Gobionne","distance_m":3000,"duration_s":null,"avg_pace_s_km":407.8,"avg_hr":145.1,"max_hr":162,"elevation_gain_m":28,"workout_type":"endurance_active","workout_subtype":null,"confidence":0.7,"confidence_level":"probable","signature":"endurance_active","work":{"duration_s":1276,"distance_m":2996,"avg_pace_s_km":426,"avg_hr":144.8,"max_hr":162},"recovery":{"duration_s":0,"distance_m":0,"avg_pace_s_km":null,"avg_hr":null,"max_hr":null},"repetitions_count":0,"repetitions":[],"quality_metrics":[],"difficulty":{"score":0.28,"level":"easy","components":{"cardiovascular":0.35,"muscular":0,"volume":0.31,"specificity":0.5},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}}],"key_workouts":[{"activity_id":20280049550,"date":"2026-09-22 12:35:58","sport_type":"Run","name":"8 x 400+ + R=200m","distance_m":8000,"duration_s":null,"avg_pace_s_km":318,"avg_hr":162.6,"max_hr":184,"elevation_gain_m":59,"workout_type":"intervals","workout_subtype":"8x400","confidence":0.98,"confidence_level":"reliable","signature":"8x400","work":{"duration_s":768,"distance_m":3200,"avg_pace_s_km":240,"avg_hr":175.2,"max_hr":184},"recovery":{"duration_s":580,"distance_m":1400,"avg_pace_s_km":414.3,"avg_hr":172.2,"max_hr":183},"repetitions_count":8,"repetitions":[{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":167.6,"max_hr":176},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":173.1,"max_hr":180},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":173.8,"max_hr":181},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":176.1,"max_hr":183},{"index":null,"distance_m":400,"duration_s":95,"pace_s_km":237.5,"avg_hr":178,"max_hr":182},{"index":null,"distance_m":400,"duration_s":97,"pace_s_km":242.5,"avg_hr":176.7,"max_hr":182},{"index":null,"distance_m":400,"duration_s":97,"pace_s_km":242.5,"avg_hr":177.1,"max_hr":182},{"index":null,"distance_m":400,"duration_s":99,"pace_s_km":247.5,"avg_hr":178.7,"max_hr":184}],"quality_metrics":{"pace_cv":0.015,"duration_cv":0.015,"distance_cv":0,"hr_cv":0.019,"hr_drift":0.066,"last_rep_vs_first_rep":0.042,"final_acceleration":3.6,"consistency_score":1},"difficulty":{"score":0.72,"level":"hard","components":{"cardiovascular":0.84,"muscular":1,"volume":0.21,"specificity":0.66},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20250270666,"date":"2026-09-20 09:22:06","sport_type":"Run","name":"3x1500m + R=2","distance_m":10000,"duration_s":null,"avg_pace_s_km":326,"avg_hr":162.3,"max_hr":184,"elevation_gain_m":3,"workout_type":"long_intervals","workout_subtype":"3x6min","confidence":0.98,"confidence_level":"reliable","signature":"3x6min","work":{"duration_s":1192,"distance_m":4535,"avg_pace_s_km":262.9,"avg_hr":178.1,"max_hr":184},"recovery":{"duration_s":223,"distance_m":591,"avg_pace_s_km":377.2,"avg_hr":168.7,"max_hr":180},"repetitions_count":3,"repetitions":[{"index":null,"distance_m":1516.6,"duration_s":393,"pace_s_km":258,"avg_hr":174.9,"max_hr":183},{"index":null,"distance_m":1507.9,"duration_s":399,"pace_s_km":263.2,"avg_hr":179,"max_hr":183},{"index":null,"distance_m":1510,"duration_s":400,"pace_s_km":263.7,"avg_hr":180.4,"max_hr":184}],"quality_metrics":{"pace_cv":0.01,"duration_cv":0.008,"distance_cv":0.002,"hr_cv":0.013,"hr_drift":0.031,"last_rep_vs_first_rep":0.022,"final_acceleration":1.2,"consistency_score":1},"difficulty":{"score":0.75,"level":"hard","components":{"cardiovascular":0.89,"muscular":1,"volume":0.32,"specificity":0.61},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20202472943,"date":"2026-09-16 17:35:25","sport_type":"Run","name":"Course à pied dans l'après-midi","distance_m":9000,"duration_s":null,"avg_pace_s_km":319.1,"avg_hr":167.4,"max_hr":185,"elevation_gain_m":53,"workout_type":"long_intervals","workout_subtype":"6x800","confidence":0.98,"confidence_level":"reliable","signature":"6x800","work":{"duration_s":1262,"distance_m":4800,"avg_pace_s_km":262.9,"avg_hr":178,"max_hr":185},"recovery":{"duration_s":450,"distance_m":1013,"avg_pace_s_km":444.1,"avg_hr":171.7,"max_hr":185},"repetitions_count":6,"repetitions":[{"index":null,"distance_m":800,"duration_s":214,"pace_s_km":267.5,"avg_hr":173.7,"max_hr":181},{"index":null,"distance_m":800,"duration_s":206,"pace_s_km":257.5,"avg_hr":175.4,"max_hr":181},{"index":null,"distance_m":800,"duration_s":213,"pace_s_km":266.3,"avg_hr":178.2,"max_hr":185},{"index":null,"distance_m":800,"duration_s":206,"pace_s_km":257.5,"avg_hr":179.8,"max_hr":185},{"index":null,"distance_m":800,"duration_s":215,"pace_s_km":268.8,"avg_hr":181.4,"max_hr":185},{"index":null,"distance_m":800,"duration_s":208,"pace_s_km":260,"avg_hr":179.5,"max_hr":184}],"quality_metrics":{"pace_cv":0.018,"duration_cv":0.018,"distance_cv":0,"hr_cv":0.015,"hr_drift":0.033,"last_rep_vs_first_rep":-0.028,"final_acceleration":-1.3,"consistency_score":1},"difficulty":{"score":0.75,"level":"hard","components":{"cardiovascular":0.89,"muscular":1,"volume":0.34,"specificity":0.61},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}},{"activity_id":20154248065,"date":"2026-09-13 10:02:55","sport_type":"Run","name":"La Gobionne","distance_m":12080,"duration_s":null,"avg_pace_s_km":291.3,"avg_hr":179,"max_hr":189,"elevation_gain_m":36,"workout_type":"threshold","workout_subtype":null,"confidence":0.8,"confidence_level":"probable","signature":"threshold_60min","work":{"duration_s":3473,"distance_m":11888,"avg_pace_s_km":292.2,"avg_hr":179,"max_hr":189},"recovery":{"duration_s":0,"distance_m":0,"avg_pace_s_km":null,"avg_hr":null,"max_hr":null},"repetitions_count":0,"repetitions":[],"quality_metrics":[],"difficulty":{"score":0.85,"level":"very_hard","components":{"cardiovascular":0.91,"muscular":0.98,"volume":0.91,"specificity":0.5},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."}}],"comparable_workouts":[{"activity_id":20280049550,"signature":"8x400","sessions":[]},{"activity_id":20250270666,"signature":"3x6min","sessions":[{"activity_id":19748086818,"date":"2026-08-15 08:54:00","name":"4x5' r:30 (+r=3')","sport_type":"Run","workout_type":"long_intervals","workout_subtype":"3x6min","signature":"3x6min","confidence":0.98,"repetitions":3,"work":{"duration_s":921,"distance_m":3396,"avg_pace_s_km":271.2,"avg_hr":177.4,"max_hr":188},"quality_metrics":{"pace_cv":0.012,"duration_cv":0.026,"distance_cv":0.036,"hr_cv":0.027,"hr_drift":0.019,"last_rep_vs_first_rep":0.027,"final_acceleration":2.5,"consistency_score":1},"difficulty":{"score":0.72,"level":"hard","components":{"cardiovascular":0.88,"muscular":1,"volume":0.25,"specificity":0.56},"note":"Indice de charge estimé à partir des blocs de travail (pas un TSS physiologique)."},"similarity_score":95}]},{"activity_id":20202472943,"signature":"6x800","sessions":[]}],"load":{"running_load":10.7,"cross_training_load":0,"total_load":10.7,"weekly":[{"week":"2026-39","running_load":10.7,"cross_training_load":0,"total_load":10.7}],"acute_7d":0,"chronic_28d":10.7,"ratio":0,"note":"Indice interne : Σ (difficulté × minutes). Pas un TSS physiologique."},"trends":{"summary":{"current_week":{"week":"2026-43","start_date":"2026-10-19","activities":0,"distance_km":0,"duration_sec":0,"elevation_gain_m":0,"hard_sessions":0,"quality_duration_sec":0,"quality_sessions":0,"quality_breakdown":{"short_intervals":0,"intervals":0,"long_intervals":0,"threshold_intervals":0,"threshold":0,"tempo":0,"fartlek":0,"competition":0,"quality_unknown":0},"zones":{"z1":0,"z2":0,"z3":0,"z4":0,"z5":0},"cardio_load":0,"average_hr":null,"average_pace_sec_km":null,"quality_distance_km":0},"previous_week":{"week":"2026-42","start_date":"2026-10-12","activities":0,"distance_km":0,"duration_sec":0,"elevation_gain_m":0,"hard_sessions":0,"quality_duration_sec":0,"quality_sessions":0,"quality_breakdown":{"short_intervals":0,"intervals":0,"long_intervals":0,"threshold_intervals":0,"threshold":0,"tempo":0,"fartlek":0,"competition":0,"quality_unknown":0},"zones":{"z1":0,"z2":0,"z3":0,"z4":0,"z5":0},"cardio_load":0,"average_hr":null,"average_pace_sec_km":null,"quality_distance_km":0},"distance_change_percent":null,"load_change_percent":null},"weekly_series":[{"week":"2026-36","distance_km":44.4,"duration_sec":16128,"quality_sessions":2,"cardio_load":666.3000000000001,"average_pace_sec_km":356.6},{"week":"2026-37","distance_km":30.7,"duration_sec":10125,"quality_sessions":2,"cardio_load":631.1,"average_pace_sec_km":347.1},{"week":"2026-38","distance_km":25.4,"duration_sec":8401,"quality_sessions":2,"cardio_load":463.90000000000003,"average_pace_sec_km":334.1},{"week":"2026-39","distance_km":11.5,"duration_sec":3438,"quality_sessions":1,"cardio_load":215.9,"average_pace_sec_km":287.5},{"week":"2026-40","distance_km":0,"duration_sec":0,"quality_sessions":0,"cardio_load":0,"average_pace_sec_km":null},{"week":"2026-41","distance_km":0,"duration_sec":0,"quality_sessions":0,"cardio_load":0,"average_pace_sec_km":null},{"week":"2026-42","distance_km":0,"duration_sec":0,"quality_sessions":0,"cardio_load":0,"average_pace_sec_km":null},{"week":"2026-43","distance_km":0,"duration_sec":0,"quality_sessions":0,"cardio_load":0,"average_pace_sec_km":null}],"first_vs_second_half":{"weekly_distance_km_delta":-28,"weekly_quality_sessions_delta":-1.8,"weekly_cardio_load_delta":-494.3},"pace_first_vs_last_week_delta":null,"note":"Deltas simples entre périodes comparables ; négatif = plus rapide pour l’allure."},"warnings":[]}