HealthKit Mobility: 9 Gait Metrics
9 identifiers · read from Apple’s documentation on 2026-08-28 · tables re-read 2026-10-02
Nine HealthKit identifiers make up the Mobility group: gait figures the system derives from walking, rather than from anything a user starts. Eight are quantity types and one is a category type. Seven of the nine arrived in iOS 14.0 and the other two in iOS 15.0, so the whole group has been in the framework for longer than most of the integrations that ignore it. The HealthKit types introduced in iOS 14 and in iOS 15 list each release's arrivals in full.
What separates this group from the rest of HealthKit is where the numbers come from. These are not measurements a user starts. Four of the eight quantity types define themselves in their own abstracts against ordinary walking: walkingSpeed is the average speed when walking steadily over flat ground, walkingStepLength is the average length of a step under the same conditions, walkingDoubleSupportPercentage is the percentage of time both feet touch the ground while walking steadily over flat ground, and walkingAsymmetryPercentage is the percentage of steps in which one foot moves at a different speed than the other on flat ground. Nothing in those definitions describes a workout, a session, or a device the user has to put on. The subject is walking itself.
stairAscentSpeed and stairDescentSpeed cover the same idea on stairs, one for climbing and one for descending, and they are stored as two distinct identifiers rather than one signed value. sixMinuteWalkTestDistance is the outlier: it stores the distance a user can walk during a six-minute walk test, which is an assessment rather than a passive by-product, and it carries by far the longest discussion text in the group. appleWalkingSteadiness is a percentage measuring the steadiness of the user's gait.
The one category type is appleWalkingSteadinessEvent, which records an incident where the user showed a reduced score for their gait's steadiness. It carries its own dedicated value enum, HKCategoryValueAppleWalkingSteadinessEvent, rather than the generic one, and like every category type it has neither a unit nor an aggregation style.
All eight quantity types state discrete aggregation. Not one is cumulative. That matters more here than it looks, because several of these are percentages and speeds that a naive weekly rollup would happily add together. The correct operations are average, minimum, maximum, and latest, and a gap in the series is an absence rather than a zero. Their unit families are distance, distance per time, distance/time, length, and percentage, which is five labels for three physical dimensions. See the traps below for why that matters.
Nothing in this group has a verified Android counterpart in this site's cross-platform matrix. Every one of the nine is Apple-only until verified, and that is the single most important planning fact about the group: a feature built on walking asymmetry or stair speed has no shipping equivalent on the other platform, so it belongs in an iOS-specific surface rather than in a shared one. Integrating HealthKit covers the authorisation side.
What the group asks of a user is also why it is worth reading. When we compared it with everything else this site covered on September 1, 2026, heart rate variability needed a wrist device the user already owns, sleep staging needed that device worn overnight, and a third-party wearable cloud needed a developer program, an OAuth flow, token rotation and often a paid membership on the user's side. These gait metrics need a phone the user carries and a permission prompt, and the values accumulate whether or not anyone opens your app, so for people who will not wear a chest strap or start a workout they are the only continuously collected data you are likely to get. That is why they matter for products aimed at older adults and for rehab and physical therapy apps. One fall-related type sits outside the group: numberOfTimesFallen, a cumulative count of how many times the user fell, shipped in iOS 8.0 and is filed under Lab and test results, so reading down this group's list will miss it.
One boundary is worth stating plainly. This page describes what each identifier records and how it is stored, and stops there. Apple's abstracts describe gait mechanics; they do not license an app to tell a user what those mechanics mean about them. The moment a product turns these values into a screening result, a risk score, or advice, the question stops being an API question and becomes a regulatory one. Start at FDA regulation for fitness apps before you design that screen, not after.
The identifier list, aggregation styles, unit families, and availability versions here were parsed from Apple's developer documentation on 2026-08-28 and are published in full on the identifier reference.
The 9 identifiers in mobility
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 |
|---|---|---|---|---|---|
| appleWalkingSteadinessread-onlyHKQuantityTypeIdentifierAppleWalkingSteadiness | A quantity sample type that measures the steadiness of the user’s gait. | .discreteAverage | percentage | 15.0 | not verified |
| sixMinuteWalkTestDistanceHKQuantityTypeIdentifierSixMinuteWalkTestDistance | A quantity sample type that stores the distance a user can walk during a six-minute walk test. | .discreteAverage | length | 14.0 | not verified |
| stairAscentSpeedHKQuantityTypeIdentifierStairAscentSpeed | A quantity sample type measuring the user’s speed while climbing a flight of stairs. | .discreteAverage | distance/time | 14.0 | not verified |
| stairDescentSpeedHKQuantityTypeIdentifierStairDescentSpeed | A quantity sample type measuring the user’s speed while descending a flight of stairs. | .discreteAverage | distance/time | 14.0 | not verified |
| walkingAsymmetryPercentageHKQuantityTypeIdentifierWalkingAsymmetryPercentage | A quantity sample type that measures the percentage of steps in which one foot moves at a different speed than the other when walking on flat ground. | .discreteAverage | percentage | 14.0 | not verified |
| walkingDoubleSupportPercentageHKQuantityTypeIdentifierWalkingDoubleSupportPercentage | A quantity sample type that measures the percentage of time when both of the user’s feet touch the ground while walking steadily over flat ground. | .discreteAverage | percentage | 14.0 | not verified |
| walkingSpeedHKQuantityTypeIdentifierWalkingSpeed | A quantity sample type that measures the user’s average speed when walking steadily over flat ground. | .discreteAverage | distance per time | 14.0 | not verified |
| walkingStepLengthHKQuantityTypeIdentifierWalkingStepLength | A quantity sample type that measures the average length of the user’s step when walking steadily over flat ground. | .discreteAverage | distance | 14.0 | not verified |
| appleWalkingSteadinessEventread-onlyHKCategoryTypeIdentifierAppleWalkingSteadinessEvent | A category sample type that records an incident where the user showed a reduced score for their gait’s steadiness. | enum — HKCategoryValueAppleWalkingSteadinessEvent | — | 15.0 | not verified |
One identifier at a time
- Sum it or average it? →Type one identifier and see whether Apple describes it as cumulative or discrete, with the sentence that says so — or where Apple is silent.
- HealthKit query generator →Pick a quantity type and a window; get the HKStatisticsQuery with the aggregation option Apple's own prose states — or a refusal where it states none.
What will bite you
No verified Android side. This site's matrix has no confirmed Health Connect counterpart for any of the nine. If your roadmap has a single mobility screen serving both platforms, the iOS half will populate and the Android half will render an empty state you have to design for. Treat the group as an iOS-only capability until a mapping is verified, and decide up front whether a platform-exclusive surface is acceptable in your product.
Five unit-family labels, three dimensions. walkingSpeed is filed under distance per time, while stairAscentSpeed and stairDescentSpeed are filed under distance/time. walkingStepLength is filed under distance and sixMinuteWalkTestDistance under length. Same physics, different strings. Code that normalises or converts by matching on the unit-family label will silently miss half of them; branch on the identifier instead.
The steadiness pair is two different shapes. appleWalkingSteadiness is a quantity type with a percentage unit family. appleWalkingSteadinessEvent is a category type with its own enum, HKCategoryValueAppleWalkingSteadinessEvent, and no unit at all. The names differ by one word and the read path differs completely. Requesting authorisation for one does not give you the other.
Gaps are not zeros. All eight quantity types are discrete, so a day with no sample means no walking was measured, not that the user walked with zero asymmetry. Writing a zero into a chart on a missing day invents a data point that Apple never recorded.
Questions
- What are the HealthKit mobility types?
- Nine identifiers: walking speed, step length, asymmetry percentage, double support percentage, stair ascent speed, stair descent speed, six-minute walk test distance, and walking steadiness, plus one category type for a walking steadiness event. Eight are quantity types and one is a category type, and seven of the nine shipped in iOS 14.0.
- Do HealthKit mobility metrics have Health Connect equivalents?
- None of the nine has a counterpart confirmed in this site's cross-platform matrix, so all of them count as Apple-only until a mapping is verified. In practice that means a mobility feature has no shipping Android twin today and should live in an iOS-specific part of your product rather than a shared screen.
- Can I add up walking asymmetry over a week?
- No. All eight quantity types in the group state discrete aggregation, which means each sample is a reading rather than a portion of a total. Averaging across a window is meaningful, and so are the minimum, maximum, and most recent value. Summing produces a figure that scales with how many samples exist.
- Do HealthKit mobility metrics require an Apple Watch?
- Not at the API level. Every identifier in the dataset is listed as available on all six platforms Apple names, so nothing in this group is watch-only. Whether values actually exist for a given user is a separate question that depends on their device and settings, and your code has to treat an empty read as a normal outcome.
All 9 identifiers above were read from Apple’s documentation on 2026-10-02. See the full 241-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.