Workout details get validated against the following JSON schemas.

Amrap

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "AMRAP Workout Schema",
  "type": "object",
  "required": ["type", "duration", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": {
      "enum": ["Amrap"]
    },
    "reps_only": {
      "type": "boolean"
    },
    "duration": {
      "type": "number",
      "minimum": 1
    },
    "buy_in": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "movements": {
      "type": "array",
      "items": {
        "$ref": "workouts/common.json#/movement"
      },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

CardioIntervals

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Cardio Intervals Workout Schema",
  "type": "object",
  "required": ["type", "rest", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["CardioIntervals"] },
    "fixed": { "enum": ["duration", "distance"] },
    "rest": { "$ref": "workouts/common.json#/rest" },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

Cardio

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Cardio Workout Schema",
  "type": "object",
  "required": ["type", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["Cardio"] },
    "fixed": { "enum": ["duration", "distance"] },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 1,
      "additionalItems": false
    }
  }
}

DeathBy

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "DeathBy Workout Schema",
  "type": "object",
  "required": [
    "type",
    "interval",
    "initial_reps",
    "rep_increment",
    "movements"
  ],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["DeathBy"] },
    "interval": { "type": "number", "minimum": 1 },
    "initial_reps": { "type": "number", "minimum": 0 },
    "rep_increment": { "type": "number", "minimum": 0 },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

Emom

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "EMOM Workout Schema",
  "type": "object",
  "required": ["type", "duration", "interval", "movements", "blocks"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["Emom"] },
    "duration": { "type": "number", "minimum": 0 },
    "interval": { "type": "number", "minimum": 1 },
    "rounds": {
      "type": "number",
      "minimum": 1
    },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "blocks": {
      "type": "array",
      "items": {
        "type": "array",
        "items": { "type": "integer", "minimum": -1 },
        "minItems": 1,
        "maxItems": 100,
        "additionalItems": false
      },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

Fgb

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "FGB Workout Schema",
  "type": "object",
  "required": ["type", "rest", "rounds", "duration", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["Fgb"] },
    "rest": { "type": "number", "minimum": 0 },
    "rounds": { "type": "number", "minimum": 1 },
    "duration": { "type": "number", "minimum": 1 },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

ForTime

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "For Time Workout Schema",
  "type": "object",
  "required": ["type", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["ForTime"] },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "time_cap": { "type": "number", "minimum": 1 },
    "partition_any_way": { "type": "boolean" }
  }
}

FranStyle

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "FranStyle Workout Schema",
  "type": "object",
  "required": ["type", "reps", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["FranStyle"] },
    "reps": {
      "type": "array",
      "items": { "type": "integer", "minimum": 1 },
      "minItems": 2,
      "maxItems": 100,
      "additionalItems": false
    },
    "buy_in": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "cash_out": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "time_cap": { "type": "number", "minimum": 1 }
  }
}

Generic

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Generic Workout Schema",
  "type": "object",
  "required": ["type", "name", "score_by", "description", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["Generic"] },
    "name": { "type": "string", "minLength": 1, "maxLength": 50 },
    "score_by": {
      "enum": [
        "none",
        "time_asc",
        "time_desc",
        "reps_asc",
        "reps_desc",
        "rounds_reps_asc",
        "rounds_reps_desc",
        "distance_asc",
        "distance_desc",
        "weight_asc",
        "weight_desc",
        "peak_watts_desc",
        "max_speed_desc",
        "points_asc",
        "points_desc"
      ]
    },
    "description": { "type": "string", "minLength": 1, "maxLength": 50000 },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 0,
      "maxItems": 100,
      "additionalItems": false
    },
    "time_cap": { "type": "number", "minimum": 1 }
  }
}

MaxReps

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Max Reps Workout Schema",
  "type": "object",
  "required": ["type", "duration", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["MaxReps"] },
    "duration": { "type": "number", "minimum": 1 },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

RoundsForTime

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Rounds For Time Workout Schema",
  "type": "object",
  "required": ["type", "rounds", "rest", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["RoundsForTime"] },
    "rest": { "type": "number", "minimum": 0 },
    "rounds": { "type": "number", "minimum": 2 },
    "buy_in": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "cash_out": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "time_cap": { "type": "number", "minimum": 1 }
  }
}

Strength

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Strength Workout Schema",
  "type": "object",
  "required": ["type", "rest", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["Strength"] },
    "rest": { "$ref": "workouts/common.json#/rest" },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "time_cap": { "type": "number", "minimum": 1 }
  }
}

Tabata

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Tabata Workout Schema",
  "type": "object",
  "required": [
    "type",
    "score",
    "intervals",
    "rest_period",
    "work_period",
    "break_period",
    "movements"
  ],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["Tabata"] },
    "score": { "enum": ["lowest", "total"] },
    "intervals": { "type": "number", "minimum": 1 },
    "rest_period": { "type": "number", "minimum": 1 },
    "work_period": { "type": "number", "minimum": 1 },
    "break_period": { "type": "number", "minimum": 0 },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

TwelveDays

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "TwelveDays Workout Schema",
  "type": "object",
  "required": ["type", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["TwelveDays"] },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 1,
      "maxItems": 100,
      "additionalItems": false
    },
    "time_cap": { "type": "number", "minimum": 1 }
  }
}

WarmUp

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "WarmUp Workout Schema",
  "type": "object",
  "required": ["type", "name", "description", "movements"],
  "additionalProperties": false,
  "properties": {
    "type": { "enum": ["WarmUp"] },
    "name": { "type": "string", "minLength": 1, "maxLength": 50 },
    "description": { "type": "string", "minLength": 1, "maxLength": 50000 },
    "movements": {
      "type": "array",
      "items": { "$ref": "workouts/common.json#/movement" },
      "minItems": 0,
      "maxItems": 100,
      "additionalItems": false
    }
  }
}

Common

common.json
{
  "movement": {
    "title": "Workout Movement Object",
    "type": "object",
    "required": ["id"],
    "additionalProperties": false,
    "properties": {
      "id": { "type": "string" },
      "reps": { "type": ["string", "null"] },
      "reps_female": { "type": ["string", "null"] },
      "load": { "type": ["string", "null"] },
      "load_female": { "type": ["string", "null"] },
      "load_unit": { "enum": ["%1rm", "%bodyweight", "lbs", "kg", "pood"] },
      "height": { "type": ["string", "null"] },
      "height_female": { "type": ["string", "null"] },
      "height_unit": { "enum": ["inches", "cm", "feet"] },
      "duration": { "type": ["string", "null"] },
      "duration_female": { "type": ["string", "null"] },
      "duration_unit": { "enum": ["seconds", "minutes"] },
      "distance": { "type": ["string", "null"] },
      "distance_female": { "type": ["string", "null"] },
      "distance_unit": { "enum": ["feet", "yards", "miles", "meters", "km"] },
      "calories": { "type": ["string", "null"] },
      "calories_female": { "type": ["string", "null"] },
      "average_power": { "type": ["string", "null"] },
      "average_power_female": { "type": ["string", "null"] },
      "average_power_unit": { "enum": ["watts", "kcal/h"] },
      "peak_power": { "type": ["string", "null"] },
      "peak_power_female": { "type": ["string", "null"] },
      "peak_power_unit": { "enum": ["watts", "kcal/h"] },
      "tempo": { "type": ["string", "null"] },
      "target_attribute": {
        "enum": [
          "reps",
          "load",
          "distance",
          "duration",
          "height",
          "calories",
          "peakPower"
        ]
      }
    }
  },
  "rest": {
    "title": "Rest Object",
    "type": "object",
    "required": ["type"],
    "additionalProperties": false,
    "properties": {
      "type": { "enum": ["fixed", "as_needed", "emom", "ratio", "superset"] },
      "duration": { "type": ["number", "string"], "minimum": 0 }
    }
  }
}