NutritionRecord: Health Connect nutrition data
Read from Google’s documentation on 2026-10-03 · Google’s reference page last updated 2026-06-24
NutritionRecord is Health Connect's nutrition record — an Interval record in Google's Nutrition category. Its read permission is android.permission.health.READ_NUTRITION; its write permission is android.permission.health.WRITE_NUTRITION. It supports 42 aggregate metrics (BIOTIN_TOTAL, CAFFEINE_TOTAL, CALCIUM_TOTAL and CHLORIDE_TOTAL and more). Mandatory fields per Google's table: endTime, mealType, metadata and startTime.
What Google says NutritionRecord is
Captures what nutrients were consumed as part of a meal or a food item.
Quoted from Google’s NutritionRecord Jetpack reference, last updated 2026-06-24, read 2026-10-03.
- Class
androidx.health.connect.client.records.NutritionRecord- Google's category
- Nutrition
- Record type
- Interval
- Unit class
androidx.health.connect.client.units.Mass- Mandatory fields
endTimemealTypemetadatastartTime- Added in (Jetpack)
1.1.0
Permissions
The exact strings Google’s data-types table declares for NutritionRecord. Google’s page: “Before requesting any permissions, your app must declare them in the manifest.”
| Access | Permission string | Framework reference |
|---|---|---|
| Read | android.permission.health.READ_NUTRITION | API 34 · U Ext 7 |
| Write | android.permission.health.WRITE_NUTRITION | API 34 · U Ext 7 |
<uses-permission android:name="android.permission.health.READ_NUTRITION" />
<uses-permission android:name="android.permission.health.WRITE_NUTRITION" />import androidx.health.connect.client.permission.HealthPermission
import androidx.health.connect.client.records.NutritionRecord
val permissions = setOf(
HealthPermission.getReadPermission(NutritionRecord::class),
HealthPermission.getWritePermission(NutritionRecord::class),
)The 49 fields of NutritionRecord
Types and descriptions as Google’s reference prints them. The range column quotes Google’s own range annotation or sentence; a dash means Google states none, which is not the same as no validation.
| Field | Type | Allowed range | Google’s description |
|---|---|---|---|
biotin= null | Mass? | Valid range: 0-100 grams. | Biotin in Mass unit. Optional field. Valid range: 0-100 grams. |
caffeine= null | Mass? | Valid range: 0-100 grams. | Caffeine in Mass unit. Optional field. Valid range: 0-100 grams. |
calcium= null | Mass? | Valid range: 0-100 grams. | Calcium in Mass unit. Optional field. Valid range: 0-100 grams. |
chloride= null | Mass? | Valid range: 0-100 grams. | Chloride in Mass unit. Optional field. Valid range: 0-100 grams. |
cholesterol= null | Mass? | Valid range: 0-100 grams. | Cholesterol in Mass unit. Optional field. Valid range: 0-100 grams. |
chromium= null | Mass? | Valid range: 0-100 grams. | Chromium in Mass unit. Optional field. Valid range: 0-100 grams. |
copper= null | Mass? | Valid range: 0-100 grams. | Copper in Mass unit. Optional field. Valid range: 0-100 grams. |
dietaryFiber= null | Mass? | Valid range: 0-100000 grams. | Dietary fiber in Mass unit. Optional field. Valid range: 0-100000 grams. |
endTimemandatory | Instant | — | End time of the record. |
endZoneOffset | ZoneOffset? | — | User experienced zone offset at endTime, or null if unknown. Providing these will help history aggregations results stay consistent should user travel. Queries with user experienced time filters will assume system current zone offset if the information is absent. |
energy= null | Energy? | Valid range: 0-100000 kcal. | Energy in Energy unit. Optional field. Valid range: 0-100000 kcal. |
energyFromFat= null | Energy? | Valid range: 0-100000 kcal. | Energy from fat in Energy unit. Optional field. Valid range: 0-100000 kcal. |
folate= null | Mass? | Valid range: 0-100 grams. | Folate in Mass unit. Optional field. Valid range: 0-100 grams. |
folicAcid= null | Mass? | Valid range: 0-100 grams. | Folic acid in Mass unit. Optional field. Valid range: 0-100 grams. |
iodine= null | Mass? | Valid range: 0-100 grams. | Iodine in Mass unit. Optional field. Valid range: 0-100 grams. |
iron= null | Mass? | Valid range: 0-100 grams. | Iron in Mass unit. Optional field. Valid range: 0-100 grams. |
magnesium= null | Mass? | Valid range: 0-100 grams. | Magnesium in Mass unit. Optional field. Valid range: 0-100 grams. |
manganese= null | Mass? | Valid range: 0-100 grams. | Manganese in Mass unit. Optional field. Valid range: 0-100 grams. |
mealTypemandatory= MealType.MEAL_TYPE_UNKNOWN | Int | — | Type of meal related to the nutrients consumed. Optional, enum field. Allowed values: MealType. |
metadatamandatory | Metadata | — | Set of common metadata associated with the written record. |
molybdenum= null | Mass? | Valid range: 0-100 grams. | Molybdenum in Mass unit. Optional field. Valid range: 0-100 grams. |
monounsaturatedFat= null | Mass? | Valid range: 0-100000 grams. | Monounsaturated fat in Mass unit. Optional field. Valid range: 0-100000 grams. |
name= null | String? | — | Name for food or drink, provided by the user. Optional field. |
niacin= null | Mass? | Valid range: 0-100 grams. | Niacin in Mass unit. Optional field. Valid range: 0-100 grams. |
pantothenicAcid= null | Mass? | Valid range: 0-100 grams. | Pantothenic acid in Mass unit. Optional field. Valid range: 0-100 grams. |
phosphorus= null | Mass? | Valid range: 0-100 grams. | Phosphorus in Mass unit. Optional field. Valid range: 0-100 grams. |
polyunsaturatedFat= null | Mass? | Valid range: 0-100000 grams. | Polyunsaturated fat in Mass unit. Optional field. Valid range: 0-100000 grams. |
potassium= null | Mass? | Valid range: 0-100 grams. | Potassium in Mass unit. Optional field. Valid range: 0-100 grams. |
protein= null | Mass? | Valid range: 0-100000 grams. | Protein in Mass unit. Optional field. Valid range: 0-100000 grams. |
riboflavin= null | Mass? | Valid range: 0-100 grams. | Riboflavin in Mass unit. Optional field. Valid range: 0-100 grams. |
saturatedFat= null | Mass? | Valid range: 0-100000 grams. | Saturated fat in Mass unit. Optional field. Valid range: 0-100000 grams. |
selenium= null | Mass? | Valid range: 0-100 grams. | Selenium in Mass unit. Optional field. Valid range: 0-100 grams. |
sodium= null | Mass? | Valid range: 0-100 grams. | Sodium in Mass unit. Optional field. Valid range: 0-100 grams. |
startTimemandatory | Instant | — | Start time of the record. |
startZoneOffset | ZoneOffset? | — | User experienced zone offset at startTime, or null if unknown. Providing these will help history aggregations results stay consistent should user travel. Queries with user experienced time filters will assume system current zone offset if the information is absent. |
sugar= null | Mass? | Valid range: 0-100000 grams. | Sugar in Mass unit. Optional field. Valid range: 0-100000 grams. |
thiamin= null | Mass? | Valid range: 0-100 grams. | Thiamin in Mass unit. Optional field. Valid range: 0-100 grams. |
totalCarbohydrate= null | Mass? | Valid range: 0-100000 grams. | Total carbohydrate in Mass unit. Optional field. Valid range: 0-100000 grams. |
totalFat= null | Mass? | Valid range: 0-100000 grams. | Total fat in Mass unit. Optional field. Valid range: 0-100000 grams. |
transFat= null | Mass? | Valid range: 0-100000 grams. | Trans fat in Mass unit. Optional field. Valid range: 0-100000 grams. |
unsaturatedFat= null | Mass? | Valid range: 0-100000 grams. | Unsaturated fat in Mass unit. Optional field. Valid range: 0-100000 grams. |
vitaminA= null | Mass? | Valid range: 0-100 grams. | Vitamin A in Mass unit. Optional field. Valid range: 0-100 grams. |
vitaminB12= null | Mass? | Valid range: 0-100 grams. | Vitamin B12 in Mass unit. Optional field. Valid range: 0-100 grams. |
vitaminB6= null | Mass? | Valid range: 0-100 grams. | Vitamin B6 in Mass unit. Optional field. Valid range: 0-100 grams. |
vitaminC= null | Mass? | Valid range: 0-100 grams. | Vitamin C in Mass unit. Optional field. Valid range: 0-100 grams. |
vitaminD= null | Mass? | Valid range: 0-100 grams. | Vitamin D in Mass unit. Optional field. Valid range: 0-100 grams. |
vitaminE= null | Mass? | Valid range: 0-100 grams. | Vitamin E in Mass unit. Optional field. Valid range: 0-100 grams. |
vitaminK= null | Mass? | Valid range: 0-100 grams. | Vitamin K in Mass unit. Optional field. Valid range: 0-100 grams. |
zinc= null | Mass? | Valid range: 0-100 grams. | Zinc in Mass unit. Optional field. Valid range: 0-100 grams. |
Aggregate metrics
The AggregateMetric constants Google defines on NutritionRecord. The value type is the T in Google’s AggregateMetric<T> signature. Every aggregate metric across all records.
| Metric | Value type | Google’s description |
|---|---|---|
| NutritionRecord.BIOTIN_TOTAL | Mass | Metric identifier to retrieve the total biotin from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.CAFFEINE_TOTAL | Mass | Metric identifier to retrieve the total caffeine from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.CALCIUM_TOTAL | Mass | Metric identifier to retrieve the total calcium from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.CHLORIDE_TOTAL | Mass | Metric identifier to retrieve the total chloride from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.CHOLESTEROL_TOTAL | Mass | Metric identifier to retrieve the total cholesterol from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.CHROMIUM_TOTAL | Mass | Metric identifier to retrieve the total chromium from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.COPPER_TOTAL | Mass | Metric identifier to retrieve the total copper from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.DIETARY_FIBER_TOTAL | Mass | Metric identifier to retrieve the total dietary fiber from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.ENERGY_FROM_FAT_TOTAL | Energy | Metric identifier to retrieve the total energy from fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.ENERGY_TOTAL | Energy | Metric identifier to retrieve the total energy from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.FOLATE_TOTAL | Mass | Metric identifier to retrieve the total folate from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.FOLIC_ACID_TOTAL | Mass | Metric identifier to retrieve the total folic acid from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.IODINE_TOTAL | Mass | Metric identifier to retrieve the total iodine from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.IRON_TOTAL | Mass | Metric identifier to retrieve the total iron from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.MAGNESIUM_TOTAL | Mass | Metric identifier to retrieve the total magnesium from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.MANGANESE_TOTAL | Mass | Metric identifier to retrieve the total manganese from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.MOLYBDENUM_TOTAL | Mass | Metric identifier to retrieve the total molybdenum from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.MONOUNSATURATED_FAT_TOTAL | Mass | Metric identifier to retrieve the total monounsaturated fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.NIACIN_TOTAL | Mass | Metric identifier to retrieve the total niacin from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.PANTOTHENIC_ACID_TOTAL | Mass | Metric identifier to retrieve the total pantothenic acid from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.PHOSPHORUS_TOTAL | Mass | Metric identifier to retrieve the total phosphorus from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.POLYUNSATURATED_FAT_TOTAL | Mass | Metric identifier to retrieve the total polyunsaturated fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.POTASSIUM_TOTAL | Mass | Metric identifier to retrieve the total potassium from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.PROTEIN_TOTAL | Mass | Metric identifier to retrieve the total protein from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.RIBOFLAVIN_TOTAL | Mass | Metric identifier to retrieve the total riboflavin from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.SATURATED_FAT_TOTAL | Mass | Metric identifier to retrieve the total saturated fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.SELENIUM_TOTAL | Mass | Metric identifier to retrieve the total selenium from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.SODIUM_TOTAL | Mass | Metric identifier to retrieve the total sodium from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.SUGAR_TOTAL | Mass | Metric identifier to retrieve the total sugar from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.THIAMIN_TOTAL | Mass | Metric identifier to retrieve the total thiamin from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.TOTAL_CARBOHYDRATE_TOTAL | Mass | Metric identifier to retrieve the total total carbohydrate from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.TOTAL_FAT_TOTAL | Mass | Metric identifier to retrieve the total total fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.TRANS_FAT_TOTAL | Mass | Metric identifier to retrieve the total trans fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.UNSATURATED_FAT_TOTAL | Mass | Metric identifier to retrieve the total unsaturated fat from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_A_TOTAL | Mass | Metric identifier to retrieve the total vitamin a from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_B12_TOTAL | Mass | Metric identifier to retrieve the total vitamin b12 from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_B6_TOTAL | Mass | Metric identifier to retrieve the total vitamin b6 from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_C_TOTAL | Mass | Metric identifier to retrieve the total vitamin c from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_D_TOTAL | Mass | Metric identifier to retrieve the total vitamin d from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_E_TOTAL | Mass | Metric identifier to retrieve the total vitamin e from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.VITAMIN_K_TOTAL | Mass | Metric identifier to retrieve the total vitamin k from androidx.health.connect.client.aggregate.AggregationResult. |
| NutritionRecord.ZINC_TOTAL | Mass | Metric identifier to retrieve the total zinc from androidx.health.connect.client.aggregate.AggregationResult. |
Google’s read-data guide: “For cumulative types like StepsRecord, use aggregate() instead of readRecords() to avoid double counting from multiple sources and improve accuracy.” and “The aggregation API also contains logic to handle duplicate records, and lessens the chances of rate limiting.”
Read NutritionRecord in Kotlin
The shape of Google’s own read example, with NutritionRecord and its names filled in. Get the client with HealthConnectClient.getOrCreate(context) after checking getSdkStatus.
import androidx.health.connect.client.HealthConnectClient
import androidx.health.connect.client.records.NutritionRecord
import androidx.health.connect.client.request.ReadRecordsRequest
import androidx.health.connect.client.time.TimeRangeFilter
import java.time.Instant
suspend fun readNutrition(
client: HealthConnectClient,
startTime: Instant,
endTime: Instant,
): List<NutritionRecord> {
val response = client.readRecords(
ReadRecordsRequest(
NutritionRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
)
)
// One page of up to pageSize records (default 1000); follow
// response.pageToken for the rest.
return response.records
}import androidx.health.connect.client.HealthConnectClient
import androidx.health.connect.client.records.NutritionRecord
import androidx.health.connect.client.request.AggregateRequest
import androidx.health.connect.client.time.TimeRangeFilter
import java.time.Instant
import androidx.health.connect.client.units.Mass
suspend fun aggregateNutrition(
client: HealthConnectClient,
startTime: Instant,
endTime: Instant,
): Mass? {
val response = client.aggregate(
AggregateRequest(
metrics = setOf(NutritionRecord.BIOTIN_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
)
)
// get() is declared as returning a nullable value.
return response[NutritionRecord.BIOTIN_TOTAL]
}Setting up the client, the permission flow and Play Console declaration: integrating Health Connect step by step.
HealthKit counterpart
No verified HealthKit counterpart. The cross-platform matrix only pairs metrics checked against both Apple’s and Google’s documentation, and NutritionRecord is not among them yet. A similarly named Apple type may exist on the HealthKit reference, but a name match is not a verified mapping.
Questions
- What permission does NutritionRecord need?
- Google's Health Connect data-types table (read 2026-10-03) declares android.permission.health.READ_NUTRITION for reading NutritionRecord and android.permission.health.WRITE_NUTRITION for writing it, and says apps must declare permissions in the manifest before requesting them.
- Which aggregate metrics does NutritionRecord support?
- Google's Jetpack reference defines 42 on NutritionRecord: BIOTIN_TOTAL (AggregateMetric<Mass>), CAFFEINE_TOTAL (AggregateMetric<Mass>), CALCIUM_TOTAL (AggregateMetric<Mass>), CHLORIDE_TOTAL (AggregateMetric<Mass>), CHOLESTEROL_TOTAL (AggregateMetric<Mass>), CHROMIUM_TOTAL (AggregateMetric<Mass>), COPPER_TOTAL (AggregateMetric<Mass>), DIETARY_FIBER_TOTAL (AggregateMetric<Mass>), ENERGY_FROM_FAT_TOTAL (AggregateMetric<Energy>), ENERGY_TOTAL (AggregateMetric<Energy>), FOLATE_TOTAL (AggregateMetric<Mass>), FOLIC_ACID_TOTAL (AggregateMetric<Mass>), IODINE_TOTAL (AggregateMetric<Mass>), IRON_TOTAL (AggregateMetric<Mass>), MAGNESIUM_TOTAL (AggregateMetric<Mass>), MANGANESE_TOTAL (AggregateMetric<Mass>), MOLYBDENUM_TOTAL (AggregateMetric<Mass>), MONOUNSATURATED_FAT_TOTAL (AggregateMetric<Mass>), NIACIN_TOTAL (AggregateMetric<Mass>), PANTOTHENIC_ACID_TOTAL (AggregateMetric<Mass>), PHOSPHORUS_TOTAL (AggregateMetric<Mass>), POLYUNSATURATED_FAT_TOTAL (AggregateMetric<Mass>), POTASSIUM_TOTAL (AggregateMetric<Mass>), PROTEIN_TOTAL (AggregateMetric<Mass>), RIBOFLAVIN_TOTAL (AggregateMetric<Mass>), SATURATED_FAT_TOTAL (AggregateMetric<Mass>), SELENIUM_TOTAL (AggregateMetric<Mass>), SODIUM_TOTAL (AggregateMetric<Mass>), SUGAR_TOTAL (AggregateMetric<Mass>), THIAMIN_TOTAL (AggregateMetric<Mass>), TOTAL_CARBOHYDRATE_TOTAL (AggregateMetric<Mass>), TOTAL_FAT_TOTAL (AggregateMetric<Mass>), TRANS_FAT_TOTAL (AggregateMetric<Mass>), UNSATURATED_FAT_TOTAL (AggregateMetric<Mass>), VITAMIN_A_TOTAL (AggregateMetric<Mass>), VITAMIN_B12_TOTAL (AggregateMetric<Mass>), VITAMIN_B6_TOTAL (AggregateMetric<Mass>), VITAMIN_C_TOTAL (AggregateMetric<Mass>), VITAMIN_D_TOTAL (AggregateMetric<Mass>), VITAMIN_E_TOTAL (AggregateMetric<Mass>), VITAMIN_K_TOTAL (AggregateMetric<Mass>) and ZINC_TOTAL (AggregateMetric<Mass>). Pass them in the metrics set of an AggregateRequest and read each back from the AggregationResult.
- What values does NutritionRecord.biotin accept?
- Google's reference types biotin as Mass?. Its description reads: "Biotin in Mass unit. Optional field. Valid range: 0-100 grams."
- Is NutritionRecord an interval, instantaneous or series record?
- Google's data-types table lists NutritionRecord as Interval, and defines that column as indicating "whether the data is recorded at an instant in time or over an interval". Its mandatory fields are endTime, mealType, metadata and startTime.
Other Nutrition records
Sources checked
- Google — NutritionRecord (Jetpack reference) — last updated 2026-06-24 · read 2026-10-03
- Google — Health Connect data types · read 2026-10-03
- Google — HealthPermissions (framework reference) · read 2026-10-03
- Google — Read raw data (Health Connect guide) · read 2026-10-03
Google’s descriptions are quoted for identification; the page layout, the capsule and the cross-platform pairing are AIFitnessAPI’s. Generated from Google’s pages by a script, not typed by hand — the same data is behind every page in the Health Connect reference.