Skip to main content

Entities

OpenSet documents follow a strict hierarchical structure. This hierarchy is also how macro/meso/micro training cycles are represented (see Program, phases, and training cycles and ACSM-style Mapping).

PROGRAM
PHASE
WORKOUT <-- minimum valid standalone document
BLOCK
SERIES
EXERCISE
SET

Order of series within a block, exercises within a series, and sets within an exercise is given by array index (first element is first). There is no separate order field.

Metadata​

Workout and Program documents may include an optional metadata object for versioning and attribution (e.g. when selling programs). All fields are optional.

FieldDescription
versionContent version (e.g. "1.0.0", "2024.02"); distinct from openset_version (spec version).
authorPerson or handle; attribution.
providerOrganization or brand publishing the content (same meaning as in libraries).
licenseLicense identifier or URL (e.g. "MIT", "proprietary", "CC-BY-4.0").
created_atISO 8601 date-time.
updated_atLast modification time (ISO 8601 date-time).

Document Types​

A valid OpenSet document is one of:

  1. Workout document — A single training workout with type: "workout" (schema: WorkoutDocument)
  2. Program document — A multi-phase training plan with type: "program" containing phases and workouts (schema: ProgramDocument)
  3. Exercise Library — A collection of exercise definitions with type: "exercise_library"
  4. Workout Library — A collection of reusable workout templates with type: "workout_library"
  5. Workout Execution — Records what was done for a workout instance with type: "workout_execution" (schema: workout-execution); see Workout execution.

Levels​

Program​

Top-level container for a multi-workout training plan.

FieldRequiredDescription
openset_versionYesSpec version (e.g. "1.0")
typeYesMust be "program"
nameYesProgram name
descriptionNoProgram description
sportsNoTarget sports (freeform; common values include strength, running, cycling, swimming, fitness, yoga)
durationNoProgram duration object with numeric value and unit from `s
phasesYesArray of Phase objects
metadataNoDocument metadata (see Metadata)
mediaNoOptional instructional or marketing videos and photos — same shape as Exercise library (videos, photos with url and label; videos may include language)

Program, phases, and training cycles​

Coaches and apps can represent classic macro/meso/micro cycles using the existing hierarchy:

  • Macrocycle — The overall plan (e.g. multi‑month or year‑long season) is modeled as a single Program document.
  • Mesocycle — Each Phase within program.phases typically represents a focused block of several weeks (e.g. hypertrophy, strength, peaking, deload).
  • Microcycle — Weekly patterns of Workouts within a phase (e.g. push/pull/legs over one week) form a microcycle; progression comes from how workouts and set targets evolve week to week.

Phases already support time-bounded blocks via week_start and week_end, so a periodized program is usually:

Program (macrocycle)
Phase 1 — e.g. "Hypertrophy 1" (weeks 1–4)
Phase 2 — e.g. "Strength 1" (weeks 5–8)
Phase 3 — e.g. "Deload" (week 9)
Phase 4 — e.g. "Strength 2" (weeks 10–12)

Within each phase, individual workouts encode microcycle structure (e.g. PPL, upper/lower, full‑body) and progression using set‑level dimensions such as reps, load, rpe, duration, and rest_after. See Extensions for optional metadata fields that can label mesocycles and microcycles more explicitly.

flowchart TD
macro["Program (macrocycle)"] --> meso1["Phase (mesocycle)"]
macro --> meso2["Phase (mesocycle)"]
meso1 --> micro1["Workouts (microcycle week)"]
meso1 --> micro2["Workouts (microcycle week)"]
micro1 --> block["Block"]
block --> series["Series"]
series --> exercise["Exercise"]
exercise --> set["Set"]

Phase​

Groups workouts within a program by training focus or time period.

FieldRequiredDescription
nameYesPhase name
week_startNoStarting week number
week_endNoEnding week number
goalNoPhase objective
workoutsYesArray of Workout objects

Workout​

The minimum valid standalone document. Represents a single training workout.

FieldRequiredDescription
openset_versionYesSpec version
typeYesMust be "workout"
nameNoWorkout name
dateNoISO 8601 date
sportsNoTarget sports (freeform; common values include strength, running, cycling, swimming, fitness, yoga)
levelNoDifficulty: beginner, intermediate, advanced, elite
durationNoEstimated workout duration object with numeric value and unit from `s
tagsNoOptional tags for filtering and discovery
metadataNoDocument metadata (see Metadata)
mediaNoOptional instructional or marketing videos and photos — same shape as Exercise library (videos, photos with url and label; videos may include language). Applies to standalone workouts and to each workout embedded under a program phase.
blocksYesArray of Block objects

Block​

Groups related series within a workout (e.g., warm-up, main work, cooldown).

Blocks are the recommended way to model warm-ups, main work, and finishers:

  • A typical strength workout might use:
    • Block 0: "Warm-up" — ramp-up sets, mobility, activation work
    • Block 1: "Main work" — primary lifts and accessories
    • Block 2: "Finisher" or "Cool-down" — conditioning or recovery work
  • Warm-up sets are modeled as normal sets inside a "Warm-up" block; there is no special warm-up flag in the schema.
  • Consumers (apps, UIs) are free to present or aggregate warm-up vs main blocks differently (e.g., collapsed warm-up, separate volume stats) while using the same underlying structure.
FieldRequiredDescription
nameNoBlock name
seriesYesArray of Series objects

Series​

A group of exercises performed with a specific execution mode.

FieldRequiredDescription
execution_modeYesHow exercises flow (see Execution Modes)
roundsNoWhen present, how many times the series is repeated (e.g. for CIRCUIT, SUPERSET, AMRAP)
rest_afterNoRest after the series
exercisesYesArray of Exercise objects

Exercise​

A single exercise within a series.

FieldRequiredDescription
exercise_idOne requiredID from an exercise library
nameOne requiredFreeform exercise name
groupNoSub-group identifier (for CLUSTER mode)
setsYesArray of Set objects

Set​

The atomic unit — a single prescribed effort.

FieldRequiredDescription
dimensionsYesArray of required dimension names (see Dimensions)
dimension fieldsVariesValues for each declared and optional dimension