Desenvolver experiências de nutrição e hidratação com a API Google Health

A API Google Health fornece tipos de dados para monitorar a nutrição e a hidratação de um usuário. Esses tipos permitem registrar refeições, consultar alimentos no banco de dados, monitorar quantidades de nutrientes e registrar a ingestão de líquidos.

Tipos de dados compatíveis

Tabela: tipos de dados de nutrição da API Google Health
Tipo de dado Operações
disponíveis
Escopo
Comida
dataType: food
parâmetro de filtro: food
Tipo de registro : comida
list, get .nutrition.readonly
.nutrition.writeonly
Unidade de medida de alimentos
dataType: food-measurement-unit
parâmetro de filtro: food_measurement_unit
Tipo de registro : comida

Dispositivos compatíveis

list, get .nutrition.readonly
.nutrition.writeonly
Registro de hidratação
dataType: hydration-log
parâmetro de filtro: hydration_log
Tipo de registro : sessão
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Registro de alimentação
dataType: nutrition-log
parâmetro de filtro: nutrition_log
Tipo de registro : sessão

Dispositivos compatíveis

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

Registro de alimentação

Um registro de nutrição representa os alimentos registrados por um usuário. Há duas maneiras de criar um registro de nutrição, dependendo do tipo de alimento:

  1. Alimento identificado: defina o campo food para referenciar um recurso Food atual. Os campos nutrients, energy, energyFromFat, totalCarbohydrate, totalFat e foodDisplayName são preenchidos automaticamente com base no alimento referenciado. Esse é o método preferencial.

  2. Alimento anônimo: defina o campo foodDisplayName manualmente e forneça valores para nutrients, energy, energyFromFat, totalCarbohydrate e totalFat. Os registros de nutrição criados com base em alimentos anônimos não podem ser editados após a criação.

Criar um registro de nutrição com alimentos anônimos

Para criar uma entrada de registro de nutrição, envie uma solicitação POST para o endpoint nutrition-log dataPoints.

Solicitação

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

Resposta

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

Criar um registro de nutrição com alimentos identificados

Para registrar um item do banco de dados de alimentos, defina o campo food para referenciar um recurso Food. A API preenche os campos nutricionais automaticamente.

Solicitação

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

Resposta

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

Excluir registros de nutrição

Para excluir uma ou mais entradas de registro de nutrição, envie uma solicitação POST ao método batchDelete com os nomes dos recursos das entradas que serão removidas.

Solicitação:

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 nutrição

Para uma lista completa de campos e descrições, consulte NutritionLog.

Quantidade de energia

Representa uma medição de energia, medida em quilocalorias (kcal). Para mais detalhes, consulte EnergyQuantity.

{
  "kcal": 165
}

Quantidade de peso

Representa uma medição de peso, em gramas. Para mais detalhes, consulte WeightQuantity.

{
  "grams": 27.3
}

Quantidade de nutrientes

Representa um nutriente específico e a quantidade medida dele. Para mais detalhes, consulte NutrientQuantity.

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

Valores de nutrientes

Para ver uma lista completa dos tipos de nutrientes aceitos, consulte Nutrient.

Disponibilização

Representa as informações de porção de uma entrada de registro de nutrição. Para mais detalhes, consulte Serving.

{
  "amount": 1.5
}

Valores do tipo de refeição

Para ver uma lista completa dos tipos de refeição aceitos, consulte MealType.

Comida

"Alimento" é um tipo de dado somente leitura que representa um item no banco de dados de alimentos. Use as operações list e get para procurar alimentos disponíveis e recuperar as informações nutricionais deles.

Listar alimentos

Para listar alimentos, envie uma solicitação GET ao endpoint food dataPoints:

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

Unidade de medida de alimentos

A unidade de medida de alimentos é um tipo de dado somente leitura que representa as unidades de medida usadas para porções de alimentos (por exemplo, "xícara", "colher de sopa" ou "unidade").

Listar unidades de medida disponíveis

Para listar as unidades de medida disponíveis:

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

Registro de hidratação

Um registro de hidratação representa o líquido registrado por um usuário. Ao contrário dos alimentos, que fazem referência a um banco de dados de alimentos e medem a ingestão de nutrientes ou energia, as entradas de hidratação monitoram o volume específico de líquido consumido em um determinado intervalo de tempo.

Criar um registro de hidratação

Para criar uma entrada de registro de hidratação, envie uma solicitação POST ao endpoint hydration-log dataPoints. Todas as quantidades de volume são convertidas em mililitros no formato da API.

Solicitação

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

Resposta

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

Atualizar um registro de hidratação

Para atualizar uma entrada de registro de hidratação, envie uma solicitação PATCH para o endpoint hydration-log dataPoints com o ID do ponto de dados.

Solicitação

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

Resposta

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

Excluir registros de hidratação

Para excluir uma ou mais entradas de registro de hidratação, envie uma solicitação POST ao método batchDelete.

Solicitação

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

Resposta

{
  "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 hidratação

Para uma lista completa de campos e descrições, consulte HydrationLog.

Quantidade de volume

Representa uma medida de volume, em mililitros. Para mais detalhes, consulte VolumeQuantity.

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

Valores de unidade de volume

Para uma lista completa de unidades de volume compatíveis, consulte VolumeUnit. Os valores comuns incluem MILLILITER, LITER, CUP_US e FLUID_OUNCE_US.

Diretrizes

  • Use alimentos identificados sempre que possível. A API preenche os campos nutricionais automaticamente, reduzindo erros e garantindo a consistência com o banco de dados de alimentos.
  • Os registros de nutrição criados com base em alimentos anônimos não podem ser atualizados após a criação. Se você precisar corrigir um registro de alimentos anônimo, exclua-o e crie um novo.
  • Ao contrário dos registros anônimos de nutrição alimentar, as entradas de registro de hidratação são totalmente mutáveis e podem ser atualizadas após a criação usando uma solicitação PATCH.
  • Todas as quantidades de nutrientes na matriz nutrients usam gramas como unidade de medida.
  • Os campos energy e energyFromFat usam quilocalorias (kcal) como unidade de medida.
  • A API converte e armazena todas as quantidades de hidratação em mililitros. O campo opcional userProvidedUnit em VolumeQuantity é usado apenas para exibição voltada ao usuário do lado do cliente.
  • As solicitações HTTP DELETE diretas para pontos de dados hydration-log individuais retornam 404 Not Found. Use o método batchDelete para remover essas entradas de recurso.
  • Os registros de hidratação usam um intervalo curto em que startTime e endTime representam o período em que o líquido foi consumido.