Développer des expériences de nutrition et d'hydratation avec l'API Google Health

L'API Google Health fournit des types de données permettant de suivre la nutrition et l'hydratation d'un utilisateur. Ces types vous permettent d'enregistrer des repas, de référencer des aliments de la base de données d'aliments, de suivre les quantités de nutriments et d'enregistrer l'apport en liquides.

Types de données acceptés

Tableau : Types de données de nutrition de l'API Google Health
Type de données Opérations
disponibles
Champ d'application
Nourriture
dataType : food
paramètre de filtre : food
Type d'enregistrement  : Alimentation
list, get .nutrition.readonly
.nutrition.writeonly
Unité de mesure des aliments
dataType : food-measurement-unit
filter parameter : food_measurement_unit
Type d'enregistrement  : Alimentation

Appareils compatibles

list, get .nutrition.readonly
.nutrition.writeonly
Journal d'hydratation
dataType : hydration-log
filter parameter : hydration_log
Type d'enregistrement  : Session
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Journal de nutrition
dataType : nutrition-log
filter parameter : nutrition_log
Type d'enregistrement  : Session

Appareils compatibles

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

Journal de nutrition

Un journal de nutrition représente les aliments enregistrés par un utilisateur. Il existe deux façons de créer un journal de nutrition, selon le type d'aliment :

  1. Aliment identifié : définissez le champ food pour référencer une ressource Food existante. Les champs nutrients, energy, energyFromFat, totalCarbohydrate, totalFat et foodDisplayName sont renseignés automatiquement à partir de l'aliment référencé. (méthode recommandée)

  2. Aliment anonyme : définissez manuellement le champ foodDisplayName et fournissez des valeurs pour nutrients, energy, energyFromFat, totalCarbohydrate et totalFat. Les journaux de nutrition créés à partir d'aliments anonymes ne sont pas modifiables après leur création.

Créer un journal de nutrition avec un aliment anonyme

Pour créer une entrée de journal de nutrition, envoyez une requête POST au point de terminaison nutrition-log dataPoints.

Requête

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

Réponse

{
  "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"
    }
  }
}

Créer un journal de nutrition avec des aliments identifiés

Pour consigner un aliment à partir de la base de données d'aliments, définissez le champ food de sorte qu'il référence une ressource Food. L'API remplit automatiquement les champs nutritionnels.

Requête

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"
    }
  }
}

Réponse

{
  "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"
    }
  }
}

Supprimer des aliments enregistrés

Pour supprimer une ou plusieurs entrées du journal de nutrition, envoyez une requête POST à la méthode batchDelete avec les noms de ressources des entrées à supprimer.

Requête :

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"
  ]
}

Champs du journal de nutrition

Pour obtenir la liste complète des champs et des descriptions, consultez NutritionLog.

Quantité d'énergie

Représente une mesure d'énergie, mesurée en kilocalories (kcal). Pour en savoir plus, consultez EnergyQuantity.

{
  "kcal": 165
}

Quantité de poids

Représente une mesure de poids, exprimée en grammes. Pour en savoir plus, consultez WeightQuantity.

{
  "grams": 27.3
}

Quantité de nutriments

Représente un nutriment spécifique et sa quantité mesurée. Pour plus d'informations, consultez NutrientQuantity.

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

Valeurs nutritionnelles

Pour obtenir la liste complète des types de nutriments compatibles, consultez Nutrient.

Mise en service

Représente les informations sur la portion pour une entrée de journal de nutrition. Pour plus d'informations, consultez Serving.

{
  "amount": 1.5
}

Valeurs du type de repas

Pour obtenir la liste complète des types de repas acceptés, consultez MealType.

Nourriture

"Alimentation" est un type de données en lecture seule qui représente un aliment dans la base de données d'aliments. Utilisez les opérations list et get pour parcourir les aliments disponibles et récupérer leurs informations nutritionnelles.

Lister les aliments

Pour lister les aliments, envoyez une requête GET au point de terminaison food dataPoints :

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

Unité de mesure des aliments

L'unité de mesure des aliments est un type de données en lecture seule qui représente les unités de mesure utilisées pour les portions d'aliments (par exemple, "tasse", "cuillère à soupe" ou "morceau").

Lister les unités de mesure disponibles

Pour lister les unités de mesure disponibles :

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

Journal d'hydratation

Un journal d'hydratation représente les liquides enregistrés par un utilisateur. Contrairement aux aliments, qui font référence à une base de données d'aliments et mesurent l'apport en nutriments ou en énergie, les entrées d'hydratation suivent le volume spécifique de liquide consommé sur un intervalle de temps donné.

Créer un journal d'hydratation

Pour créer une entrée de journal d'hydratation, envoyez une requête POST au point de terminaison hydration-log dataPoints. Toutes les quantités de volume sont converties en millilitres au format de l'API.

Requête

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"
    }
  }
}

Réponse

{
  "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"
      }
    }
  }
}

Mettre à jour un journal d'hydratation

Pour mettre à jour une entrée de journal d'hydratation, envoyez une requête PATCH au point de terminaison hydration-log dataPoints avec l'ID du point de données.

Requête

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

Réponse

{
  "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
      }
    }
  }
}

Supprimer les enregistrements d'hydratation

Pour supprimer une ou plusieurs entrées de journal d'hydratation, envoyez une requête POST à la méthode batchDelete.

Requête

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"
  ]
}

Réponse

{
  "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"
          }
        }
      }
    ]
  }
}

Champs du journal d'hydratation

Pour obtenir la liste complète des champs et des descriptions, consultez HydrationLog.

Quantité de volume

Représente une mesure de volume, en millilitres. Pour en savoir plus, consultez VolumeQuantity.

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

Valeurs des unités de volume

Pour obtenir la liste complète des unités de volume acceptées, consultez VolumeUnit. Les valeurs courantes incluent MILLILITER, LITER, CUP_US et FLUID_OUNCE_US.

Consignes

  • Utilisez des aliments identifiés lorsque cela est possible. L'API remplit automatiquement les champs nutritionnels, ce qui réduit les erreurs et garantit la cohérence avec la base de données des aliments.
  • Les journaux de nutrition créés à partir d'aliments anonymes ne peuvent pas être mis à jour après leur création. Si vous devez corriger un aliment enregistré de manière anonyme, supprimez-le et créez-en un autre.
  • Contrairement aux entrées de journal anonymes sur la nutrition, les entrées de journal sur l'hydratation sont entièrement modifiables et peuvent être mises à jour après leur création à l'aide d'une requête PATCH.
  • Toutes les quantités de nutriments du tableau nutrients sont exprimées en grammes.
  • Les champs energy et energyFromFat utilisent les kilocalories (kcal) comme unité de mesure.
  • L'API convertit et stocke toutes les quantités d'hydratation en millilitres. Le champ facultatif userProvidedUnit dans VolumeQuantity n'est utilisé que pour l'affichage côté client visible par l'utilisateur.
  • Les requêtes HTTP DELETE directes vers des points de données hydration-log individuels renvoient 404 Not Found. Utilisez la méthode batchDelete pour supprimer ces entrées de ressources.
  • Les journaux d'hydratation utilisent un intervalle court où startTime et endTime représentent la période pendant laquelle le liquide a été consommé.