{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "notes": {
      "type": "string"
    },
    "sport": {
      "type": "string",
      "enum": [
        "generic",
        "running",
        "cycling",
        "transition",
        "fitness_equipment",
        "swimming",
        "basketball",
        "soccer",
        "tennis",
        "american_football",
        "training",
        "walking",
        "cross_country_skiing",
        "alpine_skiing",
        "snowboarding",
        "rowing",
        "mountaineering",
        "hiking",
        "multisport",
        "paddling",
        "flying",
        "e_biking",
        "motorcycling",
        "boating",
        "driving",
        "golf",
        "hang_gliding",
        "horseback_riding",
        "hunting",
        "fishing",
        "inline_skating",
        "rock_climbing",
        "sailing",
        "ice_skating",
        "sky_diving",
        "snowshoeing",
        "snowmobiling",
        "stand_up_paddleboarding",
        "surfing",
        "wakeboarding",
        "water_skiing",
        "kayaking",
        "rafting",
        "windsurfing",
        "kitesurfing",
        "tactical",
        "jumpmaster",
        "boxing",
        "floor_climbing",
        "baseball",
        "diving",
        "shooting",
        "winter_sport",
        "grinding",
        "hiit",
        "video_gaming",
        "racket",
        "wheelchair_push_walk",
        "wheelchair_push_run",
        "meditation",
        "para_sport",
        "disc_golf",
        "team_sport",
        "cricket",
        "rugby",
        "hockey",
        "lacrosse",
        "volleyball",
        "water_tubing",
        "wakesurfing",
        "water_sport",
        "archery",
        "mixed_martial_arts",
        "motor_sports",
        "snorkeling",
        "dance",
        "jump_rope",
        "pool_apnea",
        "mobility",
        "geocaching",
        "canoeing"
      ]
    },
    "subSport": {
      "type": "string",
      "enum": [
        "generic",
        "treadmill",
        "street",
        "trail",
        "track",
        "spin",
        "indoor_cycling",
        "road",
        "mountain",
        "downhill",
        "recumbent",
        "cyclocross",
        "hand_cycling",
        "track_cycling",
        "indoor_rowing",
        "elliptical",
        "stair_climbing",
        "lap_swimming",
        "open_water",
        "flexibility_training",
        "strength_training",
        "warm_up",
        "match",
        "exercise",
        "challenge",
        "indoor_skiing",
        "cardio_training",
        "indoor_walking",
        "e_bike_fitness",
        "bmx",
        "casual_walking",
        "speed_walking",
        "bike_to_run_transition",
        "run_to_bike_transition",
        "swim_to_bike_transition",
        "atv",
        "motocross",
        "backcountry",
        "resort",
        "rc_drone",
        "wingsuit",
        "whitewater",
        "skate_skiing",
        "yoga",
        "pilates",
        "indoor_running",
        "gravel_cycling",
        "e_bike_mountain",
        "commuting",
        "mixed_surface",
        "navigate",
        "track_me",
        "map",
        "single_gas_diving",
        "multi_gas_diving",
        "gauge_diving",
        "apnea_diving",
        "apnea_hunting",
        "virtual_activity",
        "obstacle",
        "all"
      ]
    },
    "poolLength": {
      "type": "number",
      "minimum": 1,
      "maximum": 655
    },
    "poolLengthUnit": {
      "type": "string",
      "const": "meters"
    },
    "steps": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "stepIndex": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "durationType": {
                "type": "string",
                "enum": [
                  "time",
                  "distance",
                  "heart_rate_less_than",
                  "repeat_until_heart_rate_greater_than",
                  "calories",
                  "power_less_than",
                  "power_greater_than",
                  "repeat_until_time",
                  "repeat_until_distance",
                  "repeat_until_calories",
                  "repeat_until_heart_rate_less_than",
                  "repeat_until_power_less_than",
                  "repeat_until_power_greater_than",
                  "open"
                ]
              },
              "duration": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "time"
                      },
                      "seconds": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "type",
                      "seconds"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "distance"
                      },
                      "meters": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "type",
                      "meters"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "heart_rate_less_than"
                      },
                      "bpm": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "bpm"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_heart_rate_greater_than"
                      },
                      "bpm": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "bpm",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "calories"
                      },
                      "calories": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "calories"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "power_less_than"
                      },
                      "watts": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "type",
                      "watts"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "power_greater_than"
                      },
                      "watts": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "type",
                      "watts"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_time"
                      },
                      "seconds": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "seconds",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_distance"
                      },
                      "meters": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "meters",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_calories"
                      },
                      "calories": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "calories",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_heart_rate_less_than"
                      },
                      "bpm": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "bpm",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_power_less_than"
                      },
                      "watts": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "watts",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "repeat_until_power_greater_than"
                      },
                      "watts": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      },
                      "repeatFrom": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "type",
                      "watts",
                      "repeatFrom"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "open"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "targetType": {
                "type": "string",
                "enum": [
                  "power",
                  "heart_rate",
                  "cadence",
                  "pace",
                  "stroke_type",
                  "open"
                ]
              },
              "target": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "power"
                      },
                      "value": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "watts"
                              },
                              "value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 5000
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "percent_ftp"
                              },
                              "value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 1000
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "zone"
                              },
                              "value": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 7
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "range"
                              },
                              "min": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 5000
                              },
                              "max": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 5000
                              }
                            },
                            "required": [
                              "unit",
                              "min",
                              "max"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "heart_rate"
                      },
                      "value": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "bpm"
                              },
                              "value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 300
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "zone"
                              },
                              "value": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 5
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "percent_max"
                              },
                              "value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "range"
                              },
                              "min": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 300
                              },
                              "max": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 300
                              }
                            },
                            "required": [
                              "unit",
                              "min",
                              "max"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "cadence"
                      },
                      "value": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "rpm"
                              },
                              "value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 300
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "range"
                              },
                              "min": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 300
                              },
                              "max": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 300
                              }
                            },
                            "required": [
                              "unit",
                              "min",
                              "max"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "pace"
                      },
                      "value": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "mps"
                              },
                              "value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 30
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "zone"
                              },
                              "value": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 5
                              }
                            },
                            "required": [
                              "unit",
                              "value"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "unit": {
                                "type": "string",
                                "const": "range"
                              },
                              "min": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 30
                              },
                              "max": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 30
                              }
                            },
                            "required": [
                              "unit",
                              "min",
                              "max"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "stroke_type"
                      },
                      "value": {
                        "type": "object",
                        "properties": {
                          "unit": {
                            "type": "string",
                            "const": "swim_stroke"
                          },
                          "value": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 5
                          }
                        },
                        "required": [
                          "unit",
                          "value"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "open"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "intensity": {
                "type": "string",
                "enum": [
                  "warmup",
                  "active",
                  "cooldown",
                  "rest",
                  "recovery",
                  "interval",
                  "other"
                ]
              },
              "notes": {
                "type": "string",
                "maxLength": 256
              },
              "equipment": {
                "type": "string",
                "enum": [
                  "none",
                  "swim_fins",
                  "swim_kickboard",
                  "swim_paddles",
                  "swim_pull_buoy",
                  "swim_snorkel"
                ]
              },
              "extensions": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "stepIndex",
              "durationType",
              "duration",
              "targetType",
              "target"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "repeatCount": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "stepIndex": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "durationType": {
                      "type": "string",
                      "enum": [
                        "time",
                        "distance",
                        "heart_rate_less_than",
                        "repeat_until_heart_rate_greater_than",
                        "calories",
                        "power_less_than",
                        "power_greater_than",
                        "repeat_until_time",
                        "repeat_until_distance",
                        "repeat_until_calories",
                        "repeat_until_heart_rate_less_than",
                        "repeat_until_power_less_than",
                        "repeat_until_power_greater_than",
                        "open"
                      ]
                    },
                    "duration": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "time"
                            },
                            "seconds": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            }
                          },
                          "required": [
                            "type",
                            "seconds"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "distance"
                            },
                            "meters": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            }
                          },
                          "required": [
                            "type",
                            "meters"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "heart_rate_less_than"
                            },
                            "bpm": {
                              "type": "integer",
                              "exclusiveMinimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "bpm"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_heart_rate_greater_than"
                            },
                            "bpm": {
                              "type": "integer",
                              "exclusiveMinimum": 0,
                              "maximum": 9007199254740991
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "bpm",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "calories"
                            },
                            "calories": {
                              "type": "integer",
                              "exclusiveMinimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "calories"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "power_less_than"
                            },
                            "watts": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            }
                          },
                          "required": [
                            "type",
                            "watts"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "power_greater_than"
                            },
                            "watts": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            }
                          },
                          "required": [
                            "type",
                            "watts"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_time"
                            },
                            "seconds": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "seconds",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_distance"
                            },
                            "meters": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "meters",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_calories"
                            },
                            "calories": {
                              "type": "integer",
                              "exclusiveMinimum": 0,
                              "maximum": 9007199254740991
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "calories",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_heart_rate_less_than"
                            },
                            "bpm": {
                              "type": "integer",
                              "exclusiveMinimum": 0,
                              "maximum": 9007199254740991
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "bpm",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_power_less_than"
                            },
                            "watts": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "watts",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "repeat_until_power_greater_than"
                            },
                            "watts": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            },
                            "repeatFrom": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "type",
                            "watts",
                            "repeatFrom"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "open"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "targetType": {
                      "type": "string",
                      "enum": [
                        "power",
                        "heart_rate",
                        "cadence",
                        "pace",
                        "stroke_type",
                        "open"
                      ]
                    },
                    "target": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "power"
                            },
                            "value": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "watts"
                                    },
                                    "value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 5000
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "percent_ftp"
                                    },
                                    "value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1000
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "zone"
                                    },
                                    "value": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 7
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "range"
                                    },
                                    "min": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 5000
                                    },
                                    "max": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 5000
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "min",
                                    "max"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "required": [
                            "type",
                            "value"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "heart_rate"
                            },
                            "value": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "bpm"
                                    },
                                    "value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 300
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "zone"
                                    },
                                    "value": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "percent_max"
                                    },
                                    "value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "range"
                                    },
                                    "min": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 300
                                    },
                                    "max": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 300
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "min",
                                    "max"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "required": [
                            "type",
                            "value"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "cadence"
                            },
                            "value": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "rpm"
                                    },
                                    "value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 300
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "range"
                                    },
                                    "min": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 300
                                    },
                                    "max": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 300
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "min",
                                    "max"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "required": [
                            "type",
                            "value"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "pace"
                            },
                            "value": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "mps"
                                    },
                                    "value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 30
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "zone"
                                    },
                                    "value": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 5
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "value"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "unit": {
                                      "type": "string",
                                      "const": "range"
                                    },
                                    "min": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 30
                                    },
                                    "max": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 30
                                    }
                                  },
                                  "required": [
                                    "unit",
                                    "min",
                                    "max"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "required": [
                            "type",
                            "value"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "stroke_type"
                            },
                            "value": {
                              "type": "object",
                              "properties": {
                                "unit": {
                                  "type": "string",
                                  "const": "swim_stroke"
                                },
                                "value": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 5
                                }
                              },
                              "required": [
                                "unit",
                                "value"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "type",
                            "value"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "open"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "intensity": {
                      "type": "string",
                      "enum": [
                        "warmup",
                        "active",
                        "cooldown",
                        "rest",
                        "recovery",
                        "interval",
                        "other"
                      ]
                    },
                    "notes": {
                      "type": "string",
                      "maxLength": 256
                    },
                    "equipment": {
                      "type": "string",
                      "enum": [
                        "none",
                        "swim_fins",
                        "swim_kickboard",
                        "swim_paddles",
                        "swim_pull_buoy",
                        "swim_snorkel"
                      ]
                    },
                    "extensions": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {}
                    }
                  },
                  "required": [
                    "stepIndex",
                    "durationType",
                    "duration",
                    "targetType",
                    "target"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "repeatCount",
              "steps"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "extensions": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "sport",
    "steps"
  ],
  "additionalProperties": false,
  "$id": "https://kaiord.dev/schema/structured-workout-full.json",
  "title": "Structured Workout - Complete Schema",
  "description": "Self-contained schema for LLM agents to generate structured workouts. All domain types (sport, duration, target, intensity) are inlined."
}