Skip to content
AF
Health Connect reference

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.”

AccessPermission stringFramework reference
Readandroid.permission.health.READ_NUTRITIONAPI 34 · U Ext 7
Writeandroid.permission.health.WRITE_NUTRITIONAPI 34 · U Ext 7
AndroidManifest.xml
<uses-permission android:name="android.permission.health.READ_NUTRITION" />
<uses-permission android:name="android.permission.health.WRITE_NUTRITION" />
Kotlin — the same strings from the Jetpack helper
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.

FieldTypeAllowed rangeGoogle’s description
biotin= nullMass?Valid range: 0-100 grams.Biotin in Mass unit. Optional field. Valid range: 0-100 grams.
caffeine= nullMass?Valid range: 0-100 grams.Caffeine in Mass unit. Optional field. Valid range: 0-100 grams.
calcium= nullMass?Valid range: 0-100 grams.Calcium in Mass unit. Optional field. Valid range: 0-100 grams.
chloride= nullMass?Valid range: 0-100 grams.Chloride in Mass unit. Optional field. Valid range: 0-100 grams.
cholesterol= nullMass?Valid range: 0-100 grams.Cholesterol in Mass unit. Optional field. Valid range: 0-100 grams.
chromium= nullMass?Valid range: 0-100 grams.Chromium in Mass unit. Optional field. Valid range: 0-100 grams.
copper= nullMass?Valid range: 0-100 grams.Copper in Mass unit. Optional field. Valid range: 0-100 grams.
dietaryFiber= nullMass?Valid range: 0-100000 grams.Dietary fiber in Mass unit. Optional field. Valid range: 0-100000 grams.
endTimemandatoryInstant—End time of the record.
endZoneOffsetZoneOffset?—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= nullEnergy?Valid range: 0-100000 kcal.Energy in Energy unit. Optional field. Valid range: 0-100000 kcal.
energyFromFat= nullEnergy?Valid range: 0-100000 kcal.Energy from fat in Energy unit. Optional field. Valid range: 0-100000 kcal.
folate= nullMass?Valid range: 0-100 grams.Folate in Mass unit. Optional field. Valid range: 0-100 grams.
folicAcid= nullMass?Valid range: 0-100 grams.Folic acid in Mass unit. Optional field. Valid range: 0-100 grams.
iodine= nullMass?Valid range: 0-100 grams.Iodine in Mass unit. Optional field. Valid range: 0-100 grams.
iron= nullMass?Valid range: 0-100 grams.Iron in Mass unit. Optional field. Valid range: 0-100 grams.
magnesium= nullMass?Valid range: 0-100 grams.Magnesium in Mass unit. Optional field. Valid range: 0-100 grams.
manganese= nullMass?Valid range: 0-100 grams.Manganese in Mass unit. Optional field. Valid range: 0-100 grams.
mealTypemandatory= MealType.MEAL_TYPE_UNKNOWNInt—Type of meal related to the nutrients consumed. Optional, enum field. Allowed values: MealType.
metadatamandatoryMetadata—Set of common metadata associated with the written record.
molybdenum= nullMass?Valid range: 0-100 grams.Molybdenum in Mass unit. Optional field. Valid range: 0-100 grams.
monounsaturatedFat= nullMass?Valid range: 0-100000 grams.Monounsaturated fat in Mass unit. Optional field. Valid range: 0-100000 grams.
name= nullString?—Name for food or drink, provided by the user. Optional field.
niacin= nullMass?Valid range: 0-100 grams.Niacin in Mass unit. Optional field. Valid range: 0-100 grams.
pantothenicAcid= nullMass?Valid range: 0-100 grams.Pantothenic acid in Mass unit. Optional field. Valid range: 0-100 grams.
phosphorus= nullMass?Valid range: 0-100 grams.Phosphorus in Mass unit. Optional field. Valid range: 0-100 grams.
polyunsaturatedFat= nullMass?Valid range: 0-100000 grams.Polyunsaturated fat in Mass unit. Optional field. Valid range: 0-100000 grams.
potassium= nullMass?Valid range: 0-100 grams.Potassium in Mass unit. Optional field. Valid range: 0-100 grams.
protein= nullMass?Valid range: 0-100000 grams.Protein in Mass unit. Optional field. Valid range: 0-100000 grams.
riboflavin= nullMass?Valid range: 0-100 grams.Riboflavin in Mass unit. Optional field. Valid range: 0-100 grams.
saturatedFat= nullMass?Valid range: 0-100000 grams.Saturated fat in Mass unit. Optional field. Valid range: 0-100000 grams.
selenium= nullMass?Valid range: 0-100 grams.Selenium in Mass unit. Optional field. Valid range: 0-100 grams.
sodium= nullMass?Valid range: 0-100 grams.Sodium in Mass unit. Optional field. Valid range: 0-100 grams.
startTimemandatoryInstant—Start time of the record.
startZoneOffsetZoneOffset?—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= nullMass?Valid range: 0-100000 grams.Sugar in Mass unit. Optional field. Valid range: 0-100000 grams.
thiamin= nullMass?Valid range: 0-100 grams.Thiamin in Mass unit. Optional field. Valid range: 0-100 grams.
totalCarbohydrate= nullMass?Valid range: 0-100000 grams.Total carbohydrate in Mass unit. Optional field. Valid range: 0-100000 grams.
totalFat= nullMass?Valid range: 0-100000 grams.Total fat in Mass unit. Optional field. Valid range: 0-100000 grams.
transFat= nullMass?Valid range: 0-100000 grams.Trans fat in Mass unit. Optional field. Valid range: 0-100000 grams.
unsaturatedFat= nullMass?Valid range: 0-100000 grams.Unsaturated fat in Mass unit. Optional field. Valid range: 0-100000 grams.
vitaminA= nullMass?Valid range: 0-100 grams.Vitamin A in Mass unit. Optional field. Valid range: 0-100 grams.
vitaminB12= nullMass?Valid range: 0-100 grams.Vitamin B12 in Mass unit. Optional field. Valid range: 0-100 grams.
vitaminB6= nullMass?Valid range: 0-100 grams.Vitamin B6 in Mass unit. Optional field. Valid range: 0-100 grams.
vitaminC= nullMass?Valid range: 0-100 grams.Vitamin C in Mass unit. Optional field. Valid range: 0-100 grams.
vitaminD= nullMass?Valid range: 0-100 grams.Vitamin D in Mass unit. Optional field. Valid range: 0-100 grams.
vitaminE= nullMass?Valid range: 0-100 grams.Vitamin E in Mass unit. Optional field. Valid range: 0-100 grams.
vitaminK= nullMass?Valid range: 0-100 grams.Vitamin K in Mass unit. Optional field. Valid range: 0-100 grams.
zinc= nullMass?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.

MetricValue typeGoogle’s description
NutritionRecord.BIOTIN_TOTALMassMetric identifier to retrieve the total biotin from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.CAFFEINE_TOTALMassMetric identifier to retrieve the total caffeine from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.CALCIUM_TOTALMassMetric identifier to retrieve the total calcium from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.CHLORIDE_TOTALMassMetric identifier to retrieve the total chloride from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.CHOLESTEROL_TOTALMassMetric identifier to retrieve the total cholesterol from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.CHROMIUM_TOTALMassMetric identifier to retrieve the total chromium from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.COPPER_TOTALMassMetric identifier to retrieve the total copper from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.DIETARY_FIBER_TOTALMassMetric identifier to retrieve the total dietary fiber from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.ENERGY_FROM_FAT_TOTALEnergyMetric identifier to retrieve the total energy from fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.ENERGY_TOTALEnergyMetric identifier to retrieve the total energy from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.FOLATE_TOTALMassMetric identifier to retrieve the total folate from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.FOLIC_ACID_TOTALMassMetric identifier to retrieve the total folic acid from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.IODINE_TOTALMassMetric identifier to retrieve the total iodine from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.IRON_TOTALMassMetric identifier to retrieve the total iron from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.MAGNESIUM_TOTALMassMetric identifier to retrieve the total magnesium from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.MANGANESE_TOTALMassMetric identifier to retrieve the total manganese from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.MOLYBDENUM_TOTALMassMetric identifier to retrieve the total molybdenum from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.MONOUNSATURATED_FAT_TOTALMassMetric identifier to retrieve the total monounsaturated fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.NIACIN_TOTALMassMetric identifier to retrieve the total niacin from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.PANTOTHENIC_ACID_TOTALMassMetric identifier to retrieve the total pantothenic acid from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.PHOSPHORUS_TOTALMassMetric identifier to retrieve the total phosphorus from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.POLYUNSATURATED_FAT_TOTALMassMetric identifier to retrieve the total polyunsaturated fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.POTASSIUM_TOTALMassMetric identifier to retrieve the total potassium from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.PROTEIN_TOTALMassMetric identifier to retrieve the total protein from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.RIBOFLAVIN_TOTALMassMetric identifier to retrieve the total riboflavin from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.SATURATED_FAT_TOTALMassMetric identifier to retrieve the total saturated fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.SELENIUM_TOTALMassMetric identifier to retrieve the total selenium from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.SODIUM_TOTALMassMetric identifier to retrieve the total sodium from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.SUGAR_TOTALMassMetric identifier to retrieve the total sugar from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.THIAMIN_TOTALMassMetric identifier to retrieve the total thiamin from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.TOTAL_CARBOHYDRATE_TOTALMassMetric identifier to retrieve the total total carbohydrate from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.TOTAL_FAT_TOTALMassMetric identifier to retrieve the total total fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.TRANS_FAT_TOTALMassMetric identifier to retrieve the total trans fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.UNSATURATED_FAT_TOTALMassMetric identifier to retrieve the total unsaturated fat from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_A_TOTALMassMetric identifier to retrieve the total vitamin a from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_B12_TOTALMassMetric identifier to retrieve the total vitamin b12 from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_B6_TOTALMassMetric identifier to retrieve the total vitamin b6 from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_C_TOTALMassMetric identifier to retrieve the total vitamin c from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_D_TOTALMassMetric identifier to retrieve the total vitamin d from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_E_TOTALMassMetric identifier to retrieve the total vitamin e from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.VITAMIN_K_TOTALMassMetric identifier to retrieve the total vitamin k from androidx.health.connect.client.aggregate.AggregationResult.
NutritionRecord.ZINC_TOTALMassMetric 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.

readRecords
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
}
aggregate
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

All Nutrition records →

Sources checked

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.

← All Health Connect records · Every permission string