What the biomarkers measure
| Biomarker | What it is | Unit |
|---|---|---|
weight | The latest weight reading on the day | Kilograms |
height | The latest height reading on the day | Metres |
body_mass_index | The latest BMI reading on the day, as written by the source | kg/m² |
| Field | weight, height, body_mass_index |
|---|---|
| Unit | kg, m, kg/m² |
| Reported | On days with a reading. The latest reading of the day is kept. |
| Window | Midnight to midnight, profile local time |
| Wearable required | No |
| 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. |
These are point-in-time measurements, not daily aggregates. The data dictionary lists their periodicity as none for that reason. To get a profile’s current weight, query a wide date range and take the most recent entry.
Data sources
| Platform | Weight | Height | BMI |
|---|---|---|---|
| iOS, HealthKit | bodyMass, from smart-scale apps such as Withings, Renpho, and Garmin Index, and manual entries | height, usually entered once | bodyMassIndex, written by scale apps that compute it |
| Android, Health Connect | WeightRecord, from scale apps and Samsung Health | HeightRecord | No record. Not available. |
| Direct integrations | WHOOP supplies height and weight from its body measurements | ||
| Phone only | Manual entries | Manual entries | iOS manual entry only |
How Sahha calculates weight, height, and BMI
- Pick one source for the day within the body category. A source that reports body fat outranks one that reports lean mass, which outranks one that reports only weight, so a smart scale wins over a manual entry. One source wins per day.
- Keep the latest reading from that source on the day. Multiple weigh-ins on one day collapse to the last.
- Convert units. Height arrives in centimetres and is stored in metres.
Absence means no reading that day.
Interpreting the value
Weight is noisy day to day. A kilogram of swing between mornings is water and food, not fat. A 7-day rolling average of weigh-ins is the standard presentation, and the one users trust.
Height is a fact, not a series. Store the latest and stop.
BMI needs a wearer of a compatible scale, or your own arithmetic. Because Sahha reads BMI rather than computing it, coverage is thin. Weight divided by height squared from the latest readings of each gives you a value for everyone with both.
Related scores and insights
None of the three is a score factor or has a trend or comparison insight. Weight and height are inputs to two other biomarkers:
- Resting energy. When no device reports basal energy, Sahha computes it from the latest weight and height plus age and gender. See energy burned.
- Estimated active energy multiplies MET-hours by the latest weight from the last 30 days, or 70 kg if none exists.
Keeping weight current therefore improves the energy biomarkers for every user without a wearable.
Use cases
A weight trend with a rolling average. Plot weigh-ins as dots and a 7-day average as the line. Query 90 days and let sparse users see sparse dots.
GET /api/v1/profile/biomarker/{externalId}?categories=body&types=weight&startDateTime=2026-06-05&endDateTime=2026-09-03A profile completeness prompt. A user with no height or no weight in the last 30 days has less accurate energy biomarkers. One prompt fixes both.
Limitations
- Point in time. Do not sum or average across days as if they were totals.
- BMI is iOS-only in practice.
- Manual entries count as readings from the phone source and lose to any scale.
- Absence is not zero.
Related guides
- Body fat for the composition fields from smart scales
- Waist circumference for the other manual body measurement
- Energy burned for how weight and height feed resting energy
- Data dictionary in the developer docs