Uç noktalar (Endpoint)

Bu sayfada, REST API kurallarına genel bakışın yanı sıra yaygın Google Health API görevlerinin ve her birine ait örneklerin dizini yer almaktadır.

REST API kuralları

Google Health API, Google API Geliştirme Önerileri (AIP) standartlarına, özellikle AIP-127 (HTTP ve gRPC Kod Dönüştürme) ile AIP-131'den AIP-135'e (Standart Yöntemler) kadar olan standartlara uygundur. Bu standartlar, verilerin bir proto mesajdan HTTP isteğine nasıl eşleneceğini tanımlar.

Sorgu parametreleri

Veriler URL'nin bir parçası olduğunda sorgu parametreleri kullanılır. Bu, öncelikle GET istekleri (kaynak getirme) veya LIST istekleri (filtreleme/sayfalama) için kullanılır ancak DELETE işlemleri için de kullanılır.

  • Yerleşim: URL'ye ? işaretinden sonra eklenir.
  • Söz dizimi: & ile ayrılmış anahtar/değer çiftleri.
  • Eşleme: İstek mesajındaki URL yolu şablonunun parçası olmayan her alan bir sorgu parametresiyle eşlenir.
  • En uygun kullanım alanı: Basit türler (dizeler, tam sayılar, numaralandırmalar) ve yinelenen alanlar.

Örnek söz dizimi:

GET https://health.googleapis.com/v4/users/me/dataTypes/data-type/dataPoints?page_size=10&filter=data_type.interval.start_time >= "2025-10-01T00:00:00Z"

İstek metni

Veriler bir kaynağın durumunu değiştirdiğinde veya URL için çok büyük olduğunda istek gövdesi kullanılır. Gövde genellikle kaynağın kendisinin JSON gösterimidir. Genellikle POST, PATCH ve PUT işlemleri için kullanılır.

  • Yerleşim: HTTP yükünün içinde (URL'de görünmez).
  • Söz dizimi: JSON nesnesi olarak biçimlendirilir.
  • Eşleme: google.api.http ek açıklamasında tanımlanır.
    • body: "*", iletinin tamamının gövde olduğu anlamına gelir.
    • body: "resource_name", proto'daki yalnızca belirli bir alanın gövde olduğu anlamına gelir.
  • En uygun olduğu durumlar: Karmaşık nesneler, iç içe yerleştirilmiş mesajlar ve hassas veriler.

Örnek söz dizimi:

POST https://health.googleapis.com/v4/users/me/dataTypes/data-type/dataPoints:rollUp
Content-Type: application/json

{
  "range": {
    "startTime": "2025-11-05T00:00:00Z",
    "endTime": "2025-11-13T00:00:00Z"
  },
  "windowSize": "3600s"
}

Karma durum

AIP-134 uyumlu bir Update yönteminde veya bir PATCH işleminde her ikisi de kullanılır. URL, kaynak adını içerir. İçerik, güncellenen kaynak verilerini içerir. Bir sorgu parametresi (genellikle update_mask), hangi alanların değiştirileceğini belirtir.

PATCH https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id
Content-Type: application/json

{
  "endpointUri": "https://myapp.com/new-webhooks/health"
}

Bir bakışta temel farklar

Özellik Sorgu Parametreleri İstek Metni
AIP Rehberi Arama, filtreleme ve okuma işlemleri için kullanılır. Yazma işlemleri için kullanılır.
Görünürlük Tarayıcı geçmişinde ve sunucu günlüklerinde görünür. URL'den gizlenir.
Karmaşıklık Düz veya tekrarlanan yapılarla sınırlıdır. Derinlemesine iç içe yerleştirilmiş JSON nesnelerini destekler.
Kodlama URL kodlamalı olmalıdır (örneğin, boşluklar %20 olur). Standart JSON kodlaması.

Tarihler

Google Health API'sindeki tüm tarihler YYYY-MM-DD biçiminde gösterilir. Beslenme API'si, tarih değerleri için ISO-8601 standardını aşağıdaki koşullarla destekler:

  • 4 haneli yıl YYYY
  • 0000-9999 aralığındaki yıl değerleri
  • ISO-8601 standardı veya başka bir dönem tarafından belirtilen başlangıç tarihi kısıtlamaları uygulanmaz.

Üst bilgiler

Google Health API uç noktalarını yürütmek için uygun başlıkların ve erişim jetonunun kullanılması gerekir. Hem GET hem de POST istekleri için aşağıdaki başlık önerilir:

Authorization: Bearer access-token
Accept: application/json

API görev dizini

Bu bölümde, yaygın olarak kullanılan Google Health API görevlerinin bir indeksi ve her bir görevle ilgili örnekler verilmiştir.

Fitbit veya Google kullanıcı kimliğini alma

Kullanıcı, Google OAuth 2.0 aracılığıyla izin verdikten sonra jeton yanıtı, Fitbit veya Google kullanıcı kimliğini içermez. Kullanıcı kimliğini almak için getIdentity uç noktasını çağırın. getIdentity hem eski Fitbit kullanıcı kimliğini hem de Google kullanıcı kimliğini döndürür.

Yeni bir kullanıcı OAuth üzerinden izin verdiği anda getIdentity uç noktasını çağırmanızı ve her iki kullanıcı kimliğini de saklamanızı öneririz. Bu, entegrasyonunuzda geriye ve ileriye dönük uyumluluk sağlar.

Örneğin:

İstek

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

Yanıt

{
  "name": "users/me/identity",
  "legacyUserId": "A1B2C3",
  "healthUserId": "111111256096816351"
}

Gün içinde veya gün boyunca toplanan ayrıntılı verileri alma

Belirli bir veri türü için list uç noktasını kullanarak gün içinde toplanan gün içi veya ayrıntılı verileri, söz konusu veri türü için desteklenen aralıklarla alın.

Örneğin:

İstek

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

Yanıt

{
  "dataPoints": [
    {
      "dataSource": {
        "recordingMethod": "PASSIVELY_MEASURED",
        "device": {
          "manufacturer": "",
          "displayName": "Charge 6"
        },
        "platform": "FITBIT"
      },
      "steps": {
        "interval": {
          "startTime": "2026-03-04T07:05:00Z",
          "startUtcOffset": "0s",
          "endTime": "2026-03-04T07:06:00Z",
          "endUtcOffset": "0s",
          "civilStartTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 5
            }
          },
          "civilEndTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 6
            }
          }
        },
        "count": "40"
      }
    },
...
  ],
  "nextPageToken": "Xm5h-6L0viZxIlRuWjx5bmvy98zj85uG34tuMn16mu2pntsnZI32iqhq"
}

Verileri filtrele

Bir zaman aralığı, tarih veya gözlem zamanı gibi ölçütlerle eşleşen veri noktası kayıtlarının belirli alt kümelerini almak için list veya reconcile uç noktasını filter parametresiyle kullanın.

Ayrıntılı yönergeler, biçimlendirme kuralları, doğrulama hataları ve sorgu örnekleri için Verileri filtreleme kılavuzuna bakın.

Veri kaynağı ailesine göre filtreleme

Belirli kaynak türlerinden (ör. fiziksel giyilebilir cihazlar ve manuel girişler) gelen verileri ayırmak veya toplamak için dataSourceFamily parametresini kullanın.

reconcile, rollUp ve dailyRollUp ile ilgili ayrıntılı yönergeler, desteklenen aileler ve istek ile yanıt örnekleri için Filtre verileri kılavuzundaki Veri kaynağı ailesine göre filtreleme bölümüne bakın.

Verileri, aralık başlangıç zamanına göre filtreleme

Verileri resmi saate veya aralığa göre filtrelemek için list uç noktasını filter parametresiyle kullanın.

Örneğin:

İstek

GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints?filter=steps.interval.civil_start_time >= "2026-03-04T00:00:00"
Authorization: Bearer access-token
Accept: application/json

Yanıt

{
  "dataPoints": [
    {
      "dataSource": {
        "recordingMethod": "PASSIVELY_MEASURED",
        "device": {
          "manufacturer": "",
          "displayName": "Charge 6"
        },
        "platform": "FITBIT"
      },
      "steps": {
        "interval": {
          "startTime": "2026-03-04T07:05:00Z",
          "startUtcOffset": "0s",
          "endTime": "2026-03-04T07:06:00Z",
          "endUtcOffset": "0s",
          "civilStartTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 5
            }
          },
          "civilEndTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 4
            },
            "time": {
              "hours": 7,
              "minutes": 6
            }
          }
        },
        "count": "40"
      }
...
  ],
  "nextPageToken": "Xm5h-6L0viZxIlRuQjp5bml1bZ4ve2dhNmZvMnt4Yn7qIGQhbHN3YQ"
}

Verileri örnek gözlem fiziksel zamanına göre filtreleme

Verileri örnek gözlem fiziksel zamanına göre filtrelemek için list uç noktasını filter parametresiyle kullanın.

Örneğin:

İstek

GET https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints?filter=body_fat.sample_time.physical_time >= "2026-03-01T00:00:00Z"
Authorization: Bearer access-token
Accept: application/json

Yanıt

{
  "dataPoints": [
    {
      "name": "users/123456789/dataTypes/body-fat/dataPoints/1234567890",
      "dataSource": {
        "recordingMethod": "UNKNOWN",
        "application": {
          "packageName": "",
          "webClientId": "",
          "googleWebClientId": "google-web-client-id"
        },
        "platform": "GOOGLE_WEB_API"
      },
      "bodyFat": {
        "sampleTime": {
          "physicalTime": "2026-03-10T10:00:00Z",
          "utcOffset": "0s",
          "civilTime": {
            "date": {
              "year": 2026,
              "month": 3,
              "day": 10
            },
            "time": {
              "hours": 10
            }
          }
        },
        "percentage": 20
      }
    }
  "nextPageToken": ""
}

Veri kaynağı ailesine göre filtreleme ve toplama

Veri kaynağı ailesi, veri kaynaklarının (ör. akıllı saatler, mobil uygulamalar veya manuel girişler) mantıksal olarak gruplandırılmasıdır. Belirli kaynak türlerinden (örneğin, fiziksel giyilebilir cihazlar ve manuel girişler) gelen verileri ayırmanıza veya toplamanıza olanak tanır.

reconcile, rollUp ve dailyRollUp uç noktalarının tümü dataSourceFamily parametresini destekler. Geçiş mekanizması uç noktaya bağlıdır:

Uç nokta (HTTP yöntemi) Sistem
reconcile (GET) dataSourceFamily değerini URL sorgu parametresi olarak iletin.
rollUp (POST) dataSourceFamily öğesini JSON istek gövdesinde alan olarak iletin.
dailyRollUp (POST) dataSourceFamily öğesini JSON istek gövdesinde alan olarak iletin.

Desteklenen Veri Kaynağı Aileleri

Aşağıdaki tabloda desteklenen dataSourceFamily değerleri açıklanmaktadır:

Seçenek Açıklama
users/me/dataSourceFamilies/all-sources Varsayılan değer. Kayıtlı tüm birinci taraf (1P) ve üçüncü taraf (3P) veri kaynaklarında mutabakatı yapılan veri noktalarını döndürür. Bu seçenekle üçüncü taraf uygulama verileri (ör. akıllı saat adımları + üçüncü taraf uygulama adımları + cep telefonu adımları + manuel adımlar) döndürülür.
users/me/dataSourceFamilies/google-wearables Google ve Fitbit takip cihazları (ör. Fitbit giyilebilir takip cihazları ve Pixel Watch) tarafından kaydedilen veriler dahildir. Manuel olarak kaydedilen veriler ve telefon tarafından tahmin edilen veriler hariç tutulur. Entegrasyonunuz, doğrudan giyilebilir donanım tarafından kaydedilen ham sensör telemetrisi gerektirdiğinde bu seçeneği kullanın.
users/me/dataSourceFamilies/google-sources Birinci taraf Google ve Fitbit kaynaklarını içerir. Buna fiziksel takip cihazı kayıtları, Health Connect'ten alınan veriler ve birinci taraf uygulamaları (ör. Fitbit uygulaması veya Google Fit) üzerinden kaydedilen tüm manuel girişler dahildir.

Belirli bir veri kaynağı ailesinden mutabakatı yapılmış bir veri akışı almak için reconcile sorgu parametresiyle dataSourceFamily uç noktasını çağırın.

Örneğin, aşağıdaki GET isteği 2026-03-03'ten sonraki gün için izleyici tarafından kaydedilen uyku verilerini getirir:

İstek

GET https://health.googleapis.com/v4/users/me/dataTypes/sleep/dataPoints:reconcile?dataSourceFamily=users/me/dataSourceFamilies/google-wearables&filter=sleep.interval.civil_end_time >= "2026-03-03"
Authorization: Bearer access-token
Accept: application/json

Yanıt

{
  "dataPoints": [
    {
      "name": "users/2515055256096816351/dataTypes/sleep/dataPoints/2724123844716220216",
      "dataSource": {
        "recordingMethod": "DERIVED",
        "device": {
          "displayName": "Charge 6"
        },
        "platform": "FITBIT"
      },
      "sleep": {
        "interval": {
          "startTime": "2026-03-03T20:57:30Z",
          "startUtcOffset": "0s",
          "endTime": "2026-03-04T04:41:30Z",
          "endUtcOffset": "0s"
        },
        "type": "STAGES",
        "stages": [
          {
            "startTime": "2026-03-03T20:57:30Z",
            "startUtcOffset": "0s",
            "endTime": "2026-03-03T20:59:30Z",
            "endUtcOffset": "0s",
            "type": "AWAKE",
            "createTime": "2026-03-04T04:43:40.937183Z",
            "updateTime": "2026-03-04T04:43:40.937183Z"
          },
          {
            "startTime": "2026-03-04T04:07:30Z",
            "startUtcOffset": "0s",
            "endTime": "2026-03-04T04:41:30Z",
            "endUtcOffset": "0s",
            "type": "AWAKE",
            "createTime": "2026-03-04T04:43:40.937183Z",
            "updateTime": "2026-03-04T04:43:40.937183Z"
          }
        ],
        "metadata": {
          "stagesStatus": "SUCCEEDED",
          "processed": true,
          "main": true
        },
        "summary": {
          "minutesInSleepPeriod": "464",
          "minutesAfterWakeUp": "0",
          "minutesToFallAsleep": "0",
          "minutesAsleep": "407",
          "minutesAwake": "57",
          "stagesSummary": [
            {
              "type": "AWAKE",
              "minutes": "56",
              "count": "12"
            },
            {
              "type": "LIGHT",
              "minutes": "198",
              "count": "19"
            },
            {
              "type": "DEEP",
              "minutes": "114",
              "count": "10"
            },
            {
              "type": "REM",
              "minutes": "94",
              "count": "4"
            }
          ]
        },
        "createTime": "2026-03-04T04:43:40.337983Z",
        "updateTime": "2026-03-04T04:43:40.937183Z"
      }
    }
  ],
  "nextPageToken": ""
}

Belirli bir veri kaynağı ailesiyle sınırlı olan belirli bir pencere boyutundaki veri noktalarını toplamak için rollUp uç noktasını çağırın ve JSON istek gövdesinde dataSourceFamily alanını iletin.

Aşağıdaki POST isteği, yalnızca giyilebilir cihazlardan toplanan verilerle saatlik aralıklarla (3600s) gün içi yürüme adımı sayılarını sorgular:

İstek

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

{
  "range": {
    "startTime": "2026-07-29T00:00:00Z",
    "endTime": "2026-07-29T23:59:59Z"
  },
  "windowSize": "3600s",
  "dataSourceFamily": "users/me/dataSourceFamilies/google-wearables"
}

Yanıt

{
  "rollupDataPoints": [
    {
      "startTime": "2026-07-29T08:00:00Z",
      "endTime": "2026-07-29T09:00:00Z",
      "steps": {
        "countSum": "1200"
      }
    },
    {
      "startTime": "2026-07-29T09:00:00Z",
      "endTime": "2026-07-29T10:00:00Z",
      "steps": {
        "countSum": "3450"
      }
    }
  ]
}

Belirli bir kaynak ailesi için günlük veri noktalarını toplamak üzere dailyRollUp uç noktasını çağırın ve istek gövdesinde dataSourceFamily alanını iletin.

Örneğin, aşağıdaki istek, kullanıcının adımlarıyla ilgili günlük toplamları hesaplar. Bu hesaplamaya tüm birinci taraf Google ve Fitbit kaynakları (giyilebilir cihazlar + manuel girişler) dahildir:

İstek

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

{
  "range": {
    "start": {
      "date": {
        "year": 2026,
        "month": 7,
        "day": 28
      },
      "time": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "nanos": 0
      }
    },
    "end": {
      "date": {
        "year": 2026,
        "month": 7,
        "day": 30
      },
      "time": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "nanos": 0
      }
    }
  },
  "windowSizeDays": 1,
  "dataSourceFamily": "users/me/dataSourceFamilies/google-sources"
}

Yanıt

{
  "rollupDataPoints": [
    {
      "civilStartTime": {
        "date": {
          "year": 2026,
          "month": 7,
          "day": 28
        },
        "time": {}
      },
      "civilEndTime": {
        "date": {
          "year": 2026,
          "month": 7,
          "day": 28
        },
        "time": {
          "hours": 23,
          "minutes": 59,
          "seconds": 59
        }
      },
      "steps": {
        "countSum": "8430"
      }
    },
    {
      "civilStartTime": {
        "date": {
          "year": 2026,
          "month": 7,
          "day": 29
        },
        "time": {}
      },
      "civilEndTime": {
        "date": {
          "year": 2026,
          "month": 7,
          "day": 29
        },
        "time": {
          "hours": 23,
          "minutes": 59,
          "seconds": 59
        }
      },
      "steps": {
        "countSum": "11245"
      }
    }
  ]
}

Veri noktalarını belirli bir zaman aralığında toplama

rollUp uç noktasını kullanarak, datetime aralığında saniye cinsinden bir pencereye göre veri noktalarının toplu değerini döndürün. Bu değer, kullanıcıların fiziksel zamanına (UTC olarak) göre belirlenir.

rollUp uç noktasını çağırırken kullanıcının yerel saatine göre gerekli tarih aralığını temsil eden istek gövdesini sağlamanız gerekir. Örneğin:

İstek

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

{
  "range": {
    "startTime": "2026-02-17T17:00:00Z",
    "endTime": "2026-02-17T17:59:59Z"
  },
  "windowSize": "30s"
}

Yanıt

{
  "rollupDataPoints": [
    {
      "startTime": "2026-02-17T17:55:00Z",
      "endTime": "2026-02-17T17:55:30Z",
      "steps": {
        "countSum": "41"
      }
    },
    {
      "startTime": "2026-02-17T17:54:00Z",
      "endTime": "2026-02-17T17:54:30Z",
      "steps": {
        "countSum": "31"
      }
    },
...
  ]
}

Verileri tek bir gün veya birden fazla gün boyunca toplama

dailyRollUp uç noktası, windowSize olarak bilinen tek bir gün veya birden fazla gün boyunca verileri toplamak istediğinizde kullanılmalıdır. İstek gövdesinde, gerekli aralık için kapalı-açık sivil zaman aralığını sağlayın. Veri türüne bağlı olarak, aralık boyunca toplamı veya ortalamayı alırsınız.

Örneğin:

İstek

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

{
  "range": {
    "start": {
      "date": {
        "year": 2026,
        "month": 2,
        "day": 26
      },
      "time": {
        "hours": 0,
        "minutes": 0,
        "seconds": 0,
        "nanos": 0
      }
    },
    "end": {
      "date": {
        "year": 2026,
        "month": 2,
        "day": 26
      },
      "time": {
        "hours": 23,
        "minutes": 59,
        "seconds": 59,
        "nanos": 0
      }
    }
  },
  "windowSizeDays": 1
}

Yanıt

{
  "rollupDataPoints": [
    {
      "civilStartTime": {
        "date": {
          "year": 2026,
          "month": 2,
          "day": 26
        },
        "time": {}
      },
      "civilEndTime": {
        "date": {
          "year": 2026,
          "month": 2,
          "day": 26
        },
        "time": {
          "hours": 23,
          "minutes": 59,
          "seconds": 59
        }
      },
      "steps": {
        "countSum": "3822"
      }
    }
  ]
}

Aralık, pencere boyutunun katı olmadığında gruplandırma

İstenen aralık, windowSize (veya windowSizeDays) değerinin tam katı değilse son grup, aralığın üst uç noktasında kronolojik olarak kesilir ve pencere boyutundan daha kısa bir süreyi kapsar. API, isteğinizi değiştirmeden kabul eder ve herhangi bir yuvarlama, zaman kaydırma veya veri enterpolasyonu gerçekleştirmez.

API, istenen aralığın tamamını kapsamak için toplama pencerelerinin toplam sayısını hesaplarken yukarı yuvarlama bölme işlemini kullanır:

Number of windows = ceiling(Range duration / Window size)

Her grup, aralığınızın başından sırayla başlar. Başka bir tam boyutlu pencere eklemek, istenen bitiş zamanını aşarsa son pencere, aralık bitiş zamanında kesilir (sıkıştırılır).

Gruplandırma nasıl çalışır?

Bölünemeyen aralıklarla özet istekleri gönderirken API aşağıdaki kuralları uygular:

  • Gruplandırma, istenen aralığınızın başında (range.startTime veya range.start) başlar ve pencere boyutu (windowSize veya windowSizeDays) kadar ilerler.
  • Son kronolojik grup, istenen aralığınızın sonunda (range.endTime veya range.end) sabitlenir. Bu nedenle, istenen aralık boyutundan daha kısa bir süreyi kapsar.
  • Döndürülen RollupDataPoint veya DailyRollupDataPoint nesneleri, kendi başlangıç ve bitiş zaman damgalarını açıkça belirtir. Bu zaman damgalarını, kesilmiş paketin gerçek süresini incelemek için kullanabilirsiniz.
  • API, birleştirilmiş verileri ters kronolojik sırada (en yeni önce) döndürdüğünden, son kronolojik grup (kısaltılmış olan) döndürülen listede ilk öğe (index 0) olarak görünür.

Senaryo: 5 dakikalık aralıkla 12 dakikalık menzil

Bir istemcinin 5 dakikalık aralıklarla 12 dakikalık bir aralıkta özetleme istediğini varsayalım windowSize:

  • range.startTime: 10:00:00
  • range.endTime: 10:12:00 (Toplam süre: 12 dakika)
  • windowSize: 5 minutes

12 dakika, 5 dakikanın katı olmadığı için (12 = 5 * 2 + 2) API, isteği kabul eder ve pencere sayısını ceiling(12 / 5) = 3 olarak hesaplar.

Bu işlem, kronolojik sıraya göre aşağıdaki üç grubu oluşturur:

  1. 1. grup: [10:00:00, 10:05:00) Süre: 5 dakika (tam pencere)
  2. 2. paket: [10:05:00, 10:10:00) — Süre: 5 dakika (tam aralık)
  3. 3. grup (Kısaltılmış): [10:10:00, 10:12:00) — Süre: 2 dakika (range.endTime saniyede kısaltıldı)

Toplu değerler üzerindeki etkisi

Son pencerenin süresi daha kısa olduğundan, toplama metrikleri (ör. adımların toplamı veya sayısı) yalnızca daha kısa zaman aralığı nedeniyle kesilmiş grupta daha düşük olur.

Kullanıcı bu 12 dakikalık süre boyunca dakikada 100 adım olacak şekilde sabit bir hızda yürürse:

  • Grup 1 (10:00-10:05): 500 adım (5 dakika × 100 adım/dakika)
  • Grup 2 (10:05-10:10): 500 adım (5 dakika × 100 adım/dakika)
  • 3. grup (10:10-10:12): 200 adım (2 dakika × 100 adım/dakika)

Sıralamayı gösteren örnek API yanıtı

API, sonuçları ters kronolojik sırada döndürdüğünden, kesilmiş paket döndürülen listede ilk öğe olarak görünür:

{
  "rollupDataPoints": [
    {
      "startTime": "2026-08-20T10:10:00Z",
      "endTime": "2026-08-20T10:12:00Z",
      "steps": {
        "countSum": "200"
      }
    },
    {
      "startTime": "2026-08-20T10:05:00Z",
      "endTime": "2026-08-20T10:10:00Z",
      "steps": {
        "countSum": "500"
      }
    },
    {
      "startTime": "2026-08-20T10:00:00Z",
      "endTime": "2026-08-20T10:05:00Z",
      "steps": {
        "countSum": "500"
      }
    }
  ]
}

Kullanıcının sağlık verilerini güncelleme

Kullanıcının sağlık verilerini güncellemek için patch uç noktasını kullanın.

patch uç noktası, istek URL'sinde belirtilen tanımlayıcıya göre mevcut bir kaydı günceller. Daha önce eklenmiş bir veri noktasının tanımlayıcısını sağlayın. API, mevcut kaydın üzerine yazar.

Veri noktası tanımlayıcısı ne zaman kullanılır?

Veri noktası tanımlayıcısı aşağıdaki senaryolarda gereklidir:

  • Hedeflenen güncellemeler: Belirli bir ölçümü güncellemek için patch isteğinde tanımlayıcısını sağlayın.
  • Silme işlemleri: Tanımlayıcıyı saklamak, uygulamanızın batchDelete uç noktasını kullanarak kaydı daha sonra silmesine olanak tanır.

Bir kullanıcının "Scales R Us" şirketinin "HumanScale" adlı bir tartısında vücut yağ yüzdesi ölçümünü güncellediği bir örneği aşağıda bulabilirsiniz. Kullanıcının 10.03.2026 tarihine ait yeni vücut yağ yüzdesi okuması% 20:

İstek

PATCH https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints/1234567890
Authorization: Bearer access-token
Content-Type: application/json

{
  "name": "users/me/dataTypes/body-fat/dataPoints/1234567890",
  "dataSource": {
    "recordingMethod": "ACTIVELY_MEASURED",
    "device": {
      "formFactor": "SCALE",
      "manufacturer": "Scales R Us",
      "displayName": "HumanScale"
    }
  },
  "bodyFat": {
    "sampleTime": {
      "physicalTime": "2026-03-10T10:00:00Z"
    },
    "percentage": 20
  }
}

Yanıt

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4main.DataPoint",
    "name": "users/123456789/dataTypes/body-fat/dataPoints/1234567890",
    "dataSource": {
      "recordingMethod": "ACTIVELY_MEASURED",
      "device": {
        "formFactor": "SCALE",
        "manufacturer": "Scales R Us",
        "displayName": "HumanScale"
      },
      "application": {
        "googleWebClientId": "618308034039.apps.googleusercontent.com"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "bodyFat": {
      "sampleTime": {
        "physicalTime": "2026-03-10T10:00:00Z"
      },
      "percentage": 20
    }
  }
}

Yiyecek öğesi kaydetme

Bir yiyecek öğesini kaydetmek için nutrition-log dataPoints uç noktasına POST isteği gönderin. İstek metni, nutritionLog nesnesi içeren bir DataPoint içerir. Daha fazla bilgi için Beslenme kılavuzu'na bakın.

Örneğin:

İstek

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"
    },
    "foodDisplayName": "Banana",
    "mealType": "LUNCH",
    "energy": {
      "kcal": 105
    },
    "totalCarbohydrate": {
      "grams": 27
    },
    "totalFat": {
      "grams": 0.3
    }
  }
}

Yanıt

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/123456789/dataTypes/nutrition-log/dataPoints/567890",
    "dataSource": {
      "recordingMethod": "ACTIVELY_MEASURED",
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T12:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T12:30:00Z",
        "endUtcOffset": "0s"
      },
      "energy": {
        "kcal": 105
      },
      "totalCarbohydrate": {
        "grams": 27
      },
      "totalFat": {
        "grams": 0.3
      },
      "mealType": "LUNCH",
      "foodDisplayName": "Banana"
    }
  }
}

Kullanıcı sağlık verilerini silme

Bir kullanıcının Fitbit uygulaması verilerinin dizisini silmek için batchDelete yöntemini kullanın.

Kullanıcının daha önce vücut yağ yüzdesini tartıda kaydettiği ancak kaydı silmek istediği bir örneği aşağıda bulabilirsiniz. Orijinal ekleme işlemindeki user-id ve data-point-id öğelerini kullanma:

İstek

POST https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints:batchDelete
Authorization: Bearer access-token
Accept: application/json
content-length: 93

{
  "names": [
    "users/123456789/dataTypes/body-fat/dataPoints/1234567890"
  ]
}

Yanıt

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4main.BatchDeleteDataPointsResponse"
  }
}

Cihaz bilgilerini bulma

Bir kullanıcının hesabıyla eşlenmiş cihazların listesini almak için list uç noktasını kullanın. Buna cihazın model bilgileri (deviceVersion) ve Google Health mobil uygulamasıyla son senkronize edildiği zaman (lastSyncTime) dahildir.

Liste yapılandırması ve senkronizasyon bilgileri, senkronizasyon sorunlarını gidermek veya son senkronizasyon zamanından bu yana geçmiş verileri getirmek için yararlıdır.

Örneğin:

İstek

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

Yanıt

{
  "pairedDevices": [
    {
      "name": "users/me/pairedDevices/123456",
      "deviceType": "TRACKER",
      "batteryStatus": "High",
      "batteryLevel": 88,
      "lastSyncTime": "2026-03-04T07:05:00Z",
      "deviceVersion": "Charge 6",
      "macAddress": "00:11:22:33:44:55",
      "features": [
        "STEPS",
        "HEART_RATE"
      ]
    }
  ]
}

Geçmiş verileri sorgulama

Google Health API'nin temel avantajlarından biri, kullanıcının performansını takip etme ve sağlık verilerini uzun süre boyunca izleme olanağı sunmasıdır. Kullanıcı verilerini kaydedildikleri tarihten itibaren sorgulayabilirsiniz. API, uygulamanızın kullanabileceği geçmiş veri miktarıyla ilgili herhangi bir sınırlama veya kısıtlama getirmez.

Ancak geçmiş verilerle ilgili sorgular standart hız sınırlarına tabidir. Google Health API, sistem kararlılığını yönetmek ve aşırı yükleri önlemek için uç nokta özel sayfa boyutlarıyla otomatik sayfalama kullanır. Aşağıdaki sınırlara ve davranışa dikkat edin:

  • Otomatik sayfalara ayırma: Uzun bir veri aralığını sorgularsanız API, yalnızca bu uç nokta için sayfa boyutu sınırına kadar olan sonuçların ilk sayfasını nextPageToken ile birlikte döndürür. Sonraki sayfaları istemek için nextPageToken kullanmanız gerekir.
  • Değişken sayfa boyutları: Sınırlama sınırları, uç noktaya ve veri türüne bağlıdır. Çoğu veri türünde sayfa boyutları en fazla 10.000 ile sınırlıdır. Ancak exercise ve sleep gibi belirli veri türleri için varsayılan ve maksimum sayfa boyutu 25 ile sınırlıdır. Örneğin, bir istemci son 10 yıla ait tüm uyku verilerini isterse API, ilk sayfada yine yalnızca 25 uyku oturumu döndürür.
  • Toplama tarih aralığı kısıtlamaları: Veri toplama ve birleştirme uç noktaları (ör. rollUp ve dailyRollUp) için sorgu tarih aralıkları, veri türüne göre kısıtlanır:
    • calories-in-heart-rate-zone, heart-rate, active-minutes ve total-calories için maksimum 14 günlük aralık.
    • Diğer tüm toplama veri türleri için maksimum aralık 90 gündür.

Uygulamanızın ihtiyaç duyduğu geçmiş veri hacmine bağlı olarak, veri kümesinin tamamını almak için sayfalar arasında sırayla gezinmeniz gerekir. Uygulamanızın veri senkronizasyonu sürecini tasarlarken bunu göz önünde bulundurun.

En iyi performansı elde etmek ve API hatalarını önlemek için geçmiş verileri sorgularken aşağıdaki yönergeleri uygulayın:

Aşamalı veri senkronizasyonu (sıcak yükleme ve sıfırdan yükleme)

  • İlk "sıcak" yükleme: Birincil yükleme sırası sırasında yalnızca son 7-14 güne ait verileri getirin ve oluşturun. Bu sayede kullanıcılar, uzun süren sorguları beklemek zorunda kalmadan verileri anında görür.
  • Arka planda "soğuk" yükleme: Birincil kullanıcı arayüzü oluşturulduktan sonra daha eski bir döneme ait geçmiş verilerin alınmasını eşzamansız, daha düşük öncelikli bir sıraya veya arka plan işlemine devredin.

Toplama için sorgu parçalama

  • Toplama ve günlük toplama uç noktaları maksimum tarih aralığı sınırını (veri türüne bağlı olarak 14 veya 90 gün) zorunlu kıldığından, büyük geçmiş toplama sorgularını bu sınırlar içinde daha küçük ve sıralı aralıklara ayırmanız gerekir.
  • Eşzamanlılık sınırlarına uymak ve kullanıcı arayüzündeki ilerleme göstergelerini sabit tutmak için bu alt sorguları güvenli bir şekilde toplu olarak veya sırayla gönderin.

Önceden toplanmış özetlerden yararlanma

Önceden toplanmış özet uç noktalarını (ör. DailyRollUpDataPoints) kullanmak için genel bakış kontrol panellerini ve trend grafiklerini yeniden yapılandırın. Bu, arka uçtaki işlem yükünü ve istemciye ağ aktarım süresini önemli ölçüde azaltır.

Esnek hata işleme (akıllı yeniden denemeler)

  • Hız sınırlarıyla (429 Too Many Requests) ve sunucu ağ geçidi zaman aşımlarıyla (504 Gateway Timeout) karşılaşıldığında katı eksponansiyel geri yükleme işleme uygulayın. Büyük ve başarısız olan yükleri asla hemen yeniden denemeyin. Anında yeniden denemeler, arka uçtaki tıkanıklığı artırır ve sistemin performansını düşürür.