Desarrolla experiencias de nutrición e hidratación con la API de Google Health

La API de Google Health proporciona tipos de datos para hacer un seguimiento de la nutrición y la hidratación de un usuario. Estos tipos te permiten registrar comidas, consultar alimentos de la base de datos de alimentos, hacer un seguimiento de las cantidades de nutrientes y registrar la ingesta de líquidos.

Tipos de datos admitidos

Tabla: Tipos de datos de nutrición de la API de Google Health
Tipo de datos Operaciones de
disponibles
Alcance
Comida
dataType: food
filter parameter: food
Tipo de registro: Alimentos
list, get .nutrition.readonly
.nutrition.writeonly
Unidad de medida de alimentos
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Tipo de registro: Alimentos

Dispositivos compatibles

list, get .nutrition.readonly
.nutrition.writeonly
Registro de hidratación
dataType: hydration-log
filter parameter: hydration_log
Tipo de registro: Sesión
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Registro de nutrición
dataType: nutrition-log
filter parameter: nutrition_log
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly

Registro de nutrición

Un registro de nutrición representa la comida que registra un usuario. Existen dos maneras de crear un registro de nutrición, según el tipo de alimento:

  1. Comida identificada: Configura el campo food para que haga referencia a un recurso Food existente. Los campos nutrients, energy, energyFromFat, totalCarbohydrate, totalFat y foodDisplayName se completan automáticamente a partir del alimento al que se hace referencia. Este es el método preferido.

  2. Alimento anónimo: Configura el campo foodDisplayName de forma manual y proporciona valores para nutrients, energy, energyFromFat, totalCarbohydrate y totalFat. Los registros de nutrición creados a partir de alimentos anónimos no se pueden editar después de su creación.

Crea un registro de nutrición con alimentos anónimos

Para crear una entrada de registro de nutrición, envía una solicitud POST al extremo nutrition-log dataPoints.

Solicitud

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T18:00:00Z",
      "endTime": "2026-06-16T18:30:00Z"
    },
    "foodDisplayName": "Grilled Chicken Breast",
    "mealType": "DINNER",
    "energy": {
      "kcal": 165
    },
    "totalCarbohydrate": {
      "grams": 0
    },
    "totalFat": {
      "grams": 3.6
    },
    "nutrients": [
      {
        "nutrient": "PROTEIN",
        "quantity": {
          "grams": 31
        }
      },
      {
        "nutrient": "SODIUM",
        "quantity": {
          "grams": 0.074
        }
      }
    ],
    "serving": {
      "amount": 1.0
    }
  }
}

Respuesta

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T18:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T18:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 165
      },
      "totalCarbohydrate": {
        "grams": 0
      },
      "totalFat": {
        "grams": 3.6
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 31
          },
          "nutrient": "PROTEIN"
        },
        {
          "quantity": {
            "grams": 0.074
          },
          "nutrient": "SODIUM"
        }
      ],
      "mealType": "DINNER",
      "serving": {
        "amount": 1
      },
      "foodDisplayName": "Grilled Chicken Breast"
    }
  }
}

Crea un registro de nutrición con los alimentos identificados

Para registrar un alimento de la base de datos de alimentos, configura el campo food para que haga referencia a un recurso de alimento. La API completa los campos nutricionales automáticamente.

Solicitud

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T12:00:00Z",
      "endTime": "2026-06-16T12:30:00Z"
    },
    "food": "users/me/dataTypes/food/dataPoints/food-id",
    "mealType": "LUNCH",
    "serving": {
      "amount": 1.0,
      "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
    }
  }
}

Respuesta

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T12:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T12:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 95
      },
      "energyFromFat": {
        "kcal": 3
      },
      "totalCarbohydrate": {
        "grams": 25
      },
      "totalFat": {
        "grams": 0.3
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 4.4,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "DIETARY_FIBER"
        },
        {
          "quantity": {
            "grams": 19,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "SUGAR"
        },
        {
          "quantity": {
            "grams": 0.5,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "PROTEIN"
        }
      ],
      "mealType": "LUNCH",
      "serving": {
        "amount": 1,
        "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
      },
      "food": "users/user-id/dataTypes/food/dataPoints/food-id",
      "foodDisplayName": "Apple"
    }
  }
}

Borra registros de nutrición

Para borrar una o más entradas del registro de nutrición, envía una solicitud POST al método batchDelete con los nombres de los recursos de las entradas que se quitarán.

Solicitud:

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json

{
  "names": [
    "users/me/dataTypes/nutrition-log/dataPoints/data-point-id"
  ]
}

Campos de registro de nutrición

Para obtener una lista completa de campos y descripciones, consulta NutritionLog.

Cantidad de energía

Representa una medición de energía, medida en kilocalorías (kcal). Para obtener más detalles, consulta EnergyQuantity.

{
  "kcal": 165
}

Cantidad de peso

Representa una medición de peso, medida en gramos. Para obtener más información, consulta WeightQuantity.

{
  "grams": 27.3
}

Cantidad de nutrientes

Representa un nutriente específico y su cantidad medida. Para obtener más información, consulta NutrientQuantity.

{
  "nutrient": "PROTEIN",
  "quantity": {
    "grams": 31
  }
}

Valores de nutrientes

Para obtener una lista completa de los tipos de nutrientes admitidos, consulta Nutrient.

Entrega

Representa la información de la porción de una entrada de registro de nutrición. Para obtener más información, consulta Serving.

{
  "amount": 1.5
}

Valores de tipos de comidas

Para obtener una lista completa de los tipos de comidas admitidos, consulta MealType.

Comida

Food es un tipo de datos de solo lectura que representa un alimento en la base de datos de alimentos. Usa las operaciones list y get para explorar los alimentos disponibles y recuperar su información nutricional.

Enumera alimentos

Para enumerar los alimentos, envía una solicitud GET al extremo food dataPoints:

GET https://health.googleapis.com/v4/users/me/dataTypes/food/dataPoints
Authorization: Bearer access-token
Accept: application/json

Unidad de medida de alimentos

La unidad de medida de alimentos es un tipo de datos de solo lectura que representa las unidades de medida que se usan para las porciones de alimentos (por ejemplo, "taza", "cucharada" o "pieza").

Enumera las unidades de medición disponibles

Para enumerar las unidades de medición disponibles, haz lo siguiente:

GET https://health.googleapis.com/v4/users/me/dataTypes/food-measurement-unit/dataPoints
Authorization: Bearer access-token
Accept: application/json

Registro de hidratación

Un registro de hidratación representa el líquido que registra un usuario. A diferencia de los alimentos, que hacen referencia a una base de datos de alimentos y miden la ingesta de nutrientes o energía, las entradas de hidratación hacen un seguimiento del volumen específico de líquido consumido durante un intervalo de tiempo determinado.

Crea un registro de hidratación

Para crear una entrada de registro de hidratación, envía una solicitud POST al extremo hydration-log dataPoints. Todas las cantidades de volumen se convierten en mililitros en el formato de la API.

Solicitud

POST https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T14:00:00Z",
      "endTime": "2026-06-16T14:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500,
      "userProvidedUnit": "FLUID_OUNCE_US"
    }
  }
}

Respuesta

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T14:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T14:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500,
        "userProvidedUnit": "FLUID_OUNCE_US"
      }
    }
  }
}

Actualiza un registro de hidratación

Para actualizar una entrada de registro de hidratación, envía una solicitud PATCH al extremo hydration-log dataPoints con el ID del dato.

Solicitud

PATCH https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints/data-point-id
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T10:00:00Z",
      "endTime": "2026-06-16T10:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500
    }
  }
}

Respuesta

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T10:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T10:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500
      }
    }
  }
}

Borra los registros de hidratación

Para borrar una o más entradas del registro de hidratación, envía una solicitud POST al método batchDelete.

Solicitud

POST https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json

{
  "names": [
    "users/me/dataTypes/hydration-log/dataPoints/data-point-id"
  ]
}

Respuesta

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.BatchDeleteDataPointsResponse",
    "dataPoints": [
      {
        "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
        "dataSource": {
          "recordingMethod": "UNKNOWN",
          "application": {
            "googleWebClientId": "google-web-client-id"
          },
          "platform": "GOOGLE_WEB_API"
        },
        "hydrationLog": {
          "interval": {
            "startTime": "2026-06-16T14:00:00Z",
            "startUtcOffset": "0s",
            "endTime": "2026-06-16T14:00:01Z",
            "endUtcOffset": "0s",
            "civilStartTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14
              }
            },
            "civilEndTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14,
                "seconds": 1
              }
            }
          },
          "amountConsumed": {
            "milliliters": 500,
            "userProvidedUnit": "FLUID_OUNCE_US"
          }
        }
      }
    ]
  }
}

Campos de registro de hidratación

Para obtener una lista completa de campos y descripciones, consulta HydrationLog.

Cantidad de volumen

Representa una medición de volumen, en mililitros. Para obtener más información, consulta VolumeQuantity.

{
  "milliliters": 250,
  "userProvidedUnit": "MILLILITER"
}

Valores de unidades de volumen

Para obtener una lista completa de las unidades de volumen admitidas, consulta VolumeUnit. Entre los valores comunes, se incluyen MILLILITER, LITER, CUP_US y FLUID_OUNCE_US.

Lineamientos

  • Usa alimentos identificados cuando sea posible. La API completa los campos nutricionales automáticamente, lo que reduce los errores y garantiza la coherencia con la base de datos de alimentos.
  • Los registros de nutrición creados a partir de alimentos anónimos no se pueden actualizar después de su creación. Si necesitas corregir un registro de alimentos anónimo, bórralo y crea uno nuevo.
  • A diferencia de los registros anónimos de nutrición de alimentos, las entradas de registro de hidratación son completamente mutables y se pueden actualizar después de la creación con una solicitud PATCH.
  • Todas las cantidades de nutrientes en el array nutrients usan gramos como unidad de medida.
  • Los campos energy y energyFromFat usan kilocalorías (kcal) como unidad de medida.
  • La API convierte y almacena todas las cantidades de hidratación en mililitros. El campo opcional userProvidedUnit en VolumeQuantity solo se usa para la visualización para el usuario del cliente.
  • Las solicitudes HTTP DELETE directas a puntos de datos hydration-log individuales devuelven 404 Not Found. Usa el método batchDelete para quitar estas entradas de recursos.
  • Los registros de hidratación usan un intervalo corto en el que startTime y endTime representan el período en el que se consumió el líquido.