Open Workout

Development draft, v0. The schema may change; every change is in the changelog.

Open Workout Schema v0

Two documents. Loads keep the unit the person gave; distances are metres and durations seconds. Every field a server did not get from the person is listed in estimates.

Open Workout Schema v0: workout

One workout: exercise entries with their sets, plus where the record came from. Draft; may change until v1. Schema: https://openworkout.dev/schema/v0/workout.json.

FieldTypeMeaning
$schemathe constant https://openworkout.dev/schema/v0/workout.json
ended_atstring (date-time)
estimatesarray of stringJSON pointers (RFC 6901) to values that were inferred or assumed rather than given.
exercises requiredarray of entry
idstringAssigned by the server that stores the workout.
merged_sourcesarray of sourceOther records of the same session, merged into this one: the same run from two apps, say. This workout is the fullest of them.
notesstring
programobjectThe program day this workout was part of: a label, which changes nothing else here. listed false means the program was withdrawn, and says nothing more.
source requiredsource
started_at requiredstring (date-time)
titlestring

entry

One exercise in a workout.

FieldTypeMeaning
exercise requiredexercise
idstringAssigned by the server; used to edit the entry.
notesstring
sets requiredarray of set
textstringWhat the user called the exercise.

exercise

The exercise an entry was matched to. catalogue and custom are confirmed; close and unmatched need confirmation and never count toward records.

FieldTypeMeaning
id requiredstring or nullOpen Exercise Catalogue ID (oec:<slug>) or a custom exercise ID; null when nothing matched.
match requiredone of catalogue, close, custom, unmatched
name requiredstring

load

A weight in the unit the user gave it.

FieldTypeMeaning
unit requiredone of kg, lb
value requirednumber

set

FieldTypeMeaning
distance_mnumber
duration_sinteger
idstringAssigned by the server; used to edit the set.
loadload
repsinteger
rpenumber
typeone of working, warmup, backoff, amrap, failure, drop

source

Provenance: where the record came from.

FieldTypeMeaning
clientstringThe client or app, e.g. claude, strong, hevy.
external_idstring or nullThe workout's ID in the app it was imported from.
kind requiredone of app, mcp, api, import

Open Workout Schema v0: program

What a workout or multi-week program prescribes: weeks, then days, then slots. A single workout has one week with one day. A prescription, never performed work: loads are rules, not weights. Draft; may change until v1. Schema: https://openworkout.dev/schema/v0/program.json.

FieldTypeMeaning
$schema requiredthe constant https://openworkout.dev/schema/v0/program.json
progression requiredstringHow the targets change over time, in words.
schedulestringHow the days fall across a week, in words.
weeks requiredarray of weekThe weeks of one cycle, repeating.

day

FieldTypeMeaning
key requiredstringStable within a version; what a link to this day names.
name requiredstring
slots requiredarray of slot

exerciseRef

FieldTypeMeaning
id requiredstringAn Open Exercise Catalogue ID (oec:…).
namestring

loadPrescription

How to pick the load. Value and unit depend on the type: percent_training_max and rpe take a value, last_plus a value and unit, choice neither.

FieldTypeMeaning
after_missesintegerA failure rule on last_plus: after this many sessions short at one weight.
drop_percentnumberTake this much off when the failure rule applies.
type requiredone of percent_training_max, rpe, last_plus, choice
unitone of kg, lb
valuenumber

setGroup

A run of identical sets. Reps or a duration, not both.

FieldTypeMeaning
amrapbooleanAs many reps as possible, reps_min at least.
count requiredinteger
duration_sinteger
reps_maxinteger
reps_mininteger

slot

FieldTypeMeaning
exercise requiredexerciseRef
load requiredloadPrescription
notesstring
rest_secondsinteger
sets requiredarray of setGroup
substitutesarray of exerciseRef

week

FieldTypeMeaning
days requiredarray of day