September 3, 2026 · 7 min read

Activity intensity and sedentary time

Low, medium, and high intensity, sedentary duration, and longest sedentary period: MET bands, sedentary derivation, scoring, and what to build.

What the intensity biomarkers measure

Five durations that describe how hard, and how continuously, the user moved during the local day. The first three partition the user’s movement time. The last two describe the awake time with no movement at all.

BiomarkerWhat it covers
activity_low_intensity_durationMovement below 3 METs: slow walking, pottering, light movement
activity_medium_intensity_durationMovement from 3 to below 6 METs: brisk walking, easy cycling, most logged workouts
activity_high_intensity_durationMovement at 6 METs and above: running, hard cycling, sessions logged as vigorous
activity_sedentary_durationTotal awake time with no movement record
activity_sedentary_longest_periodThe single longest stretch of awake time with no movement record

All five are reported daily, in minutes, over a midnight-to-midnight window in the profile’s local time zone, and none requires a wearable. The three movement bands sum exactly to active duration.

Access
APIGET /api/v1/profile/biomarker/{externalId}?categories=activity plus one types parameter per field and a date range
WebhookBiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id.

Data sources

PlatformDerived fromNotes
iOS, HealthKitstepCount, HKWorkout, sleep recordsStep samples with times, workouts with a MET value where Apple supplies one
Android, Health ConnectStepsRecord, ExerciseSessionRecord, sleep recordsSame, from whichever apps write them
Android, device sensorPhone step counterSDK fallback, ranks last
Direct integrationsProvider-dependentWherever the provider supplies steps or workouts
Wearable requiredNoHigh intensity is rare without one

Movement records come from the source that won best-source selection for activity that day. Sleep records, used only to exclude the night from sedentary time, come from any source. No device reports these bands directly. Apple’s and Google’s own intensity minutes use different thresholds and are not read.

How Sahha calculates activity intensity

The three movement bands

  1. Collect every step sample and workout session from the winning source that touches the day, clipped to the day.
  2. Assign each record a MET value. For a step sample, cadence is steps divided by duration in minutes, converted to METs along the Tudor-Locke cadence curve, where roughly 100 steps per minute is 3 METs and roughly 130 is 6 [1]. A step sample with no duration is treated as low. For a session, the platform’s MET value is used. A session without one is treated as medium, on the basis that a deliberately logged workout is unlikely to be light.
  3. Build one timeline of non-overlapping segments. Where a step sample and a session overlap, the higher band wins. A logged run promotes the step samples underneath it to high.
  4. Sum segment lengths per band. Cap each at 1,440 minutes.

Sedentary duration and longest period

  1. Start with the day window: the full 24 hours for a past day, or midnight to the current time for today.
  2. Subtract every interval covered by a step sample or workout session from the winning source.
  3. Subtract sleep. In-bed records are preferred, then asleep records, from any source. If the user has no sleep record for the night, an 11pm to 7am window is assumed.
  4. What remains, summed, is activity_sedentary_duration. The longest single remaining gap is activity_sedentary_longest_period. The longest period can never exceed the duration.

Both sedentary values are only published on days where the winning source reported steps. A source that recorded nothing would otherwise look like 24 hours of sitting. Absence means no data, not zero, for all five.

Interpreting the values

Medium and high are the ones that map to health guidance. The 150 minutes per week of moderate, or 75 vigorous, in the World Health Organization guidelines [2] corresponds to medium and high here, at the same MET boundaries. Low intensity does not count toward those targets, and that is usually the band a phone-only user has most of.

Phone-only users skew low. Without a logged session, the only path to medium is walking at 100 steps per minute or more, and to high is running. Watch and wearable users with automatic workout detection have far more medium and high time for the same behaviour.

Sedentary duration is a residual. It is whatever is left after movement and sleep. A user whose phone stays on the desk all afternoon reads as sedentary all afternoon, whether or not they were. Treat it as an upper bound.

Longest period is the more specific signal. Six hours of sedentary time spread across a day in 20-minute gaps and six hours in one unbroken block are the same duration and very different days. The longest period separates them, and it is the value the extended inactivity factor uses.

Today’s sedentary values are partial. They are measured against the current time, not the full day, so they do not inflate through the morning. The three movement bands grow through the day.

Score factor: intense activity duration. The Activity and Wellbeing scores use a factor named intense_activity_duration, with unit minute and goal 30. Its value is medium minutes plus twice the high minutes, so a 15-minute run counts the same as 30 minutes of brisk walking. Credit rises quickly at first:

Medium + 2 × high (minutes)Factor score
00.30
100.74
200.91
300.97
45 and above0.99 to 1.00

For the current day the factor is projected forward based on the user’s wake time and time elapsed. Low intensity duration is not a factor.

Score factor: extended inactivity. The Activity, Wellbeing, and Mental Wellbeing scores carry a factor named extended_inactivity, unit minute, whose value is the day’s activity_sedentary_longest_period. Credit falls as the longest unbroken sedentary stretch grows, so a user who breaks up sitting regularly scores well even on a day with a lot of total sedentary time.

Trends. intense_activity_duration and extended_inactivity trends are available on the factor scores.

Comparisons. None.

Use cases

A weekly moderate-to-vigorous minutes total. Sum medium plus high over the last 7 days and show it against 150. This is the single most common thing customers build on these fields.

GET /api/v1/profile/biomarker/{externalId}?categories=activity&types=activity_medium_intensity_duration&types=activity_high_intensity_duration&startDateTime=2026-08-26&endDateTime=2026-09-02

A stacked movement bar. Low, medium, high as one bar per day, with active duration as the total. It always adds up.

A sitting-break prompt. Use today’s longest sedentary period. When it passes a threshold the user has set, or their own typical value, prompt once. Skip users whose winning source is the phone, since their sedentary time is least trustworthy.

Limitations

  • Do not sum the five. Low plus medium plus high equals active duration. Sedentary duration is separate, and the longest period is a subset of it.
  • Sessions promote, steps do not demote. A logged workout’s MET always wins over the cadence under it.
  • Unlogged workouts are low or absent. Cycling with the phone in a bag produces nothing. Strength training on a watch without a session produces a few low-intensity minutes.
  • Sedentary needs steps. No steps from the winning source that day, no sedentary biomarkers.
  • The 11pm to 7am sleep fallback is an assumption. Shift workers without sleep tracking will have their working night counted as sedentary and their daytime sleep as sedentary too.
  • Absence is not zero for any of the five.

References

  1. Tudor-Locke C, Han H, Aguiar EJ, et al. How fast is fast enough? Walking cadence (steps/min) as a practical estimate of intensity in adults: a narrative review. British Journal of Sports Medicine. 2018;52(12):776-788. https://doi.org/10.1136/bjsports-2017-097628
  2. Bull FC, Al-Ansari SS, Biddle S, et al. World Health Organization 2020 guidelines on physical activity and sedentary behaviour. British Journal of Sports Medicine. 2020;54(24):1451-1462. https://doi.org/10.1136/bjsports-2020-102955

Related