September 3, 2026 · 7 min read

Energy burned

Which devices report calories, how Sahha estimates them otherwise, why total needs both halves, and what to build.

What the energy biomarkers measure

BiomarkerCategoryWhat it is
active_energy_burnedactivityKilocalories spent on movement during the local day
resting_energy_burnedbodyKilocalories the body spent at rest during the local day, also called basal energy or BMR
total_energy_burnedactivityThe two added together

All three are reported daily, in kilocalories, over a midnight-to-midnight window in the profile’s local time zone, and none requires a wearable. Resting energy lives under the body category in the data dictionary, so a query for categories=activity alone will not return it.

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

Data sources

Energy is the one activity family where the raw data is usually an estimate made by the device rather than a measurement, and where Android and iOS differ sharply.

PlatformActive energyResting energyTotal energy
iOS, HealthKitactiveEnergyBurned, computed by Apple Watch from heart rate and motion. Without a Watch, HealthKit usually has none unless a third-party app writes it.basalEnergyBurned, estimated by Apple from the user’s Health profileNot read
Android, Health ConnectActiveCaloriesBurnedRecord, written by Google Fit, Samsung Health, or a wearable’s companion appNo basal record is read. Always Sahha’s estimate.TotalCaloriesBurnedRecord, read for source ranking only
Android, device sensorNone. The phone step counter produces no calories.NoneNone
Direct integrationsProvider-dependentProvider-dependentProvider-dependent
Wearable requiredNoNoNo

Where a platform provides nothing, Sahha estimates, as described next.

How Sahha calculates energy burned

Choosing the source

For the energy category, the source that wins the day is the one with the most complete picture: a source that reports total calories ranks first, one that reports both active and basal second, one that reports only one of them third. Ties go to the highest total. This is separate from the steps-based ranking used for the rest of the activity category.

Active energy

  1. If the winning source reports active calories directly, Sahha sums those samples for the day. This is the normal case for Apple Watch and for most wearables.
  2. Otherwise Sahha estimates. Every step sample gets a MET value from its cadence, every logged workout gets its own MET value or 4.0 if it has none, and the two are integrated over time as MET × hours × body weight, with overlaps counted once. Body weight is the latest weight biomarker within 30 days, or 70 kg if the profile has none. Baseline metabolism is not subtracted, matching how wearables report “active calories”.

Resting energy

  1. If a source reports basal energy, Sahha sums it for the day.
  2. Otherwise, Sahha computes the Mifflin-St Jeor basal metabolic rate [1] from the profile’s latest weight and height biomarkers and the demographic age and gender: 10 × weight in kg, plus 6.25 × height in cm, minus 5 × age, plus 5 for male or minus 161 for female. This runs whenever weight or height changes and is skipped on any day that already has a measured value. It requires all four inputs. A profile with no age or gender gets no estimate.

Total energy

Total is written whenever an active or resting biomarker lands for the day and the other half already exists. It is the sum of the two stored biomarkers and inherits the source of whichever triggered it. No total is published until both halves exist.

Absence means no data, not zero, for all three.

Interpreting the values

Directly reported and estimated values are not comparable. A Watch wearer’s active energy and a phone-only user’s estimated active energy differ in method, not just in accuracy. Do not rank users across the two.

Resting energy is stable by construction. Measured or estimated, it moves only when weight, height, or Apple’s profile changes. A user will see the same number for weeks. That is correct, not stale.

Total is dominated by resting. For most adults, resting is 1,300 to 1,900 kcal and active is 200 to 800. Total therefore varies less day to day than users expect, and a “big day” moves it by 20 to 30 percent at most.

Active energy from the estimated path scales with weight. Two users with identical movement and different weights get different numbers. That is physically right and worth explaining in-product.

Score factor. The Activity and Wellbeing scores carry a factor named active_calories, unit kcal, goal 500, whose value is the day’s active energy. Credit rises steeply and saturates near 900:

Active kcalFactor score
00.10
1000.33
2500.59
5000.84
7500.96
900 and above1.00

For the current day the factor is projected forward like steps. Resting and total energy are not factors.

Trend. An active_calories trend is available on the factor score.

Comparison. None.

Use cases

An energy balance view. Pair total energy burned with the energy_intake nutrition biomarker for users who log food. Show the gap as a range, not a number, because logged intake is far less complete than burned energy, and a naive subtraction reads as a large deficit for almost everyone.

GET /api/v1/profile/biomarker/{externalId}?categories=activity&categories=body&types=active_energy_burned&types=resting_energy_burned&types=total_energy_burned&startDateTime=2026-08-01&endDateTime=2026-08-31

An effort-based goal for users who cannot count steps. Active energy credits cycling, swimming, and wheelchair use when a device reports them, where steps do not. Offer it as the goal metric for users whose winning source is a wearable with direct active energy, and steps for everyone else.

A “your resting energy is an estimate” note. For Android users, show that resting energy was computed from their profile and prompt for weight and height if either is missing. That single prompt turns on both resting and total for them.

Limitations

  • Android users have no total until weight, height, age, and gender exist. Check for the resting biomarker before rendering a total.
  • The 70 kg fallback is silent. Estimated active energy for a profile with no weight biomarker assumes 70 kg. Ask for weight early.
  • Resting energy is in the body category. Add body to the categories filter or you will never see it.
  • Do not add active energy to total. Total already contains it.
  • Direct and estimated values sit under the same biomarker name and source. The estimate is attributed to the source whose steps it was built from, so there is no flag. An Apple Watch or a wearable that reports calories means reported. A phone or the Android step counter means estimated.
  • Absence is not zero for all three.

References

  1. Mifflin MD, St Jeor ST, Hill LA, Scott BJ, Daugherty SA, Koh YO. A new predictive equation for resting energy expenditure in healthy individuals. American Journal of Clinical Nutrition. 1990;51(2):241-247. https://doi.org/10.1093/ajcn/51.2.241

Related