Body Composition API: Weight, Body Fat, and Lean Mass Data
Last verified July 24, 2026 · 3 min read
Covered here:HealthKitHealth ConnectGarmin
Where you can get body-composition data#
This is the sharpest "the phone can't do it" case in health data. Neither a phone nor a typical wrist wearable produces body fat or lean mass — you need dedicated hardware or manual entry. Field names, units, and record types change; treat everything below as "as of 2026, verify" against each provider's live data dictionary.
| Source | How you access it | Notes |
|---|---|---|
| Apple HealthKit (iOS) | On-device read, per-type permission | bodyMass (weight), bodyFatPercentage, bodyMassIndex, leanBodyMass, plus height and waistCircumference — all HKQuantityType. No cloud pull; you read in-app whatever a scale app or the user wrote. See the HealthKit setup guide. |
| Android Health Connect | On-device read, per-record permission | WeightRecord, BodyFatRecord, plus related body records (lean body mass, height). On-device datastore other apps write into; no cloud endpoint. Verify exact record names in the Health Connect data-type index. |
| Withings API | Cloud OAuth 2.0 | Smart-scale data: weight, body fat, muscle mass, bone mass, water, visceral fat, and more from BIA / multi-frequency-BIA scales. Common pick for a rich field set — verify current fields and units in Withings' developer docs. |
| Garmin Health API | Cloud OAuth 2.0 | Lists body composition among its metrics for compatible Garmin scales. Coverage is device-dependent; verify field names. |
| Aggregators (Terra, Junction, Rook) | One cloud OAuth + normalized schema | Normalize weight and body-composition measurements across scale vendors. Useful if you want one integration across many scales — see health data aggregator APIs and wearable data APIs. |
Measured or estimated?#
Body composition is a mix of measured, computed, and estimated values, and being explicit about which is which matters here:
- Weight: measured (on a scale) or manually entered. This is the reliable part.
- BMI: computed, not measured — it is weight divided by height squared. Treat it as a derived number, not a reading.
- Body fat percentage and lean mass: estimated via bioelectrical impedance analysis (BIA). A scale sends a small current through the body and infers fat versus fat-free mass from the resistance. BIA is sensitive to hydration, recent food or exercise, time of day, and whether the electrodes are foot-to-foot or hand-to-foot. It is an estimate, not a lab-grade measurement — DEXA and hydrostatic weighing are the reference methods. Never quote a body-fat accuracy percentage; none is sourced, and the numbers move with conditions.
Frame these as general wellness signals for your users, not clinical body-composition results. A single BIA reading can swing simply because someone drank water or worked out beforehand, so trends over consistent conditions are more useful than any one value.
Which should you pick?#
- Full body-composition breakdown (fat, muscle, water, bone): integrate a smart-scale source. Withings is the common pick for a rich bioimpedance field set — verify current fields and units in its docs.
- Hardware-agnostic path: read whatever a paired scale wrote into HealthKit (
bodyFatPercentage,leanBodyMass) or Health Connect (BodyFatRecord). You inherit the scale's data without integrating each vendor, and on-device keeps values on the user's phone until you upload them. - Weight and BMI only: the on-device store plus manual entry is enough — you do not need a cloud scale integration at all.
- Many scale brands at once: an aggregator so you get one normalized schema instead of N vendor integrations.
Before you ship#
Re-verify each provider's current field names, units, and OAuth scopes against its live data dictionary — do not hardcode scale models or field lists that were not taken from the vendor's own docs. Keep the framing honest with users: weight is measured, BMI is computed, and body fat and lean mass are BIA estimates affected by hydration and timing. Above all, set expectations up front that a wearable alone cannot produce these numbers — a smart scale or manual entry is required.
Body composition, by platform
Each type links its reference page on this site. The quote is the platform's own description of the type, copied from the generated reference data, and it is the reason the type is listed: nothing here is paired by name. A platform with nothing listed has no type with a page here whose description names this metric.
Google Health API · read 2026-10-17
- weight — Sample record · operations: list, get, reconcile, rollup, dailyRollup, create, update, batchDelete · webhook support
“Body weight measurement.” — Google
- body-fat — Sample record · operations: list, get, reconcile, rollup, dailyRollup, create, update, batchDelete · webhook support
“Body fat measurement.” — Google
- height — Sample record · operations: list, get, reconcile, create, update, batchDelete · webhook support
“Body height measurement.” — Google
Apple HealthKit · read 2026-10-02
- bodyMass — discrete values · mass units · iOS 8.0+
“A quantity sample type that measures the user’s weight.” — Apple · also a row of the verified HealthKit–Health Connect matrix
- bodyFatPercentage — discrete values · percent units · iOS 8.0+
“A quantity sample type that measures the user’s body fat percentage.” — Apple · also a row of the verified HealthKit–Health Connect matrix
- leanBodyMass — discrete values · mass units · iOS 8.0+
“A quantity sample type that measures the user’s lean body mass.” — Apple · also a row of the verified HealthKit–Health Connect matrix
- bodyMassIndex — discrete values · count units · iOS 8.0+
“A quantity sample type that measures the user’s body mass index.” — Apple · also a row of the verified HealthKit–Health Connect matrix
- height — discrete values · length units · iOS 8.0+
“A quantity sample type that measures the user’s height.” — Apple
- waistCircumference — discrete values · length units · iOS 11.0+
“A quantity sample type that measures the user’s waist circumference.” — Apple
Android Health Connect · read 2026-10-03
- WeightRecord — Instantaneous record · Body Measurement category · aggregates: WEIGHT_AVG, WEIGHT_MAX, WEIGHT_MIN
“Captures the user's weight.” — Google · also a row of the verified HealthKit–Health Connect matrix
- BodyFatRecord — Instantaneous record · Body Measurement category · no aggregate metrics
“Captures the body fat percentage of a user.” — Google · also a row of the verified HealthKit–Health Connect matrix
- LeanBodyMassRecord — Instantaneous record · Body Measurement category · Mass unit · no aggregate metrics
“Captures the user's lean body mass.” — Google · also a row of the verified HealthKit–Health Connect matrix
- BoneMassRecord — Instantaneous record · Body Measurement category · Mass unit · no aggregate metrics
“Captures the user's bone mass.” — Google · also a row of the verified HealthKit–Health Connect matrix
- BodyWaterMassRecord — Instantaneous record · Body Measurement category · Mass unit · no aggregate metrics
“Captures the user's body water mass.” — Google · also a row of the verified HealthKit–Health Connect matrix
- BasalMetabolicRateRecord — Instantaneous record · Body Measurement category · Power unit · aggregates: BASAL_CALORIES_TOTAL
“Captures the BMR of a user.” — Google · also a row of the verified HealthKit–Health Connect matrix
- HeightRecord — Instantaneous record · Body Measurement category · Length unit · aggregates: HEIGHT_AVG, HEIGHT_MAX, HEIGHT_MIN
“Captures the user's height.” — Google
Wear OS Health Services · read 2026-10-04
Nothing listed.
Bluetooth GATT · read 2026-10-17
- Weight Measurement — 0x2A9D · 6 fields · flags-dependent layout
“The Weight Measurement characteristic is used to represent data related to a weight measurement.” — Bluetooth SIG
- Body Composition Measurement — 0x2A9C · 13 fields · flags-dependent layout
“The Body Composition Measurement characteristic is used to represent data related to a body composition measurement.” — Bluetooth SIG
Frequently asked questions
- Can a fitness watch or band measure body fat?
- No. A typical wrist wearable does not measure body fat, lean mass, or BMI. Those come from a smart scale using bioelectrical impedance, a body scanner, or the user entering values manually. This is the sharpest case in health data where a phone or watch alone cannot produce the metric.
- Is body fat percentage from a smart scale accurate?
- It is an estimate, not a lab measurement. Consumer scales use bioelectrical impedance analysis (BIA), which infers fat versus fat-free mass from electrical resistance. BIA is sensitive to hydration, recent food or exercise, time of day, and electrode placement. DEXA and hydrostatic weighing are the reference methods. Treat scale body fat as a wellness signal and track trends under consistent conditions rather than any single reading.
- How do I get weight and body fat data from HealthKit and Health Connect?
- Apple HealthKit exposes bodyMass, bodyFatPercentage, bodyMassIndex, and leanBodyMass as on-device quantity types you read with per-type permission. Android Health Connect exposes WeightRecord and BodyFatRecord, plus related body records, read with per-record permission. Both are on-device only, so you read whatever a paired scale app or the user wrote; there is no cloud pull. Verify exact record and field names in each platform's live data dictionary.
- Is BMI measured or calculated?
- BMI is calculated, not measured. It is weight divided by height squared, so it is only as good as the weight and height behind it. HealthKit exposes it as bodyMassIndex, but treat it as a derived value rather than a sensor reading.
- Which API is best for body composition?
- For a full breakdown of fat, muscle, water, and bone, integrate a smart-scale source; Withings is the common pick for a rich bioimpedance field set. For a hardware-agnostic path, read what a paired scale wrote into HealthKit or Health Connect. If you only need weight and BMI, the on-device store plus manual entry is enough. To combine many scale brands, use an aggregator like Terra or Junction. Verify current fields and units in each provider's docs.
Keep reading
Body composition on the platform stores
Read from Apple’s documentation on 2026-10-02 and from our verified cross-platform reference. Not hand-written — regenerated with the dataset.
| Apple HealthKit | Aggregate with | Unit | iOS |
|---|---|---|---|
| bodyMass | .discreteAverage | mass | 8.0 |
| bodyFatPercentage | .discreteAverage | percent | 8.0 |
| leanBodyMass | .discreteAverage | mass | 8.0 |
| bodyMassIndex | .discreteAverage | count | 8.0 |
- Android Health Connect
- WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecord
- Query shape
- Discrete: average or take min/max. Summing these produces a meaningless number.
Watch out: The store holds it, but something has to write it — usually a smart scale or manual entry. Body fat is a bioimpedance estimate.
Full set: every HealthKit type identifier · every HealthKit error code
Elsewhere on the site
Pages that share this one’s concepts and sources, from other sections.
Next steps
Was this page useful?
Independent comparison, last reviewed July 24, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.
← All health data · by AIFitnessAPI