Mengembangkan Pengalaman Nutrisi dan Hidrasi dengan Google Health API

Google Health API menyediakan jenis data untuk melacak nutrisi dan hidrasi pengguna. Jenis ini memungkinkan Anda mencatat makanan, mereferensikan makanan dari database makanan, melacak jumlah nutrisi, dan mencatat asupan cairan.

Jenis data yang didukung

Tabel: Jenis data Nutrisi Google Health API
Jenis data Operasi
yang tersedia
Cakupan
Makanan
dataType: food
filter parameter: food
Jenis data: Makanan
list, get .nutrition.readonly
.nutrition.writeonly
Unit Pengukuran Makanan
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Jenis data: Makanan

Perangkat yang kompatibel

list, get .nutrition.readonly
.nutrition.writeonly
Log Hidrasi
dataType: hydration-log
filter parameter: hydration_log
Jenis data: Sesi
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Catatan Nutrisi
dataType: nutrition-log
filter parameter: nutrition_log
Jenis data: Sesi

Perangkat yang kompatibel

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

Catatan Nutrisi

Log Nutrisi mewakili makanan yang dicatat oleh pengguna. Ada dua cara untuk membuat log nutrisi, bergantung pada jenis makanan:

  1. Makanan yang diidentifikasi: Tetapkan kolom food untuk mereferensikan resource Makanan yang ada. Kolom nutrients, energy, energyFromFat, totalCarbohydrate, totalFat, dan foodDisplayName diisi secara otomatis dari makanan yang direferensikan. Ini adalah metode yang direkomendasikan.

  2. Makanan anonim: Tetapkan kolom foodDisplayName secara manual dan berikan nilai untuk nutrients, energy, energyFromFat, totalCarbohydrate, dan totalFat. Log nutrisi yang dibuat dari makanan anonim tidak dapat diedit setelah dibuat.

Membuat log nutrisi dengan makanan anonim

Untuk membuat entri log nutrisi, kirim permintaan POST ke endpoint nutrition-log dataPoints.

Permintaan

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

Respons

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

Membuat log nutrisi dengan makanan yang diidentifikasi

Untuk mencatat item makanan dari database makanan, tetapkan kolom food untuk mereferensikan resource Makanan. API akan mengisi kolom nutrisi secara otomatis.

Permintaan

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

Respons

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

Menghapus catatan gizi

Untuk menghapus satu atau beberapa entri log nutrisi, kirim permintaan POST ke metode batchDelete dengan nama resource entri yang akan dihapus.

Permintaan:

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

Kolom catatan gizi

Untuk mengetahui daftar lengkap kolom dan deskripsi, lihat NutritionLog.

Jumlah energi

Merepresentasikan pengukuran energi, yang diukur dalam kilokalori (kcal). Untuk mengetahui detailnya, lihat EnergyQuantity.

{
  "kcal": 165
}

Kuantitas berat

Mewakili pengukuran berat, yang diukur dalam gram. Untuk mengetahui detailnya, lihat WeightQuantity.

{
  "grams": 27.3
}

Jumlah nutrisi

Mewakili nutrisi tertentu dan jumlah terukurnya. Untuk detailnya, lihat NutrientQuantity.

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

Nilai nutrisi

Untuk mengetahui daftar lengkap jenis nutrisi yang didukung, lihat Nutrient.

Tayang

Menampilkan informasi porsi untuk entri log nutrisi. Untuk detailnya, lihat Serving.

{
  "amount": 1.5
}

Nilai jenis makanan

Untuk mengetahui daftar lengkap jenis makanan yang didukung, lihat MealType.

Makanan

Makanan adalah jenis data hanya baca yang mewakili item makanan dalam database makanan. Gunakan operasi list dan get untuk menjelajahi makanan yang tersedia dan mengambil informasi nutrisinya.

Mencantumkan makanan

Untuk mencantumkan makanan, kirim permintaan GET ke endpoint dataPoints food:

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

Unit Pengukuran Makanan

Unit Pengukuran Makanan adalah jenis data hanya baca yang mewakili unit pengukuran yang digunakan untuk porsi makanan (misalnya, "cangkir", "sendok makan", atau "potong").

Menampilkan daftar unit pengukuran yang tersedia

Untuk mencantumkan satuan pengukuran yang tersedia:

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

Catatan Hidrasi

Catatan Hidrasi mewakili cairan yang dicatat oleh pengguna. Tidak seperti makanan, yang merujuk ke database Makanan dan mengukur asupan nutrisi atau energi, entri hidrasi melacak volume cairan tertentu yang dikonsumsi selama interval waktu tertentu.

Membuat catatan hidrasi

Untuk membuat entri log hidrasi, kirim permintaan POST ke endpoint hydration-log dataPoints. Semua jumlah volume dikonversi menjadi mililiter dalam format API.

Permintaan

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

Respons

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

Memperbarui catatan hidrasi

Untuk memperbarui entri log hidrasi, kirim permintaan PATCH ke endpoint hydration-log dataPoints dengan ID titik data.

Permintaan

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

Respons

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

Menghapus catatan hidrasi

Untuk menghapus satu atau beberapa entri log hidrasi, kirim permintaan POST ke metode batchDelete.

Permintaan

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

Respons

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

Kolom log hidrasi

Untuk mengetahui daftar lengkap kolom dan deskripsi, lihat HydrationLog.

Jumlah volume

Menunjukkan pengukuran volume, yang diukur dalam mililiter. Untuk mengetahui detailnya, lihat VolumeQuantity.

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

Nilai unit volume

Untuk mengetahui daftar lengkap unit volume yang didukung, lihat VolumeUnit. Nilai umum mencakup MILLILITER, LITER, CUP_US, dan FLUID_OUNCE_US.

Panduan

  • Gunakan makanan yang teridentifikasi jika memungkinkan. API mengisi kolom nutrisi secara otomatis, sehingga mengurangi kesalahan dan memastikan konsistensi dengan database makanan.
  • Log nutrisi yang dibuat dari makanan anonim tidak dapat diperbarui setelah dibuat. Jika Anda perlu memperbaiki log makanan anonim, hapus dan buat yang baru.
  • Tidak seperti log nutrisi makanan anonim, entri log hidrasi sepenuhnya dapat diubah dan dapat diperbarui setelah dibuat menggunakan permintaan PATCH.
  • Semua jumlah nutrisi dalam array nutrients menggunakan gram sebagai unit pengukuran.
  • Kolom energy dan energyFromFat menggunakan kilokalori (kcal) sebagai satuan ukur.
  • API mengonversi dan menyimpan semua kuantitas hidrasi dalam mililiter. Kolom userProvidedUnit opsional di VolumeQuantity hanya digunakan untuk tampilan sisi klien yang ditampilkan kepada pengguna.
  • Permintaan DELETE HTTP langsung ke setiap titik data hydration-log akan menampilkan 404 Not Found. Gunakan metode batchDelete untuk menghapus entri resource ini.
  • Log hidrasi menggunakan interval singkat dengan startTime dan endTime yang mewakili jangka waktu konsumsi cairan.