Workout data model

How a workout nests from blocks down to repetitions, and how prescribed and executed values relate.

GET /workouts/{id} returns a workout with its full tree. The list endpoint GET /workouts returns workouts without this content, so list first, then fetch the ones you need.

workout
└── blocks[]                       ordered
    └── prescriptionsGroups[]      ordered; more than one prescription = superset
        └── prescriptions[]        one exercise each (exerciseId, trainingType, note)
            ├── seriePrescriptions[]    the parameters: prescriptionTypeId + unitId
            └── series[]                ordered sets, with completedAt
                ├── serieValues[]       per seriePrescriptionId: valuePrescripted,
                │                       valuePrescriptedInf / Sup (ranges), valueExecuted
                ├── metricValues[]      metrics measured for the whole set
                └── repetitions[]       repNumber, repIndex, type, metricValues[]

What each level means

LevelMeaning
WorkoutOne session for one athlete. completedAt is null until it is performed.
BlockA section of the session, in order.
Prescriptions groupExercises performed together. More than one prescription makes a superset.
PrescriptionOne exercise with its trainingType (vbt, jump, sprint, reaction).
Serie prescriptionA parameter of the prescription, for example load or target reps, as a prescriptionTypeId with a unitId.
SerieOne set actually performed.
Serie valueThe prescribed and executed value of one parameter in one set.
RepetitionOne repetition of a set, with its own measured metrics.

Prescribed versus executed

For each set and each parameter, serieValues holds:

FieldMeaning
valuePrescriptedWhat the coach prescribed.
valuePrescriptedInf, valuePrescriptedSupLower and upper bound when a range was prescribed.
valueExecutedWhat the athlete did. null if not performed.

Join serieValues[].seriePrescriptionId to the prescription's seriePrescriptions[].id to know which parameter it is (prescriptionTypeId) and in which unit it is expressed (unitId).

Units

  • serieValues are expressed in the unitId of their serie prescription.
  • metricValues[].value is expressed in the unit of the metric: read unitId on GET /metrics/{id}.
  • To convert between units of the same dimension use conversionFactor: base = value × conversionFactor, where the base unit is baseUnitId. See Units.

Metric values at two levels

Measurements attach to a whole set or to each repetition. Each value appears once:

LevelWhere it appears
Repetitionseries[].repetitions[].metricValues[]
Setseries[].metricValues[]

Standalone athlete measurements, such as body weight, are not part of a workout and are not available to partners.

Older rows

Workouts written before trainingType existed carry trainingType: null and isVbt: true on VBT prescriptions. GET /workouts?trainingType=vbt includes them.

On this page