Complete reference for structuring exercises in Intrvl. Learn about capabilities, muscle groups, exercise types, and volume calculations.
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.
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)
}
| 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 |
The capabilities array allows exercises to support combined metric types. This enables flexible exercise definitions that can track multiple metrics simultaneously.
| 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 |
| 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 |
Version 1.5 introduces hierarchical muscle group targeting for detailed tracking and analytics.
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 | 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 |
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)
}
| 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.
When weight is present, volume is calculated using this priority:
bodyweightVolume + weight + repsbodyweightVolume + reps only{
"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 }
]
}
{
"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" }
]
}
{
"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" }
]
}
{
"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 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.
Questions about exercise specifications or building exercise libraries? Get in touch: