I have tried quite a few variations. Below is two; the first is generated by Chat GPT, I am working on translating Runna workouts.
The second is an export from the Workout editor that I add the required data too and then upload.
Both fail the same way, the workout is created, with the description, but no steps are created.
Chat GPT Generated (single event)
{
“start_date_local”: “2026-02-27T07:00:00”,
“name”: “Run - 9km Easy Run”,
“category”: “WORKOUT”,
“type”: “Run”,
“folder_id”: “645759”,
“description”: “Easy Run • 9km • 50m - 55m\n\n9km easy run at a conversational pace (no faster than 5:55/km). This is a limit, not a target - run at whatever pace feels truly easy!”,
“steps”: [
{
“duration”: “9km”,
“zone”: “Z1-Z2 Pace”,
“description”: “Main Set”,
“pace”: “6:55 - 5:55”
}
]
}
Workout Editor Export (bulk upload format)
[{
“duration”: 212425,
“distance”: 500000.0,
“ftp”: 444,
“lthr”: 167,
“threshold_pace”: 3.144654,
“pace_units”: “MINS_KM”,
“start_date_local”: “2025-12-30T10:00:00”,
“category”: “WORKOUT”,
“name”: “Run - 9km 400s”,
“type”: “Run”,
“sportSettings”: {
“id”: 427209,
“athlete_id”: “i91850”,
“types”: [
“Run”,
“VirtualRun”,
“TrailRun”
],
“warmup_time”: 300,
“cooldown_time”: 300,
“ftp”: 444,
“power_zones”: [
55,
75,
90,
105,
120,
150,
999
],
“sweet_spot_min”: 84,
“sweet_spot_max”: 97,
“power_spike_threshold”: 30,
“power_zone_names”: [
“Active Recovery”,
“Endurance”,
“Tempo”,
“Threshold”,
“VO2 Max”,
“Anaerobic”,
“Neuromuscular”
],
“ftp_est_min_secs”: 300,
“use_laps_for_power_intervals”: false,
“keep_all_laps_for_power_intervals”: true,
“lthr”: 167,
“max_hr”: 177,
“hr_zones”: [
113,
138,
156,
175,
177
],
“hr_zone_names”: [
“Active Recovery”,
“Aerobic Capacity”,
“Tempo”,
“Threshold”,
“VO2 Max”
],
“hr_load_type”: “HRSS”,
“hrrc_min_percent”: 100.0,
“threshold_pace”: 3.144654,
“pace_units”: “MINS_KM”,
“pace_zones”: [
77.5,
87.7,
94.3,
100.0,
103.4,
111.5,
999.0
],
“pace_zone_names”: [
“Zone 1”,
“Zone 2”,
“Zone 3”,
“Zone 4”,
“Zone 5a”,
“Zone 5b”,
“Zone 5c”
],
“pace_load_type”: “RUN”,
“gap_model”: “STRAVA_RUN”,
“elevation_correction”: “AUTO”,
“use_gap_zone_times”: true,
“best_effort_distances”: [
5000.0,
10000.0,
21097.5,
42195.0
],
“pace_curve_start”: 1000.0,
“load_order”: “HR_PACE_POWER”,
“tiz_order”: “HR_PACE_POWER”,
“workout_order”: “HR_PACE_POWER”,
“interval_display”: “HR_PACE_POWER”,
“default_gear_id”: “g11063107”,
“extract_workouts”: false,
“show_pauses”: 600,
“ignore_velocity”: false,
“activity_field_ids”: [
108033,
108034,
108036,
108037,
108040,
367194,
749039
],
“activity_charts”: {
“home”: [
{
“id”: “194171”
},
{
“id”: “396162”
},
{
“id”: “396292”
}
],
“data”: [
{
“id”: “interval-table”
},
{
“id”: “118054”
}
]
},
“custom_field_ids”: ,
“custom_field_values”: {},
“custom_zones_ids”: ,
“other”: false,
“eFTPSupported”: true,
“use_distance_for_intervals”: false
},
“target”: “PACE”,
“steps”: [
{
“text”: “main set”,
“duration”: 212425,
“distance”: 500000.0,
“pace”: {
“start”: 1,
“end”: 2,
“units”: “pace_zone”
},
“_pace”: {
“start”: 1.9496855735778809,
“end”: 2.757861614227295
}
}
],
“zoneTimes”: [
{
“id”: “Z1”,
“secs”: 212425
},
{
“id”: “Z2”,
“secs”: 0
},
{
“id”: “Z3”,
“secs”: 0
},
{
“id”: “Z4”,
“secs”: 0
},
{
“id”: “Z5”,
“secs”: 0
},
{
“id”: “Z6”,
“secs”: 0
},
{
“id”: “Z7”,
“secs”: 0
}
],
“options”: {},
“locales”:
}
]