What the biomarkers measure
| Biomarker | What it is | Unit |
|---|---|---|
body_fat | The latest body fat percentage reading on the day | Percent |
fat_mass | Latest weight × latest body fat percentage, on the same day | Kilograms |
lean_mass | The latest lean body mass reading on the day | Kilograms |
| Field | body_fat, fat_mass, lean_mass |
|---|---|
| Unit | Percent, kg, kg |
| Reported | On days with a reading. The latest reading of the day is kept. |
| Window | Midnight to midnight, profile local time |
| Wearable required | Yes, a body-composition scale or similar |
| API | GET /api/v1/profile/biomarker/{externalId}?categories=body plus one types parameter per field and a date range |
| Webhook | BiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id. |
Like weight and height, these are point-in-time readings with periodicity none. Take the most recent entry as the current value.
Data sources
| Platform | Body fat | Lean mass |
|---|---|---|
| iOS, HealthKit | bodyFatPercentage, from smart-scale apps such as Withings, Renpho, Garmin Index, and Eufy | leanBodyMass, from the same apps |
| Android, Health Connect | BodyFatRecord, from scale apps and Samsung Health | LeanBodyMassRecord |
| Direct integrations | Provider-dependent | Provider-dependent |
| Phone only | Manual entries only | Manual entries only |
How Sahha calculates body fat
- Pick one source for the day within the body category. A source that reports body fat ranks first, so the scale wins over any manual weight entry.
- Body fat and lean mass are the latest reading of each on the day from that source.
- Fat mass is derived: the day’s latest weight from the winning source multiplied by the day’s latest body fat percentage, divided by 100. It is written only when both exist on the same day.
Absence means no reading that day, or for fat mass, no day with both inputs.
Interpreting the value
Consumer body fat estimates are imprecise and consistent. Bioimpedance scales can be several percentage points off a reference method [1], but they drift little from day to day for the same person under the same conditions. The trend over weeks is meaningful; the absolute value is a rough guide.
Hydration moves the reading. Morning, post-workout, and evening readings differ. Coach users to weigh at the same time of day.
Lean mass is the number strength-focused users want. Fat mass falling while lean mass holds is the pattern a body-recomposition feature should look for.
Related scores and insights
None of the three is a score factor or has a trend or comparison insight.
Use cases
A composition trend. Plot fat mass and lean mass over 90 days as two lines, with weight as their sum. The identity holds whenever all three come from the same day.
GET /api/v1/profile/biomarker/{externalId}?categories=body&types=body_fat&types=fat_mass&types=lean_mass&startDateTime=2026-06-05&endDateTime=2026-09-03A same-scale rule. Compare readings only within one source. A user switching scales will see a step change in body fat that has nothing to do with their body.
Limitations
- Scale-dependent. No scale, no data. Coverage is a small fraction of profiles.
- Fat mass needs same-day inputs. A weigh-in without a body fat reading produces no fat mass.
- Point in time. Do not aggregate across days.
- Absence is not zero.
Related guides
- Weight, height, and BMI for the readings body fat is combined with
- Waist circumference for a composition proxy that needs no scale
- Data dictionary in the developer docs
References
- Achamrah N, Colange G, Delay J, et al. Comparison of body composition assessment by DXA and BIA according to the body mass index: a retrospective study on 3655 measures. PLoS ONE. 2018;13(7):e0200465. https://doi.org/10.1371/journal.pone.0200465