What active_duration measures
active_duration is the total number of minutes in the local day that were covered by a movement record, either a step sample or a workout session. It is the time the user was moving, at any intensity, with overlaps removed.
| Field | active_duration |
|---|---|
| Unit | Minutes |
| Reported | Daily |
| Window | Midnight to midnight, profile local time |
| Wearable required | No |
| API | GET /api/v1/profile/biomarker/{externalId}?categories=activity&types=active_duration plus a date range |
| Webhook | BiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id. |
The identity below always holds, because all four values come from one pass over the same timeline:
active_duration = activity_low_intensity_duration
+ activity_medium_intensity_duration
+ activity_high_intensity_durationData sources
| Platform | Derived from | Notes |
|---|---|---|
| iOS, HealthKit | stepCount, HKWorkout | Step samples with start and end times, plus workouts |
| Android, Health Connect | StepsRecord, ExerciseSessionRecord | Same, from whichever apps write them |
| Android, device sensor | Phone step counter | SDK fallback, ranks last |
| Direct integrations | Provider-dependent | Wherever the provider supplies steps or workouts |
| Wearable required | No |
Both kinds of record are taken from the source that won best-source selection for activity that day.
How Sahha calculates active_duration
- Collect every step sample and workout session from the winning source that touches the local day, and clip each to the day’s boundaries.
- Merge them into a single timeline of non-overlapping segments. Where a step sample and a workout overlap, the time is counted once.
- Tag each segment with an intensity band. This is what the intensity biomarkers report. Active duration is simply the sum of all segments regardless of band.
- Cap at 1,440 minutes.
A day with no step samples and no sessions from the winning source produces no biomarker. Absence means no data, not zero.
Interpreting the value
What counts as a lot. There is no score goal for active duration itself. As a rough guide, a phone-only user who walks to work and back and moves around an office produces 60 to 120 minutes. A watch wearer doing the same produces more, because the watch records short movements the phone misses.
It measures time covered, not effort. Ninety minutes of slow walking and ninety minutes of running both report 90. The intensity durations separate them.
It depends on how the source chunks time. A phone records step samples in blocks. A block with a few steps in it is treated as movement for the whole block, so phone-derived active duration can overstate time actually walking. Watches record finer blocks and are closer to the truth.
Today’s value is partial. It grows through the day.
Related scores and insights
Active duration is not a score factor on its own. The Activity Score uses the intensity split instead, through the intense_activity_duration factor, which is medium minutes plus twice the high minutes. See Activity intensity.
There is no trend or comparison insight for active duration.
Use cases
A movement-time tile. Show minutes moved next to steps, so a user who cycles or walks a dog with the phone in a bag still sees credit for time on their feet.
GET /api/v1/profile/biomarker/{externalId}?categories=activity&types=active_duration&startDateTime=2026-08-01&endDateTime=2026-08-31An intensity breakdown. Request the three intensity durations in the same call and render active duration as a stacked bar. Because the identity above holds, the bar always adds up.
A pace signal. Steps divided by active duration gives average cadence in steps per minute. It is a cheap way to see whether a user’s walking is getting brisker over weeks, without needing heart rate.
Limitations
- Do not add it to intensity durations. They are components of it, not additions to it.
- A workout with no session and no steps is invisible. Strength training, rowing, and cycling without a logged session leave no movement record.
- Phone samples are coarse. Active duration from a phone can be higher than from a watch for the same behaviour, because the phone’s step blocks are wider. Compare within a source.
- Absence is not zero. No biomarker means no movement records from the winning source that day.
Related guides
- Activity intensity for the low, medium, high, and sedentary split of the same timeline
- Active hours for how many hours of the day contained movement
- Steps for how the winning source is chosen
- Activity Score explained for how intensity feeds the score
- Data dictionary in the developer docs