Exercise Specification v1.5

Complete reference for structuring exercises in Intrvl. Learn about capabilities, muscle groups, exercise types, and volume calculations.

Overview

The Exercise Specification defines how exercises are structured within Intrvl's Program Collection format. Version 1.6 adds set intent markers (warm-up and failure sets), while v1.5 introduced flexible exercise capabilities, hierarchical muscle group targeting, and advanced volume tracking.

This spec covers standalone exercise import/export (exercise libraries and individual exercises). For structured workout programs, see the Program Collection Spec. For exported training history data (sessions, sets, analytics), see the History Export Spec.

Exercise Schema

Each exercise object defines a movement with its parameters:

{
  "name": "String (required)",
  "muscleGroups": "String, Array, or Object (optional)",
  "muscleGroup": "String (optional, legacy)",
  "capabilities": ["String"] (optional),
  "exerciseType": "String (optional, legacy)",
  "equipment": "String or Array (optional)",
  "defaultResistance": "String (optional)",
  "doublesVolume": Boolean (optional),
  "description": "String (optional)",
  "sets": [Set] (optional),
  "source": Object (optional)
}

Exercise Fields

Field Type Required Description
name String Yes Name of the exercise (e.g., "Bench Press", "Pull-up")
muscleGroups String, Array, or Object No v1.5: Muscle group targeting. See Muscle Groups section.
muscleGroup String No Legacy: Primary muscle group. Use muscleGroups for v1.5.
capabilities Array<String> No v1.5: List of capabilities for combined exercise types.
exerciseType String No Legacy: Type of exercise. Use capabilities for v1.5.
equipment String or Array<String> No Required equipment (e.g., "Barbell", ["Dumbbell", "Bench"])
defaultResistance String No Default resistance for banded exercises
doublesVolume Boolean No When true, volume calculations are doubled (for bilateral exercises)
description String No Brief description or coaching notes
sets Array<Set> No Prescribed sets for this exercise

Capabilities (v1.5)

The capabilities array allows exercises to support combined metric types. This enables flexible exercise definitions that can track multiple metrics simultaneously.

Valid Capability Values

Value Description
weight Tracks external weight (barbell, dumbbell, machine)
reps Counts repetitions
duration Measures time (seconds/minutes)
distance Measures distance (meters/yards)
band Tracks resistance band usage
bodyweightVolume v1.5: Calculates volume using user's body weight

Common Capability Combinations

Preset Name Capabilities Example Exercises Volume Formula
Weighted ["weight", "reps"] Bench Press, Squat weight × reps
Loaded Carry ["weight", "distance"] Farmer's Walk, Sled Push weight × distance
Timed Loaded ["weight", "duration"] Weighted Plank weight × duration
Bodyweight Weighted ["weight", "reps", "bodyweightVolume"] Weighted Pull-ups, Weighted Dips (bodyweight + weight) × reps
Bodyweight ["reps", "bodyweightVolume"] Push-ups, Pull-ups bodyweight × reps
Shuttle Runs ["reps", "distance"] Sprint intervals
Cardio ["distance", "duration"] 5K Run, Rowing
Timed ["duration"] Plank, Wall Sit
Distance Only ["distance"] Sprint
Banded ["band", "reps"] Band Face Pulls, Band Rows
Banded Bodyweight ["band", "reps", "bodyweightVolume"] Assisted Pull-ups bodyweight × reps

Muscle Groups (v1.5)

Version 1.5 introduces hierarchical muscle group targeting for detailed tracking and analytics.

Format Options

Legacy (v1.0-v1.3): Single string or flat array

{
  "muscleGroup": "Legs"
}
// or
{
  "muscleGroups": ["Legs", "Core"]
}

v1.5 Hierarchical: Object with primary/secondary breakdown

{
  "muscleGroups": {
    "primary": {
      "Legs": ["Glutes", "Quads"],
      "Back": ["Lats", "Lower Back"]
    },
    "secondary": {
      "Core": ["Abs"],
      "Arms": ["Forearms"]
    }
  }
}

Primary/Secondary Assignment Rule: In the v1.5 implementation, the primary/secondary designation is applied at the parent category level, not individual child muscles. If a parent category (e.g., "Legs") is designated as primary, ALL selected children under that parent are treated as primary.

Parent Categories and Child Muscles

Parent Children
Legs Glutes, Quads, Hamstrings, Calves, Adductors, Abductors
Arms Biceps, Triceps, Forearms
Chest Upper Chest, Middle Chest, Lower Chest
Back Lats, Traps, Rhomboids, Lower Back
Shoulders Front Delts, Side Delts, Rear Delts
Core Abs, Obliques

Set Schema

Each set object within an exercise defines the parameters for that set. All fields are optional, but you should include at least one field describing the set type.

{
  "reps": Number (optional),
  "duration": Number (optional),
  "durationUnit": "String (optional)",
  "distance": Number (optional),
  "distanceUnit": "String (optional)",
  "suggestedWeight": Number (optional),
  "resistance": "String (optional)",
  "bandWeight": Number (optional),
  "bandWeightUnit": "String (optional)",
  "isWarmUp": Boolean (optional, v1.6),
  "toFailure": Boolean (optional, v1.6)
}

Set Fields

Field Type Description
reps Integer Number of repetitions. Mutually exclusive with duration
duration Integer Duration value. Mutually exclusive with reps
durationUnit String Unit for duration: "seconds" (default) or "minutes"
distance Number Distance value for cardio/loaded carry exercises
distanceUnit String Unit for distance: "m" (default) or "yards"
suggestedWeight Number Suggested weight in kilograms
resistance String Resistance type: "bodyweight", "extra-light", "light", "medium", "heavy", "extra-heavy"
bandWeight Number Numeric band resistance
bandWeightUnit String Unit for band weight: "kg" (default) or "lbs"
isWarmUp Boolean v1.6: Mark as warm-up set. Default: false. Warm-up sets are excluded from effective volume.
toFailure Boolean v1.6: Mark as failure set. Default: false. Failure sets receive 1.5x volume multiplier.

Important: Sets can now have multiple metrics (e.g., reps AND distance for shuttle runs, or weight AND distance for loaded carries). However, reps and duration are mutually exclusive.

v1.6 Set Intent Markers: Use isWarmUp: true to mark warm-up sets (excluded from effective volume) and toFailure: true to mark failure sets (1.5x volume multiplier). These flags improve analytics accuracy when the program is imported.

Volume Calculation

When weight is present, volume is calculated using this priority:

  1. weight × distance (loaded carries) — if both weight and distance > 0
  2. (bodyweight + weight) × reps (weighted bodyweight) — if bodyweightVolume + weight + reps
  3. weight × reps (traditional) — if both weight and reps > 0
  4. bodyweight × reps (bodyweight or banded bodyweight) — if bodyweightVolume + reps only
  5. weight × duration (timed loaded) — if both weight and duration > 0
  6. 0 — (no volume for pure banded, distance-only, or timed-only)

Examples

Weighted Exercise

{
  "name": "Bench Press",
  "capabilities": ["weight", "reps"],
  "muscleGroups": {
    "primary": { "Chest": ["Middle Chest"] },
    "secondary": { "Arms": ["Triceps"], "Shoulders": ["Front Delts"] }
  },
  "equipment": ["Barbell", "Bench"],
  "sets": [
    { "reps": 8, "suggestedWeight": 60 },
    { "reps": 8, "suggestedWeight": 60 },
    { "reps": 6, "suggestedWeight": 65 }
  ]
}

Bodyweight with Volume Tracking

{
  "name": "Pull-ups",
  "capabilities": ["reps", "bodyweightVolume"],
  "muscleGroups": {
    "primary": { "Back": ["Lats"] },
    "secondary": { "Arms": ["Biceps"], "Shoulders": ["Rear Delts"] }
  },
  "equipment": ["Pull-up Bar"],
  "sets": [
    { "reps": 10, "resistance": "bodyweight" },
    { "reps": 8, "resistance": "bodyweight" },
    { "reps": 6, "resistance": "bodyweight" }
  ]
}

Loaded Carry (Weight + Distance)

{
  "name": "Farmer's Walk",
  "capabilities": ["weight", "distance"],
  "muscleGroups": {
    "primary": { "Back": ["Traps"], "Core": ["Abs", "Obliques"] },
    "secondary": { "Arms": ["Forearms"], "Legs": ["Calves"] }
  },
  "equipment": ["Dumbbells"],
  "sets": [
    { "suggestedWeight": 30, "distance": 50, "distanceUnit": "m" },
    { "suggestedWeight": 30, "distance": 50, "distanceUnit": "m" }
  ]
}

Timed Exercise

{
  "name": "Plank",
  "capabilities": ["duration"],
  "muscleGroups": {
    "primary": { "Core": ["Abs", "Obliques"] },
    "secondary": { "Shoulders": ["Front Delts"] }
  },
  "equipment": [],
  "sets": [
    { "duration": 30, "durationUnit": "seconds" },
    { "duration": 45, "durationUnit": "seconds" },
    { "duration": 60, "durationUnit": "seconds" }
  ]
}

Exercise Libraries

Exercise libraries are standalone files containing only exercises (no workouts). They use a slightly different root structure:

{
  "version": 1.6,
  "libraryName": "String (required)",
  "author": "String (optional)",
  "description": "String (optional)",
  "exercises": [
    { /* Exercise objects */ }
  ]
}

Exercise libraries are useful for:

Tip: Download the Common Gym Exercises sample to see a complete exercise library example.

Need Help?

Questions about exercise specifications or building exercise libraries? Get in touch: