HealthKit's 21 Exercise Constants
21 identifiers · read from Apple’s documentation on 2026-08-28
Apple's Exercise and fitness group is 21 identifiers, and not one of them measures anything. All 21 belong to the workoutActivity family, which makes them constants you attach to a workout rather than sample types that produce values. The aggregation, unit family and value columns are empty for the whole group, and empty is the correct answer there rather than a hole in the data. The group comes from this site's HealthKit identifier dataset, parsed from Apple's developer documentation on 2026-08-28.
The constant-versus-measurement distinction catches people on first contact
with the framework. A quantity type produces samples, each with a number, a
unit, a start time and an end time. A workout activity constant produces
nothing. It is one label, chosen when a session starts, saying what kind of
session this was. Picking highIntensityIntervalTraining does not make
HealthKit record intervals, and picking traditionalStrengthTraining does
not make it record sets or reps. Everything numeric about the session arrives
from elsewhere, which is why products that need per-rep detail run their own
workout detection beside the store.
Nine of the 21 date to iOS 8.0: cycling, elliptical, running,
walking, stairClimbing, crossTraining,
functionalStrengthTraining, traditionalStrengthTraining and
preparationAndRecovery. Eight more arrived in 10.0, among them
coreTraining, highIntensityIntervalTraining, flexibility,
jumpRope, stepTraining and stairs. iOS 11.0 added handCycling
and mixedCardio, 13.0 added fitnessGaming for fitness-based video
games, and 14.0 added cooldown. So the group grew in two bursts and has
barely moved since.
The pair that causes the most grief is traditionalStrengthTraining and
functionalStrengthTraining, both from iOS 8.0. Apple separates them by
equipment. Traditional is strength training exercises primarily using machines
or free weights; functional is strength training primarily with free weights
and body weight. Free weights sit in both definitions. Let users choose freely
and the same barbell session lands under both labels across your user base,
which quietly breaks every filter and chart you build on top.
Two more pairs are worth settling before you build a picker. stairClimbing
is for a stair climbing machine, while stairs is for running, walking or
drills on real stairs, and Apple's abstract names a stadium or a multilevel
building as examples. preparationAndRecovery from iOS 8.0 covers warm-up
and therapeutic work such as foam rolling and stretching, while cooldown
from 14.0 covers low intensity stretching and mobility exercises following a
more vigorous workout. Both are stretching. What separates them is which side
of the session they sit on.
Wheelchair users have wheelchairWalkPace and wheelchairRunPace from
iOS 10.0, labelling a wheelchair workout at each pace, plus handCycling
from 11.0. If your workout type picker omits all three, those users have no
way to record what they actually did.
No identifier in this group has a verified Android counterpart in our cross-platform matrix, so treat the whole group as Apple-only until verified and expect the Android mapping to be hand-written. For the plumbing around the constant, the HealthKit integration guide covers permissions and reads, and watchOS workout app anatomy covers where in a session the constant is actually chosen. If the gym is your product, the strength training app guide covers what has to sit beside HealthKit to make a set and rep log work at all.
The 21 identifiers in exercise and fitness activities
Every field is joined from Apple’s documentation. Aggregation style and unit family are the two Apple states only in prose — where its wording does not state one, this table says so rather than guessing. Android names appear only where the mapping is verified on both platforms.
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| cooldownHKWorkoutActivityTypeCooldown | The constant for low intensity stretching and mobility exercises following a more vigorous workout. | — | — | 14.0 | not verified |
| coreTrainingHKWorkoutActivityTypeCoreTraining | The constant for core training. | — | — | 10.0 | not verified |
| crossTrainingHKWorkoutActivityTypeCrossTraining | The constant for exercise that includes any mixture of cardio, strength, and/or flexibility training. | — | — | 8.0 | not verified |
| cyclingHKWorkoutActivityTypeCycling | The constant for cycling. | — | — | 8.0 | not verified |
| ellipticalHKWorkoutActivityTypeElliptical | The constant for workouts on an elliptical machine. | — | — | 8.0 | not verified |
| fitnessGamingHKWorkoutActivityTypeFitnessGaming | The constant for playing fitness-based video games. | — | — | 13.0 | not verified |
| flexibilityHKWorkoutActivityTypeFlexibility | The constant for a flexibility workout. | — | — | 10.0 | not verified |
| functionalStrengthTrainingHKWorkoutActivityTypeFunctionalStrengthTraining | The constant for strength training, primarily with free weights and body weight. | — | — | 8.0 | not verified |
| handCyclingHKWorkoutActivityTypeHandCycling | The constant for hand cycling. | — | — | 11.0 | not verified |
| highIntensityIntervalTrainingHKWorkoutActivityTypeHighIntensityIntervalTraining | The constant for high intensity interval training. | — | — | 10.0 | not verified |
| jumpRopeHKWorkoutActivityTypeJumpRope | The constant for jumping rope. | — | — | 10.0 | not verified |
| mixedCardioHKWorkoutActivityTypeMixedCardio | The constant for workouts that mix a variety of cardio exercise machines or modalities. | — | — | 11.0 | not verified |
| preparationAndRecoveryHKWorkoutActivityTypePreparationAndRecovery | The constant for warm-up and therapeutic activities like foam rolling and stretching. | — | — | 8.0 | not verified |
| runningHKWorkoutActivityTypeRunning | The constant for running and jogging. | — | — | 8.0 | not verified |
| stairClimbingHKWorkoutActivityTypeStairClimbing | The constant for workouts using a stair climbing machine. | — | — | 8.0 | not verified |
| stairsHKWorkoutActivityTypeStairs | The constant for running, walking, or other drills using stairs (for example, in a stadium or inside a multilevel building). | — | — | 10.0 | not verified |
| stepTrainingHKWorkoutActivityTypeStepTraining | The constant for training using a step bench. | — | — | 10.0 | not verified |
| traditionalStrengthTrainingHKWorkoutActivityTypeTraditionalStrengthTraining | The constant for strength training exercises primarily using machines or free weights. | — | — | 8.0 | not verified |
| walkingHKWorkoutActivityTypeWalking | The constant for walking. | — | — | 8.0 | not verified |
| wheelchairRunPaceHKWorkoutActivityTypeWheelchairRunPace | The constant for wheelchair workout at running pace. | — | — | 10.0 | not verified |
| wheelchairWalkPaceHKWorkoutActivityTypeWheelchairWalkPace | The constant for a wheelchair workout at walking pace. | — | — | 10.0 | not verified |
What will bite you
Ten of the 21 ship with a one-line abstract and no discussion whatsoever:
crossTraining, fitnessGaming, flexibility, handCycling,
jumpRope, mixedCardio, preparationAndRecovery, stairs,
stepTraining and traditionalStrengthTraining. That last one is the
label most gym products reach for first, and Apple gives it a single sentence.
Anything else you believe about it comes from you.
Empty columns are not gaps waiting to be filled. If your ingestion pipeline treats this group the way it treats quantity types, every row lands with a null aggregation and a null unit, and eventually somebody files a bug against the dataset. There is nothing here to sum or average. A workout has a duration, a type, and measurements that live in other groups.
crossTraining and mixedCardio overlap by definition. Cross training is
any mixture of cardio, strength or flexibility work; mixed cardio is a mix of
cardio machines or modalities. A circuit class fits both. crossTraining
shipped in iOS 8.0 and mixedCardio in 11.0, so older sessions in your
database carry the older label for workouts you would tag the newer way today.
The mapping is permanent in practice. A constant is chosen once when the session starts, and it is what every later filter, export and chart keys on. Change your mapping in version 4 and version 3's history stays under the old label forever. Decide the mapping before launch and write down why.
Questions
- What is a HealthKit workout activity constant?
- A label rather than a measurement. All 21 identifiers in the Exercise and fitness group are workoutActivity constants, which means they carry no unit, no aggregation style and no value. You choose one when a workout session starts to say what kind of session it was, and the numbers inside the session come from quantity types instead.
- Should I use traditionalStrengthTraining or functionalStrengthTraining?
- Apple splits them by equipment. Traditional is strength training primarily using machines or free weights, functional is primarily free weights and body weight, so free weights appear in both definitions. Both shipped in iOS 8.0. Pick one rule for your product, apply it in code rather than leaving it to the user, and keep it stable across releases.
- How many exercise and fitness constants does HealthKit have?
- 21, and every one of them is a workoutActivity constant. Nine date back to iOS 8.0, eight more arrived in iOS 10.0, two in 11.0, one in 13.0 and one in 14.0. The newest is cooldown, for low intensity stretching and mobility exercises following a more vigorous workout.
All 21 identifiers above were read from Apple’s documentation on 2026-08-28. See the full 240-identifier table for every group at once, or the datasets for the same data as JSON and CSV. Apple’s abstracts are quoted for identification; the grouping, the aggregation split and the cross-platform mapping are AIFitnessAPI’s.