Google Health API ใช้การแสดงตัวกรองเพื่อจํากัดจุดข้อมูลที่ส่งคืนเมื่อเรียกใช้เมธอดการดึงข้อมูลมาตรฐาน โดยเฉพาะอย่างยิ่ง ตัวกรองจะใช้กับรายการต่อไปนี้
listปลายทาง: การค้นหาจุดข้อมูลดิบreconcileปลายทาง: การค้นหาจุดข้อมูลสตรีมที่ปรับแล้ว
คู่มือนี้จะอธิบายวิธีใช้การกรอง ไวยากรณ์และรูปแบบ และมีตัวอย่างสำหรับระเบียนแต่ละประเภท
หลักเกณฑ์การกรอง
Google Health API ใช้ตัวกรองตามมาตรฐานข้อเสนอการปรับปรุง Google API (AIP-160)
พารามิเตอร์การค้นหา
ระบบจะส่งตัวกรองโดยใช้สตริงการค้นหาของ URL ในพารามิเตอร์ filter
เนื่องจากตัวกรองมีอักขระพิเศษ (เช่น <, >= และเครื่องหมายคำพูด)
จึงต้องเข้ารหัส URL เมื่อส่งในคำขอ HTTP
เช่น คำขอที่มีตัวกรอง
steps.interval.civil_start_time >= "2026-03-04T00:00:00"
ควรเข้ารหัสเป็น
GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints ?filter=steps.interval.civil_start_time%20%3E%3D%20%222026-03-04T00%3A00%3A00%22
รูปแบบการตั้งชื่อ
หากประเภทข้อมูลมีมากกว่า 1 คำ รูปแบบของตัวระบุจะแตกต่างกัน ระหว่างเส้นทางทรัพยากรและตัวกรอง ดังนี้
- เส้นทางปลายทาง: ใช้ขีดกลาง (เช่น
/dataTypes/body-fat) - สตริงตัวกรอง: ใช้ขีดล่าง (เช่น
body_fat)
หากคุณใช้ขีดกลางในตัวระบุตัวกรอง API จะแสดง 400 Bad Request
พร้อมเหตุผลของข้อผิดพลาด INVALID_DATA_POINT_FILTER
ประเภทและฟิลด์ตัวกรอง
ฟิลด์ที่คุณใช้ในตัวกรองจะขึ้นอยู่กับประเภทระเบียนของประเภทข้อมูล ที่คุณกําลังค้นหา ตารางต่อไปนี้อธิบายฟิลด์ที่รองรับสำหรับ ประเภทระเบียนแต่ละรายการ
| ประเภทระเบียน | คำอธิบาย | ฟิลด์ตัวกรองที่รองรับ |
|---|---|---|
| ช่วงการฝึก | จุดข้อมูลที่บันทึกในช่วงระยะเวลาหนึ่ง (เช่น steps, distance, calories) |
{dataType}.interval.start_time{dataType}.interval.civil_start_time
ตัวอย่าง: steps.interval.civil_start_time
|
| ตัวอย่าง | การสังเกตการณ์ทันทีหรือการวัดค่าระยะสั้น (เช่น weight, body-fat, blood-glucose) |
{dataType}.sample_time.physical_time{dataType}.sample_time.civil_time
ตัวอย่าง: body_fat.sample_time.physical_time
|
| รายวัน | เมตริกและข้อมูลสรุปรายวัน (เช่น daily-heart-rate-variability) |
{dataType}.date
ตัวอย่าง: daily_heart_rate_variability.date
|
| เซสชัน | เซสชันของผู้ใช้ที่ขยายเวลาออกไปพร้อมกฎการกำหนดเวลาเฉพาะ |
การออกกำลังกาย: {dataType}.interval.civil_start_timeการนอนหลับ: sleep.interval.end_time, sleep.interval.civil_end_timeECG: electrocardiogram.interval.start_time
ตัวอย่าง: sleep.interval.civil_end_time
|
โอเปอเรเตอร์และกฎรูปแบบที่รองรับ
นิพจน์ตัวกรองต้องเป็นไปตามกฎการจัดรูปแบบต่อไปนี้
โอเปอเรเตอร์การเปรียบเทียบ
ระบบรองรับเฉพาะโอเปอเรเตอร์การเปรียบเทียบ 2 รายการต่อไปนี้
| โอเปอเรเตอร์ | คำอธิบาย |
|---|---|
>= |
ขอบเขตล่าง (รวม) |
< |
ขอบเขตบน (ไม่รวม) |
การใช้โอเปอเรเตอร์การเปรียบเทียบอื่นๆ (เช่น >, <= หรือ =) จะแสดงผล 400 Bad Request ที่มี INVALID_DATA_POINT_FILTER_RESTRICTION_COMPARATOR
โอเปอเรเตอร์แบบลอจิคัล
| โอเปอเรเตอร์ | การสนับสนุน |
|---|---|
AND |
โอเปอเรเตอร์เริ่มต้นและรองรับเท่านั้น ใช้เพื่อรวมขอบเขตเริ่มต้นและสิ้นสุด |
OR |
ไม่รองรับ การใช้ OR จะแสดง 400 Bad Request ที่มีเหตุผลของข้อผิดพลาด INVALID_DATA_POINT_FILTER_EXPRESSION_STRUCTURE ("ตัวกรองต้องเป็นการเชื่อมโยงหรือลำดับของข้อจำกัด พบ: DISJUNCTION") |
ค่าตามเวลา
ค่าตัวอักษรเวลาในนิพจน์ตัวกรองต้องใช้รูปแบบต่อไปนี้
| ประเภทเวลา | ข้อกำหนด | ตัวอย่าง |
|---|---|---|
| เวลาจริง | รูปแบบ RFC 3339 โดยลงท้ายด้วย Z หรือค่าชดเชยเวลา UTC แสดงเหตุการณ์ในโลกแห่งความเป็นจริงในเวลา UTC |
ถูกต้อง: "2026-03-01T00:00:00Z", "2026-03-01T00:00:00-08:00"ไม่ถูกต้อง: "2026-03-01" |
| เวลาพลเรือน | รูปแบบ ISO 8601: YYYY-MM-DD[THH:mm:ss] แสดงเวลาในนาฬิกาของผู้ใช้ โดยไม่ขึ้นอยู่กับตำแหน่งหรือออฟเซ็ตเขตเวลา |
ถูกต้อง: "2026-03-01", "2026-03-01T08:30:00" |
กฎการตรวจสอบตัวกรอง
ตัวกรองมีกฎดังนี้
| กฎ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| ไม่มีประเภทเวลาแบบผสม | อย่าผสมขอบเขตเวลาทางกายภาพและทางแพ่ง | ไม่ถูกต้อง: steps.interval.start_time >= "2026-03-01T00:00:00Z" AND steps.interval.civil_start_time < "2026-03-02"ข้อผิดพลาด: INVALID_DATA_POINT_FILTER_MIXED_TIME_RESTRICTIONS ("ตัวกรองต้องไม่มีทั้งช่วงเวลาจริงและช่วงเวลาทางแพ่ง") |
| ไม่มีประเภทข้อมูลแบบผสม | ใช้ฟิลด์ที่เป็นของประเภทข้อมูลในเส้นทางการร้องขอ | ไม่ถูกต้อง: เส้นทาง /users/.../dataTypes/steps/... ที่มีตัวกรอง distance.interval.start_time >= "..."ข้อผิดพลาด: INVALID_DATA_POINT_FILTER_COLLECTION_MISMATCH ("ประเภทข้อมูลในตัวกรองไม่ตรงกับคอลเล็กชันประเภทข้อมูลหลัก") |
| ตรรกะลำดับเวลา | ขอบเขตบนต้องมากกว่าขอบเขตล่าง | ไม่ถูกต้อง: steps.interval.start_time >= "2026-03-02T00:00:00Z" AND steps.interval.start_time < "2026-03-01T00:00:00Z"ข้อผิดพลาด: INVALID_TIME_RANGE ("เวลาสิ้นสุดการค้นหาต้องมากกว่าเวลาเริ่มต้นอย่างเคร่งครัด") |
| รูปแบบเคส | ใช้รูปแบบ Snake Case ที่ตรงกับชื่อประเภทข้อมูล | ไม่ถูกต้อง: body-fat.sample_time.physical_time >= "..."ข้อผิดพลาด: INVALID_DATA_POINT_FILTER ("ตัวกรองไม่ถูกต้อง") |
API จะแสดง HTTP 400 Bad Request สำหรับตัวกรองที่ไม่ถูกต้อง ตรวจสอบerror.details[].metadata.detailedReasonsเพื่อหารหัสเหตุผลของข้อผิดพลาด
ขอบเขต OAuth ที่จำเป็น
หากต้องการค้นหาจุดข้อมูลโดยใช้ตัวกรอง ผู้ใช้ที่ได้รับอนุญาตต้องให้ขอบเขต OAuth ที่เกี่ยวข้องสำหรับประเภทข้อมูลนั้น หากไม่มีขอบเขตที่จำเป็น API
จะแสดงสถานะ 403 Forbidden พร้อม MISSING_OAUTH_SCOPE
ตารางต่อไปนี้จะแมปขอบเขต OAuth กับประเภทข้อมูลที่ให้สิทธิ์เข้าถึงแบบอ่าน
ตารางจะแสดงขอบเขตในรูปแบบที่เกี่ยวข้อง (เช่น
.activity_and_fitness.readonly แสดงถึง
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly)
| ขอบเขต OAuth ที่จำเป็น | ประเภทข้อมูล |
|---|---|
.activity_and_fitness.readonly |
active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, calories-in-heart-rate-zone, daily-vo2-max, distance, exercise, floors, run-vo2-max, sedentary-period, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max |
.ecg.readonly |
คลื่นไฟฟ้าหัวใจ |
.health_metrics_and_measurements.readonly |
blood-glucose, body-fat, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, heart-rate, heart-rate-variability, height, oxygen-saturation, respiratory-rate-sleep-summary, skin-temperature-sensors, weight |
.irn.readonly |
การแจ้งเตือนเมื่อจังหวะการเต้นของหัวใจผิดปกติ |
.nutrition.readonly |
food, food-measurement-unit, hydration-log, nutrition-log |
.sleep.readonly |
การนอนหลับ |
หากไคลเอ็นต์ได้รับขอบเขตการเขียนเท่านั้น (เช่น .activity_and_fitness.writeonly) สำหรับประเภทข้อมูลที่ขอ คุณยังคง
ค้นหาจุดข้อมูลที่ไคลเอ็นต์ของคุณเองเขียนได้ ในกรณีนี้ คำขอจะถูกจำกัดโดยปริยายให้ใช้self-sourcesตระกูลแหล่งข้อมูล ดูรายละเอียดและ
ข้อจำกัดของประเภทข้อมูลได้ที่
กรองตามตระกูลแหล่งข้อมูล
กรณีการใช้งานและตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีสร้างตัวกรองสำหรับสถานการณ์ทั่วไป
ค้นหาขั้นตอนตามช่วงเวลาจริง
ขั้นตอนการค้นหาที่บันทึกไว้ระหว่าง 2026-03-01T00:00:00Z (รวม)
และ 2026-03-02T00:00:00Z (ไม่รวม)
GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints ?filter=steps.interval.start_time >= "2026-03-01T00:00:00Z" AND steps.interval.start_time < "2026-03-02T00:00:00Z"
ค้นหาขั้นตอนตามช่วงเวลาของพลเรือน
ขั้นตอนการค้นหาสำหรับทั้งวันในวันที่ 4 มีนาคม 2026 ตามเวลาท้องถิ่นของผู้ใช้มีดังนี้
GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints ?filter=steps.interval.civil_start_time >= "2026-03-04" AND steps.interval.civil_start_time < "2026-03-05"
ค้นหาไขมันร่างกายตามเวลาตัวอย่างจริง
ค้นหาการวัดไขมันร่างกายที่บันทึกไว้ตั้งแต่เดือนมีนาคม 2026 (ในเขตเวลา UTC)
GET https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints ?filter=body_fat.sample_time.physical_time >= "2026-03-01T00:00:00Z"
น้ำหนักการค้นหาตามเวลาตัวอย่างของพลเรือน
บันทึกน้ำหนักของคำค้นหาที่บันทึกหลังจากเวลาท้องถิ่นที่เฉพาะเจาะจง
GET https://health.googleapis.com/v4/users/me/dataTypes/weight/dataPoints ?filter=weight.sample_time.civil_time >= "2026-03-01T08:00:00"
ค้นหาสรุปความผันแปรของอัตราการเต้นของหัวใจรายวัน
ค้นหาสรุปรายวันของความผันแปรของอัตราการเต้นของหัวใจ (HRV) ที่บันทึกไว้ก่อน วันที่ที่ระบุ
GET https://health.googleapis.com/v4/users/me/dataTypes/daily-heart-rate-variability/dataPoints ?filter=daily_heart_rate_variability.date < "2026-08-15"
ค้นหาเซสชันการออกกำลังกายตามเวลาเริ่มต้นของเซสชัน
ค้นหาเซสชันการออกกำลังกายที่เกิดขึ้นในสัปดาห์ที่เฉพาะเจาะจงในเขตเวลาท้องถิ่นของผู้ใช้
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints ?filter=exercise.interval.civil_start_time >= "2026-03-01" AND exercise.interval.civil_start_time < "2026-03-08"
ค้นหาเซสชันการนอนหลับตามเวลาสิ้นสุดของเซสชัน
ค้นหาบันทึกการนอนหลับตามเวลาสิ้นสุดของเซสชัน
GET https://health.googleapis.com/v4/users/me/dataTypes/sleep/dataPoints ?filter=sleep.interval.civil_end_time >= "2026-03-04T05:00:00" AND sleep.interval.civil_end_time < "2026-03-04T12:00:00"
ค้นหาคลื่นไฟฟ้าหัวใจตามเวลาเริ่มต้น
ค้นหาการบันทึก ECG โดยเริ่มจากจุดเวลา UTC จริง โปรดทราบว่า
การค้นหา ECG รองรับเฉพาะ>=การเปรียบเทียบstart_timeต่อไปนี้
GET https://health.googleapis.com/v4/users/me/dataTypes/electrocardiogram/dataPoints ?filter=electrocardiogram.interval.start_time >= "2026-03-10T12:00:00Z"
กรองตามตระกูลแหล่งข้อมูล
ตระกูลแหล่งข้อมูลคือการจัดกลุ่มแหล่งข้อมูลเชิงตรรกะ (เช่น สมาร์ทวอทช์ แอปบนอุปกรณ์เคลื่อนที่ หรือรายการที่ป้อนด้วยตนเอง) ซึ่งช่วยให้คุณแยกหรือ รวบรวมข้อมูลจากแหล่งที่มาบางประเภทได้ (เช่น อุปกรณ์ที่สวมใส่ได้จริง รายการที่ป้อนด้วยตนเอง หรือข้อมูลที่ไคลเอ็นต์ของคุณเองเขียน)
ปลายทาง list, reconcile, rollUp และ dailyRollUp รองรับพารามิเตอร์
dataSourceFamily ทั้งหมด กลไกการส่งผ่านจะขึ้นอยู่กับปลายทาง ดังนี้
| ปลายทาง (เมธอด HTTP) | กลไก |
|---|---|
list (GET) |
ส่ง dataSourceFamily เป็นพารามิเตอร์การค้นหาของ URL |
reconcile (GET) |
ส่ง dataSourceFamily เป็นพารามิเตอร์การค้นหาของ URL |
rollUp (POST) |
ส่ง dataSourceFamily เป็นฟิลด์ในเนื้อหาคำขอ JSON |
dailyRollUp (POST) |
ส่ง dataSourceFamily เป็นฟิลด์ในเนื้อหาคำขอ JSON |
ตระกูลแหล่งข้อมูลที่รองรับ
ตารางต่อไปนี้อธิบายค่า dataSourceFamily ที่รองรับ
| ตัวเลือก | คำอธิบาย |
|---|---|
users/me/dataSourceFamilies/all-sources |
ค่าเริ่มต้น (เมื่อได้รับขอบเขตการอ่าน) รวมถึงจุดข้อมูลจากแหล่งข้อมูลจากบุคคลที่หนึ่ง (1P) และบุคคลที่สาม (3P) ที่พร้อมใช้งานทั้งหมด ระบบจะแสดงข้อมูลแอปของบุคคลที่สามพร้อมกับตัวเลือกนี้ (เช่น จำนวนก้าวของสมาร์ทวอทช์ + จำนวนก้าวของแอปของบุคคลที่สาม + จำนวนก้าวของโทรศัพท์มือถือ + จำนวนก้าวที่บันทึกด้วยตนเอง) |
users/me/dataSourceFamilies/google-wearables |
รวมถึงข้อมูลที่บันทึกโดยอุปกรณ์ติดตามของ Google และ Fitbit (เช่น อุปกรณ์ติดตาม Fitbit ที่สวมใส่ได้และ Pixel Watch) ไม่รวมข้อมูลที่บันทึกด้วยตนเองและข้อมูลที่โทรศัพท์ประมาณ ใช้ตัวเลือกนี้เมื่อการผสานรวมต้องใช้การวัดและส่งข้อมูลทางไกลของเซ็นเซอร์ดิบที่ฮาร์ดแวร์อุปกรณ์สวมใส่บันทึกโดยตรง |
users/me/dataSourceFamilies/google-sources |
รวมถึงแหล่งที่มาของ Google และ Fitbit ที่เป็นบุคคลที่หนึ่ง ซึ่งรวมถึงบันทึกอุปกรณ์ติดตามทางกายภาพ ข้อมูลจาก Health Connect และรายการที่ป้อนด้วยตนเองซึ่งบันทึกผ่านแอปของบุคคลที่หนึ่ง (เช่น แอป Fitbit หรือ Google Fit) |
users/me/dataSourceFamilies/self-sources |
รวมเฉพาะข้อมูลที่ไคลเอ็นต์ที่เรียกใช้เขียนผ่าน Google Health API (จุดข้อมูลที่มีการลงทะเบียนแหล่งข้อมูลผ่าน API ด้วยรหัสไคลเอ็นต์ OAuth เดียวกันกับผู้เรียก) |
หากไม่มีจุดข้อมูลใดตรงกับตระกูลแหล่งข้อมูลที่ขอ การตอบกลับจะเป็น รายการที่ว่างเปล่าแทนที่จะเป็นข้อผิดพลาด
ขอบเขตแบบเขียนอย่างเดียวและแหล่งที่มาของตัวเอง
ผู้โทรที่ได้รับขอบเขตการเขียนเท่านั้น (เช่น .activity_and_fitness.writeonly) สำหรับประเภทข้อมูลที่ขอจะอ่านข้อมูลที่ตนเองเขียนได้ และอ่านได้เฉพาะข้อมูลนั้น
- คำขอที่ไม่มีพารามิเตอร์
dataSourceFamilyอย่างชัดเจน หรือมีdataSourceFamilyตั้งค่าเป็นusers/me/dataSourceFamilies/self-sourcesจะถูกจำกัดโดยนัยเป็นself-sources - การขอแหล่งข้อมูลอื่นๆ (เช่น
all-sources,google-wearablesหรือgoogle-sources) ที่มีขอบเขตการเขียนเท่านั้นจะล้มเหลวโดยมีข้อผิดพลาด403 Forbidden(PERMISSION_DENIED)
ข้อจำกัดของประเภทข้อมูลในปลายทางรายการ
ในlistปลายทาง (users.dataTypes.dataPoints.list) ระบบไม่รองรับการกรองตาม
dataSourceFamily สำหรับประเภทข้อมูล sleep, food และ
food-measurement-unit
- การตั้งค่า
dataSourceFamilyในlistสำหรับsleep,foodหรือfood-measurement-unitจะล้มเหลวพร้อมข้อผิดพลาด400 Bad Request(INVALID_ARGUMENT) - การเรียก
listสำหรับประเภทข้อมูลเหล่านี้เมื่อได้รับขอบเขตการเขียนเท่านั้น (ซึ่ง การจำกัดเป็นself-sourcesจะแสดงโดยขอบเขตของผู้เรียก) จะล้มเหลว พร้อมข้อผิดพลาด403 Forbidden(PERMISSION_DENIED) - หากต้องการกรอง
sleepจุดข้อมูลตามdataSourceFamilyให้ใช้reconcileปลายทาง แทน
ตัวอย่างตระกูลแหล่งข้อมูล
หากต้องการแสดงจุดข้อมูลดิบที่ไคลเอ็นต์ของคุณเขียนขึ้นเองสำหรับผู้ใช้ ให้เรียกใช้list
ปลายทางโดยตั้งค่าพารามิเตอร์การค้นหา dataSourceFamily เป็น
users/me/dataSourceFamilies/self-sources
ตัวอย่างเช่น คำขอ GET ต่อไปนี้จะแสดงรายการการวัด body-fat แบบดิบ
ที่ไคลเอ็นต์ที่เรียกใช้เขียนขึ้นโดยเริ่มตั้งแต่วันที่ 2026-03-01
ส่งคำขอ
GET https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints ?dataSourceFamily=users/me/dataSourceFamilies/self-sources &filter=body_fat.sample_time.physical_time >= "2026-03-01T00:00:00Z" Authorization: Bearer access-token Accept: application/json
คำตอบ
{
"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": ""
}หากต้องการรับสตรีมข้อมูลที่ปรับแล้วจากตระกูลแหล่งข้อมูลที่เฉพาะเจาะจง ให้เรียกใช้
reconcileปลายทางด้วยพารามิเตอร์การค้นหา dataSourceFamily
ตัวอย่างเช่น คำขอ GET ต่อไปนี้จะดึงข้อมูลการนอนหลับที่เครื่องมือติดตามบันทึกไว้สำหรับ วันหลังจากวันที่ 2026-03-03
ส่งคำขอ
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
คำตอบ
{
"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": ""
}หากต้องการรวบรวมจุดข้อมูลในช่วงเวลาที่เฉพาะเจาะจงซึ่งจำกัดไว้สำหรับตระกูลแหล่งข้อมูลหนึ่งๆ ให้เรียกใช้rollUpปลายทางและส่งฟิลด์ dataSourceFamily
ในเนื้อหาคำขอ JSON
คำค้นหาคำขอ POST ต่อไปนี้จะค้นหาจำนวนก้าวเดินระหว่างวันเป็นรายชั่วโมง (3600s) ซึ่งรวบรวมจากอุปกรณ์ที่สวมใส่ได้เท่านั้น
ส่งคำขอ
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"
}คำตอบ
{
"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"
}
}
]
}หากต้องการรวบรวมจุดข้อมูลรายวันสำหรับแหล่งที่มาของครอบครัวที่เฉพาะเจาะจง ให้เรียกใช้
dailyRollUp ปลายทางและส่งฟิลด์ dataSourceFamily ในคำขอ
เนื้อหา
ตัวอย่างเช่น คำขอต่อไปนี้จะคำนวณการสะสมรายวันสำหรับ จำนวนก้าวของผู้ใช้ รวมถึงแหล่งที่มาของ Google และ Fitbit ทั้งหมดที่เป็นบุคคลที่หนึ่ง (อุปกรณ์ที่สวมใส่ได้ + รายการที่ป้อนด้วยตนเอง )
ส่งคำขอ
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"
}คำตอบ
{
"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"
}
}
]
}