এই পৃষ্ঠায় REST API কনভেনশনের ওভারভিউ এবং সাধারণ Google Health API টাস্কের ইনডেক্স ও প্রতিটির উদাহরণ দেওয়া আছে।
REST API কনভেনশন
Google Health API, Google API Improvement Proposals (AIP) স্ট্যান্ডার্ড মেনে চলে, বিশেষ করে AIP-127 (HTTP এবং gRPC ট্রান্সকোডিং) এবং AIP-131 থেকে AIP-135 (স্ট্যান্ডার্ড পদ্ধতি)। এইসব স্ট্যান্ডার্ড নির্ধারণ করে যে কীভাবে ডেটা প্রোটো মেসেজ থেকে HTTP অনুরোধে ম্যাপ করা হয়।
কোয়েরি প্যারামিটার
ডেটা URL-এর অংশ হলে কোয়েরি প্যারামিটার ব্যবহার করা হয়। এটি মূলত
GET অনুরোধ (রিসোর্স ফেচ করা) বা LIST অনুরোধের
(ফিল্টারিং/পৃষ্ঠা সংখ্যা) জন্য, তবে DELETE অপারেশনের জন্যও ব্যবহৃত হয়।
- প্লেসমেন্ট:
?-এর পরে URL-এ যোগ করা হয়। - সিনট্যাক্স:
&দ্বারা আলাদা করা কী-ভ্যালু পেয়ার। - ম্যাপিং: অনুরোধ মেসেজের প্রতিটি ফিল্ড যা URL পাথ টেমপ্লেটের অংশ নয়, সেটি কোয়েরি প্যারামিটারে ম্যাপ করা হয়।
- এর জন্য সবচেয়ে ভালো: সাধারণ ধরন (স্ট্রিং, ইন্ট, enum) এবং পুনরাবৃত্ত ফিল্ড।
ফিল্টার ফর্ম্যাট, ফিল্ড রেফারেন্স, যাচাইকরণ সংক্রান্ত নিয়ম ও উদাহরণের বিস্তারিত তালিকার জন্য, ফিল্টার ডেটা গাইড দেখুন।
সিনট্যাক্সের উদাহরণ:
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"
অনুরোধের বডি
ডেটা কোনও রিসোর্সের অবস্থা পরিবর্তন করলে বা URL-এর জন্য খুব বড় হলে অনুরোধের বডি ব্যবহার করা হয়। বডি সাধারণত রিসোর্সের JSON উপস্থাপনা। সাধারণত POST, PATCH ও PUT অপারেশনের জন্য ব্যবহার করা হয়।
- প্লেসমেন্ট: HTTP পেলোডের মধ্যে (URL-এ দেখা যায় না)।
- সিনট্যাক্স: JSON অবজেক্ট হিসেবে ফর্ম্যাট করা।
- ম্যাপিং:
google.api.httpঅ্যানোটেশনে উল্লেখ করা আছে।body: "*"-এর অর্থ হল, সম্পূর্ণ মেসেজটিই হল বডি।body: "resource_name"-এর অর্থ হল প্রোটোর শুধুমাত্র একটি নির্দিষ্ট ফিল্ড হল বডি।
- যেসব ক্ষেত্রে সবচেয়ে উপযোগী: জটিল অবজেক্ট, নেস্টেড মেসেজ ও সংবেদনশীল ডেটা।
রোলআপ উইন্ডোর সাইজ, বাকেটিং সংক্রান্ত নিয়ম ও অ্যাগ্রিগেশনের উদাহরণ সম্পর্কে বিস্তারিত নির্দেশিকা পেতে, অ্যাগ্রিগেট ডেটা সংক্রান্ত নির্দেশিকা দেখুন।
সিনট্যাক্সের উদাহরণ:
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"
}হাইব্রিড কেস
AIP-134 কমপ্লায়েন্ট Update পদ্ধতি বা PATCH অপারেশনে, দুটিই ব্যবহার করা হয়।
URL-এ রিসোর্সের নাম, বডিতে আপডেট করা রিসোর্স ডেটা এবং কোয়েরি প্যারামিটার (সাধারণত update_mask) থাকে যা কোন ফিল্ড পরিবর্তন করতে হবে তা নির্দিষ্ট করে।
PATCH https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id
Content-Type: application/json
{
"endpointUri": "https://myapp.com/new-webhooks/health"
}
এক নজরে প্রধান পার্থক্য
| ফিচার | কোয়েরি প্যারামিটার | অনুরোধের প্রধান অংশ |
|---|---|---|
| AIP সংক্রান্ত নির্দেশিকা | সার্চ, ফিল্টার ও রিড অপারেশনের জন্য ব্যবহার করা হয়। | রাইট অপারেশনের জন্য ব্যবহার করা হয়। |
| দৃশ্যমানতা | ব্রাউজার ইতিহাস ও সার্ভার লগে দেখা যায়। | URL থেকে লুকানো হয়েছে। |
| জটিলতা | ফ্ল্যাট বা পুনরাবৃত্ত স্ট্রাকচারের মধ্যে সীমাবদ্ধ। | ডিপলি নেস্টেড JSON অবজেক্টে কাজ করে। |
| এনকোডিং | URL-এনকোড করা হতে হবে (যেমন, স্পেস %20 হয়ে যায়)। |
স্ট্যান্ডার্ড JSON এনকোডিং। |
তারিখ
Google Health API-তে সব তারিখ YYYY-MM-DD ফর্ম্যাটে দেখানো হয়। Nutrition API
তারিখের ভ্যালুর জন্য ISO-8601 স্ট্যান্ডার্ডকে নিম্নলিখিত শর্তের সাথে
সমর্থন করে:
- ৪-সংখ্যার বছর
YYYY - বছরের ভ্যালু 0000-9999 রেঞ্জের মধ্যে হতে হবে
- ISO-8601 স্ট্যান্ডার্ড বা অন্য কোনও যুগ দ্বারা আরোপিত শুরুর তারিখের বিধিনিষেধ প্রয়োগ করা হয়নি
হেডার
Google Health API এন্ডপয়েন্ট এক্সিকিউট করার জন্য উপযুক্ত হেডার ও অ্যাক্সেস টোকেন ব্যবহার করতে হয়। GET এবং POST, উভয় অনুরোধের জন্যই নিম্নলিখিত হেডার সাজেস্ট করা হয়:
Authorization: Bearer access-token Accept: application/json
API টাস্ক ইনডেক্স
এই বিভাগে সাধারণ Google Health API টাস্কের একটি ইন্ডেক্স এবং প্রত্যেকটির উদাহরণ দেওয়া হয়েছে।
Fitbit বা Google ব্যবহারকারীর আইডি পান
Google OAuth 2.0-এর মাধ্যমে ব্যবহারকারী সম্মতি দেওয়ার পরে, টোকেন উত্তরে Fitbit বা Google ব্যবহারকারীর আইডি
থাকে না। legacyUserId এবং
healthUserId দুটিই ফিরিয়ে আনতে এবং ব্যবহারকারীর Google অ্যাকাউন্ট Google
Health-এর সাথে লিঙ্ক করা আছে কিনা তা যাচাই করতে, অথরাইজেশন কোড এক্সচেঞ্জ করার ঠিক পরেই
getIdentity এন্ডপয়েন্ট কল করুন। অ্যাকাউন্টটি এখনও লিঙ্ক করা না থাকলে, getIdentity 400 Bad
Request রিটার্ন করে ACCOUNT_NOT_LINKED কারণ সহ (
লিঙ্ক না করা Google অ্যাকাউন্ট ম্যানেজ করুন দেখুন)।
যেমন:
অনুরোধ করুন
GET https://health.googleapis.com/v4/users/me/identity Authorization: Bearer access-token Accept: application/json
উত্তর (২০০ ঠিক আছে)
{
"name": "users/me/identity",
"legacyUserId": "A1B2C3",
"healthUserId": "111111256096816351"
}Response (400 ACCOUNT_NOT_LINKED)
{
"error": {
"code": 400,
"message": "The account is not linked to Google Health.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "ACCOUNT_NOT_LINKED",
"domain": "health.googleapis.com",
"metadata": {
"redirect_uri": "https://fitbit.google.com/auth/signup"
}
}
]
}
}সারাদিন ধরে সংগ্রহ করা ইন্ট্রাডে বা বিস্তারিত ডেটা পান
নির্দিষ্ট ডেটার ধরনের জন্য list
এন্ডপয়েন্ট ব্যবহার করুন যাতে
ডেটার ধরনের জন্য সমর্থিত বিরতিতে সারাদিন ধরে সংগ্রহ করা ইন্ট্রাডে বা বিস্তারিত ডেটা পাওয়া যায়।
যেমন:
অনুরোধ করুন
GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints Authorization: Bearer access-token Accept: application/json
রেসপন্স
{
"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"
}ইন্টারভ্যাল ডেটার রিকনসাইল করা ভিউ পান
ওভারল্যাপ করা রেকর্ড বা মাল্টি-ডিভাইস সংক্রান্ত সমস্যা ছাড়াই ইন্টারভ্যাল ডেটা ফিরিয়ে আনতে,
reconcile
এন্ডপয়েন্ট কল করুন। রিকনসাইল এন্ডপয়েন্ট, সিঙ্ক ব্যাচ ও একাধিক রেকর্ডিং ডিভাইস জুড়ে ওভারল্যাপ করা ইন্টারভ্যাল অটোমেটিক ডিডুপ্লিকেট করে, অ্যাক্টিভিটি টাইমলাইন রেন্ডার করা ও সময়সীমা গণনা করার জন্য উপযুক্ত প্রামাণ্য, একটানা স্ট্রিম ফিরিয়ে দেয়।
কানেক্ট করা ডিভাইস কেন ওভারল্যাপ করা ইন্টারভাল তৈরি করে এবং list ও reconcile-এর মধ্যে অপারেশনাল তুলনা সম্পর্কে জানতে,
ডেটা ম্যানেজমেন্ট গাইড দেখুন।
নিম্নলিখিত উদাহরণে, একজন ব্যবহারকারীর দুটি ওভারল্যাপ করা এক্সারসাইজ সেশনের জন্য
list (যা দুটি ওভারল্যাপ করা রেকর্ডই ফিরিয়ে দেয়) বনাম reconcile (যা অথরিটেটিভ রেকর্ড ফিরিয়ে দিয়ে
সমস্যার সমাধান করে) এর রেসপন্স তুলনা করা হয়েছে:
মূল তালিকা
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints Authorization: Bearer access-token Accept: application/json
{
"dataPoints": [
{
"name": "users/111111256096816351/dataTypes/exercise/dataPoints/7797422996486764704",
"exercise": {
"interval": {
"startTime": "2026-09-03T11:20:00Z",
"endTime": "2026-09-03T11:50:00Z"
},
"exerciseType": "RUNNING"
}
},
{
"name": "users/111111256096816351/dataTypes/exercise/dataPoints/4389052750481144696",
"exercise": {
"interval": {
"startTime": "2026-09-03T11:00:00Z",
"endTime": "2026-09-03T11:30:00Z"
},
"exerciseType": "RUNNING"
}
}
]
}রিকনসাইল করা হয়েছে
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints:reconcile Authorization: Bearer access-token Accept: application/json
{
"dataPoints": [
{
"dataPointName": "users/111111256096816351/dataTypes/exercise/dataPoints/7797422996486764704",
"exercise": {
"interval": {
"startTime": "2026-09-03T11:20:00Z",
"endTime": "2026-09-03T11:50:00Z"
},
"exerciseType": "RUNNING"
}
}
]
}রিকনসিলিয়েশন, ডুপ্লিকেট সরিয়ে দিয়ে এবং কৃত্রিম সময় ইউনিয়ন (যেমন,
11:00:00Z থেকে 11:50:00Z) সিন্থেসাইজ করার পরিবর্তে অথরিটেটিভ রেকর্ড বেছে নেওয়ার মাধ্যমে,
কনফ্লিক্ট হওয়া সেশন সমাধান করে। রিকনসিল করা উত্তর, আসল রেকর্ড করা ইন্টারভ্যাল (11:20:00Z
থেকে 11:50:00Z) সহ উইনিং ডেটা পয়েন্ট (7797422996486764704) ফিরিয়ে দেয়, যা সেই সেশনের পরিমাপ করা টেলিমেট্রি
ও মেট্রিকের ইন্টিগ্রিটি বজায় রাখে।
ডেটা ফিল্টার করুন
সময়ের ব্যবধান, তারিখ বা পর্যবেক্ষণের সময়ের মতো নির্দিষ্ট মানদণ্ডের সাথে মেলে এমন ডেটা পয়েন্ট রেকর্ডের নির্দিষ্ট সাবসেট ফিরিয়ে আনতে,
filter প্যারামিটার সহ list বা reconcile এন্ডপয়েন্ট
ব্যবহার করুন।
বিস্তারিত নির্দেশিকা, ফর্ম্যাটিং সংক্রান্ত নিয়ম, যাচাইকরণ সংক্রান্ত সমস্যা ও কোয়েরির উদাহরণ দেখতে, ডেটা ফিল্টার করা সংক্রান্ত নির্দেশিকা দেখুন।
ডেটা সোর্স ফ্যামিলি অনুযায়ী ফিল্টার করুন
নির্দিষ্ট ধরনের সোর্স থেকে ডেটা আলাদা বা একত্রিত করতে (যেমন,
শারীরিক পরিধানযোগ্য ডিভাইস বনাম ম্যানুয়াল এন্ট্রি), dataSourceFamily
প্যারামিটার ব্যবহার করুন।
reconcile, rollUp ও dailyRollUp-এর জন্য বিস্তারিত নির্দেশিকা, কাজ করে এমন ফ্যামিলি এবং অনুরোধ ও উত্তরের উদাহরণ দেখতে,
ডেটা ফিল্টার করার গাইডে
ডেটা সোর্স ফ্যামিলি অনুযায়ী ফিল্টার করুন
বিকল্প দেখুন।
ইন্টারভ্যাল সিভিল শুরুর সময় অনুযায়ী ডেটা ফিল্টার করুন
সিভিল টাইম বা ইন্টারভ্যাল অনুযায়ী ডেটা ফিল্টার করতে filter প্যারামিটার সহ list এন্ডপয়েন্ট ব্যবহার করুন।
যেমন:
অনুরোধ করুন
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
রেসপন্স
{
"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"
}স্যাম্পেল পর্যবেক্ষণের ফিজিক্যাল টাইম অনুযায়ী ডেটা ফিল্টার করুন
স্যাম্পেল পর্যবেক্ষণ করার ফিজিক্যাল সময় অনুযায়ী ডেটা ফিল্টার করতে, filter প্যারামিটার সহ list এন্ডপয়েন্ট ব্যবহার করুন।
যেমন:
অনুরোধ করুন
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
রেসপন্স
{
"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, rollUp এবং dailyRollUp এন্ডপয়েন্ট, dataSourceFamily প্যারামিটারকে
সাপোর্ট করে। পাসিং মেকানিজম এন্ডপয়েন্টের উপর নির্ভর করে:
| এন্ডপয়েন্ট (HTTP পদ্ধতি) | পদ্ধতি |
|---|---|
reconcile (GET) |
URL কোয়েরি প্যারামিটার হিসেবে dataSourceFamily পাস করুন। |
rollUp (POST) |
JSON অনুরোধের বডিতে ফিল্ড হিসেবে dataSourceFamily পাস করুন। |
dailyRollUp (POST) |
JSON অনুরোধের বডিতে ফিল্ড হিসেবে dataSourceFamily পাস করুন। |
কাজ করে এমন ডেটা সোর্স ফ্যামিলি
নিচের সারণীতে কাজ করে এমন dataSourceFamily ভ্যালু বর্ণনা করা হয়েছে:
| Option | বিবরণ |
|---|---|
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) মাধ্যমে ম্যানুয়ালি করা যেকোনও এন্ট্রি। |
নির্দিষ্ট ডেটা সোর্স ফ্যামিলি থেকে রিকনসাইল করা ডেটা স্ট্রিম পেতে, dataSourceFamily কোয়েরি প্যারামিটার সহ
reconcile এন্ডপয়েন্ট কল করুন।
যেমন, নিম্নলিখিত GET অনুরোধটি ২০২৬-০৩-০৩ তারিখের পরের দিনের জন্য ট্র্যাকার-রেকর্ড করা ঘুমের ডেটা নিয়ে আসে:
অনুরোধ করুন
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 এন্ডপয়েন্ট কল করুন এবং JSON অনুরোধের বডিতে dataSourceFamily
ফিল্ড পাস করুন।
নিম্নলিখিত 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"
}
}
]
}একটি নির্দিষ্ট সময়সীমার মধ্যে ডেটা পয়েন্ট এগ্রিগেট করা
ব্যবহারকারীর ফিজিক্যাল টাইমে (UTC-তে) datetime রেঞ্জ জুড়ে
সেকেন্ডে (windowSize) উইন্ডোর উপর ভিত্তি করে ডেটা পয়েন্টের
মোট সংখ্যা রিটার্ন করতে rollUp
এন্ডপয়েন্ট ব্যবহার করুন।
rollUp এন্ডপয়েন্ট কল করার সময়, প্রয়োজনীয় বন্ধ-খোলা সময় range এবং windowSize (অন্তত "1s") উল্লেখ করে রিকোয়েস্ট বডি প্রদান করুন। windowSize-এর প্রয়োজনীয়তা, স্টোরেজ রেজোলিউশন অ্যালাইনমেন্ট, বাকেটিং নিয়ম এবং অনুরোধ ও উত্তরের উদাহরণের বিস্তারিত নির্দেশিকার জন্য, মোট ডেটা গাইডে ফিজিক্যাল সময় বিরতিতে মোট ডেটা দেখুন।
এক বা একাধিক দিনের ডেটা একত্রিত করা
এক বা একাধিক দিনের (windowSizeDays) ডেটা
একত্রিত করতে dailyRollUp
এন্ডপয়েন্ট ব্যবহার করুন। অনুরোধের বডিতে প্রয়োজনীয়
সময়ের ব্যবধানের জন্য ক্লোজড-ওপেন সিভিল টাইম range
প্রদান করুন। ডেটার ধরনের উপর নির্ভর করে, এন্ডপয়েন্ট প্রতিটি উইন্ডোর যোগফল বা গড়
দেখায়।
দৈনিক অ্যাগ্রিগেশন আচরণ, সিভিল টাইম ম্যানেজ করা, অনুরোধ প্রতি রেঞ্জ সীমা এবং অনুরোধ ও উত্তরের উদাহরণের ব্যাপারে বিস্তারিত জানতে, অ্যাগ্রিগেট ডেটা গাইডে ক্যালেন্ডার দিন জুড়ে অ্যাগ্রিগেট করুন দেখুন।
ব্যবহারকারীর স্বাস্থ্য সংক্রান্ত ডেটা আপডেট করুন
ব্যবহারকারীর স্বাস্থ্য ডেটা আপডেট করতে
patch এন্ডপয়েন্ট
ব্যবহার করুন।
patch এন্ডপয়েন্ট অনুরোধের URL-এ উল্লেখ করা আইডেন্টিফায়ারের ভিত্তিতে
আগে থেকে থাকা রেকর্ড আপডেট করে। আগে যোগ করা ডেটা পয়েন্টের
আইডেন্টিফায়ার প্রদান করুন। API আগে থেকে থাকা রেকর্ড ওভাররাইট করে।
ডেটা পয়েন্টের ইন্টারভ্যাল টাইমস্ট্যাম্পও (startTime এবং endTime)
রেকর্ডের মালিক আপডেট করতে পারেন অথবা Health Connect-এর মতো আপস্ট্রিম প্ল্যাটফর্ম থেকে
প্রোপাগেট করা হতে পারে। টাইমস্ট্যাম্প পরিবর্তনযোগ্যতা সম্পর্কে আরও জানতে,
ডেটা ম্যানেজমেন্ট গাইড দেখুন। আপডেট করার ইন্টারভ্যাল টাইমস্ট্যাম্পের উদাহরণ দেখতে,
আগে থেকে থাকা ডেটার জন্য ইন্টারভ্যাল টাইমস্ট্যাম্প আপডেট করুন বিকল্প দেখুন।
ডেটা পয়েন্ট শনাক্তকারী কখন ব্যবহার করতে হবে
নিম্নলিখিত পরিস্থিতিতে ডেটা পয়েন্ট শনাক্তকারী আবশ্যক:
- টার্গেট করা আপডেট: নির্দিষ্ট কোনও পরিমাপ আপডেট করতে,
patchঅনুরোধে সেটির শনাক্তকারী প্রদান করুন। - মুছে ফেলা: আইডেন্টিফায়ার রেখে দিলে, আপনার অ্যাপ্লিকেশনকে
batchDeleteএন্ডপয়েন্ট ব্যবহার করে পরে রেকর্ড মুছে ফেলার অনুমতি দেয়।
এখানে একটি উদাহরণ দেওয়া হল যেখানে একজন ব্যবহারকারী "Scales R Us" কোম্পানির "HumanScale" নামক স্কেলে তার শরীরের ফ্যাট রিডিং আপডেট করেন। ব্যবহারকারীর নতুন শরীরের ফ্যাট রিডিং হল ২০% যা ২০২৬-০৩-১০ তারিখের জন্য:
অনুরোধ করুন
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
}
}রেসপন্স
{
"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
}
}
}আগে থেকে থাকা ডেটার জন্য ইন্টারভ্যাল টাইমস্ট্যাম্প আপডেট করুন
আগে থেকে থাকা ডেটা পয়েন্টের ইন্টারভ্যাল টাইমস্ট্যাম্প (REST JSON পেলোডে startTime এবং endTime, অথবা gRPC-তে start_time এবং end_time) আপডেট করতে,
ডেটা পয়েন্টের রিসোর্স URI-তে PATCH অনুরোধ পাঠান। কোনও রেকর্ডের আসল
ক্রিয়েটর বা মালিকই শুধু সেটির ফিল্ড পরিবর্তন করতে পারবেন। অ্যাপ্লিকেশনগুলি ডেটা পয়েন্টগুলি সম্পাদনা করতে পারে না
তারা তৈরি করেনি।
টাইমস্ট্যাম্পের পরিবর্তনশীলতা, Health Connect থেকে আপস্ট্রিম আপডেট এবং ক্যাশিংয়ের প্রভাব সম্পর্কে আরও জানতে, ডেটা ম্যানেজমেন্ট গাইড দেখুন।
নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে কীভাবে মালিকের অ্যাপ্লিকেশন patch এন্ডপয়েন্ট ব্যবহার করে আগে থেকে থাকা হাইড্রেশন লগের ইন্টারভ্যাল টাইমস্ট্যাম্প আপডেট করে:
অনুরোধ করুন
PATCH https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints/4093039283164890826
Authorization: Bearer access-token
Content-Type: application/json
{
"hydrationLog": {
"interval": {
"startTime": "2026-09-03T10:05:00Z",
"endTime": "2026-09-03T10:19:59Z"
},
"amountConsumed": {
"milliliters": 350
}
}
}রেসপন্স
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/111111256096816351/dataTypes/hydration-log/dataPoints/4093039283164890826",
"hydrationLog": {
"interval": {
"startTime": "2026-09-03T10:05:00Z",
"endTime": "2026-09-03T10:19:59Z",
"civilStartTime": {
"date": {
"year": 2026,
"month": 9,
"day": 3
},
"time": {
"hours": 10,
"minutes": 5
}
},
"civilEndTime": {
"date": {
"year": 2026,
"month": 9,
"day": 3
},
"time": {
"hours": 10,
"minutes": 19,
"seconds": 59
}
}
},
"amountConsumed": {
"milliliters": 350
}
}
}
}খাবারের আইটেম লগ করুন
খাবারের আইটেম লগ করতে, nutrition-log dataPoints
এন্ডপয়েন্টে POST অনুরোধ পাঠান। অনুরোধের প্রধান অংশে nutritionLog অবজেক্ট সহ DataPoint আছে।
আরও তথ্যের জন্য, পুষ্টি সংক্রান্ত নির্দেশিকা দেখুন।
যেমন:
অনুরোধ করুন
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
}
}
}রেসপন্স
{
"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"
}
}
}ব্যবহারকারীর হেল্থ ডেটা মুছে দিন
ব্যবহারকারীর Fitbit অ্যাপ ডেটার
অ্যারে মুছে ফেলতে batchDelete
পদ্ধতি ব্যবহার করুন।
এখানে একটি উদাহরণ দেওয়া হল যেখানে ব্যবহারকারী আগে স্কেলে তার শরীরের ফ্যাট রেকর্ড করেছেন, কিন্তু তিনি রেকর্ডটি মুছে ফেলতে চান। আসল ইনসার্ট অ্যাকশন থেকে user-id এবং data-point-id ব্যবহার করে:
অনুরোধ করুন
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"
]
}রেসপন্স
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4main.BatchDeleteDataPointsResponse"
}
}ডিভাইসের তথ্য খুঁজুন
ব্যবহারকারীর অ্যাকাউন্টের সাথে পেয়ার করা ডিভাইসের তালিকা পেতে
list এন্ডপয়েন্ট ব্যবহার করুন। এর মধ্যে ডিভাইসের মডেল সংক্রান্ত তথ্য (deviceVersion) এবং Google Health মোবাইল অ্যাপের (lastSyncTime) সাথে শেষবার সিঙ্ক করার সময় অন্তর্ভুক্ত।
তালিকার কনফিগারেশন ও সিঙ্ক সংক্রান্ত তথ্য সিঙ্ক করার সমস্যা সমাধান করতে অথবা শেষবার সিঙ্ক করার সময় থেকে পুরনো ডেটা নিয়ে আসার জন্য উপযোগী।
যেমন:
অনুরোধ করুন
GET https://health.googleapis.com/v4/users/me/pairedDevices Authorization: Bearer access-token Accept: application/json
রেসপন্স
{
"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"
]
}
]
}ঐতিহাসিক ডেটা কোয়েরি করুন
Google Health API-এর অন্যতম প্রধান সুবিধা হল, এটি ব্যবহারকারীর পারফর্ম্যান্স ট্র্যাক করতে এবং দীর্ঘ সময় ধরে তার স্বাস্থ্যের গুরুত্বপূর্ণ প্যারামিটারগুলি পর্যবেক্ষণ করতে পারে। আপনি কোনও ব্যবহারকারীর ডেটা রেকর্ড করা শুরু হওয়ার সময় থেকে শুরু করে যেকোনও সময় পর্যন্ত কোয়েরি করতে পারবেন; আপনার অ্যাপ্লিকেশন কতটা পুরনো ডেটা ব্যবহার করতে পারবে তার উপর API কোনও সীমা বা বিধিনিষেধ আরোপ করে না।
তবে, পুরনো ডেটা কোয়েরি করার ক্ষেত্রে এখনও স্ট্যান্ডার্ড রেট লিমিট প্রযোজ্য। সিস্টেমের স্থায়িত্ব ম্যানেজ করতে এবং অতিরিক্ত পেলোড প্রতিরোধ করতে, Google Health API এন্ডপয়েন্ট-নির্দিষ্ট পৃষ্ঠার আকারের সাথে অটোমেটিক পৃষ্ঠা সংখ্যা ব্যবহার করে। নিম্নলিখিত সীমা ও আচরণ লক্ষ্য করুন:
- অটোমেটিক পৃষ্ঠা সংখ্যা: আপনি যদি ডেটার একটি দীর্ঘ স্প্যান কোয়েরি করেন, তাহলে
API শুধুমাত্র সেই এন্ডপয়েন্টের জন্য পৃষ্ঠা সাইজ ক্যাপ পর্যন্ত ফলাফলের প্রথম পৃষ্ঠাটি ফিরিয়ে দেবে, সাথে একটি
nextPageToken। পরবর্তী পৃষ্ঠাগুলির জন্য অনুরোধ করতে আপনাকে অবশ্যইnextPageTokenব্যবহার করতে হবে। - পরিবর্তনশীল পৃষ্ঠার সাইজ: এন্ডপয়েন্ট ও ডেটার ধরনের উপর
ক্যাপিং সীমা নির্ভর করে। অধিকাংশ ডেটার ধরনের জন্য, পৃষ্ঠার সাইজ সর্বাধিক ১০,০০০-এ সীমাবদ্ধ করা হয়েছে।
তবে,
exerciseএবংsleep-এর মতো নির্দিষ্ট ডেটার ধরনের জন্য, ডিফল্ট এবং সর্বাধিক পৃষ্ঠার সাইজ ২৫-এ সীমাবদ্ধ। যেমন, কোনও ক্লায়েন্ট যদি গত ১০ বছরের ঘুমের সব ডেটার জন্য অনুরোধ করে, তাহলেও API প্রথম পৃষ্ঠায় মাত্র ২৫টি ঘুমের সেশন ফেরত পাঠাবে। - রোলআপ তারিখের রেঞ্জের উপর বিধিনিষেধ: ডেটা রোলআপ এবং অ্যাগ্রিগেশন এন্ডপয়েন্টের জন্য
(যেমন
rollUpএবংdailyRollUp), ডেটার ধরনের উপর ভিত্তি করে কোয়েরি তারিখের রেঞ্জের উপর বিধিনিষেধ আরোপ করা হয়:calories-in-heart-rate-zone,heart-rate,active-minutesওtotal-calories-এর জন্য সর্বাধিক ১৪ দিনের রেঞ্জ।- অন্যান্য সব রোল-আপ ডেটার ধরনের জন্য সর্বাধিক ৯০ দিনের রেঞ্জ।
আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ঐতিহাসিক ডেটার পরিমাণের উপর নির্ভর করে, সম্পূর্ণ ডেটাসেট পুনরুদ্ধার করতে পৃষ্ঠাগুলির মাধ্যমে ক্রমানুসারে পৃষ্ঠা সংখ্যা নির্ধারণ করতে হবে। আপনার অ্যাপ্লিকেশনের ডেটা সিঙ্ক করার প্রসেস ডিজাইন করার সময় এটি মনে রাখবেন।
সেরা পারফর্ম্যান্স নিশ্চিত করতে এবং API সংক্রান্ত সমস্যা এড়াতে, পুরনো ডেটা কোয়েরি করার সময় এইসব নির্দেশিকা অনুসরণ করুন:
পর্যায়ক্রমে ডেটা সিঙ্ক (হট বনাম কোল্ড লোড)
- প্রাথমিক "হট" লোড: প্রাথমিক লোড সিকোয়েন্সের সময় শুধু সবচেয়ে সাম্প্রতিক ৭–১৪ দিনের ডেটা ফেচ ও রেন্ডার করুন। এর ফলে ব্যবহারকারীরা দীর্ঘ সময় ধরে চলা কোয়েরির জন্য অপেক্ষা না করেই অবিলম্বে ডেটা দেখতে পাবেন।
- ব্যাকগ্রাউন্ড "কোল্ড" লোড: প্রাইমারি UI রেন্ডার করার পরে অ্যাসিঙ্ক্রোনাস, কম-অগ্রাধিকারের সারি বা ব্যাকগ্রাউন্ড প্রসেসে পুরনো ঐতিহাসিক ডেটা ফিরিয়ে আনার কাজ ডেলিগেট করুন।
এগ্রিগেশনের জন্য কোয়েরি চাঙ্কিং
- রোলআপ এবং দৈনিক রোলআপ এন্ডপয়েন্টগুলি সর্বাধিক তারিখের রেঞ্জের সীমা (ডেটার ধরনের উপর নির্ভর করে ১৪ বা ৯০ দিন) প্রয়োগ করে, তাই আপনাকে অবশ্যই এই সীমার মধ্যে বড় ঐতিহাসিক অ্যাগ্রিগেশন কোয়েরিগুলিকে ছোট, ক্রমিক বিরতিতে ভাগ করতে হবে।
- কনকারেন্সি সীমা মেনে চলতে এবং UI প্রগ্রেস ইন্ডিকেটর স্থির রাখতে এই সাব-কোয়েরিগুলি নিরাপদে ব্যাচ বা সিকোয়েন্স করুন।
আগে থেকে অ্যাগ্রিগেট করা রোল-আপের সুবিধা নিন
প্রি-অ্যাগ্রিগেটেড, সামারি এন্ডপয়েন্ট (যেমন DailyRollUpDataPoints) ব্যবহার করার জন্য ওভারভিউ ড্যাশবোর্ড ও ট্রেন্ড চার্ট রিস্ট্রাকচার করুন। এর ফলে, ব্যাকএন্ডে কম্পিউট ওভারহেড ও ক্লায়েন্টে নেটওয়ার্ক ট্রান্সফার টাইম অনেক কমে যাবে।
সমস্যা ম্যানেজ করার ক্ষেত্রে স্থিতিস্থাপকতা (স্মার্ট রিট্রাই)
- রেট লিমিট (
429 Too Many Requests) এবং সার্ভার গেটওয়ে টাইমআউট (504 Gateway Timeout) সংক্রান্ত সমস্যার সম্মুখীন হলে, স্ট্রিক্ট এক্সপোনেনশিয়াল ব্যাকঅফ হ্যান্ডলিং প্রয়োগ করুন। বড়, ব্যর্থ পে-লোড অবিলম্বে আবার চেষ্টা করবেন না। তৎক্ষণাৎ আবার চেষ্টা করলে ব্যাকএন্ডে কনজেশন বেড়ে যায় এবং সিস্টেমের পারফর্ম্যান্স খারাপ হয়।