এন্ডপয়েন্ট, এন্ডপয়েন্ট, এন্ডপয়েন্ট

এই পৃষ্ঠায় REST API-এর প্রচলিত নিয়মাবলীর একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে, সাথে রয়েছে Google Health API-এর সাধারণ কাজগুলোর একটি সূচী এবং প্রতিটির উদাহরণ।

REST API কনভেনশন

গুগল হেলথ এপিআই, গুগল এপিআই ইমপ্রুভমেন্ট প্রপোজালস (এআইপি) স্ট্যান্ডার্ডগুলো অনুসরণ করে, বিশেষত এআইপি-১২৭ (এইচটিটিপি এবং জিআরপিসি ট্রান্সকোডিং) এবং এআইপি-১৩১ থেকে এআইপি-১৩৫ (স্ট্যান্ডার্ড মেথডস)। এই স্ট্যান্ডার্ডগুলো সংজ্ঞায়িত করে যে, কীভাবে একটি প্রোটো মেসেজ থেকে একটি এইচটিটিপি রিকোয়েস্টে ডেটা ম্যাপ করা হয়।

কোয়েরি প্যারামিটার

যখন ডেটা URL-এর অংশ হয়, তখন কোয়েরি প্যারামিটার ব্যবহার করা হয়। এটি প্রধানত GET রিকোয়েস্ট (কোনো রিসোর্স ফেচ করা) বা LIST রিকোয়েস্ট (ফিল্টারিং/পেজিনেশন)-এর জন্য ব্যবহৃত হয়, তবে DELETE অপারেশনের জন্যও এটি ব্যবহার করা হয়ে থাকে।

  • অবস্থান : URL-এর শেষে ? চিহ্নের পর যুক্ত করা হয়।
  • সিনট্যাক্স : কী-ভ্যালু জোড়া & দ্বারা পৃথক করা থাকে।
  • ম্যাপিং : অনুরোধ বার্তার প্রতিটি ফিল্ড, যা ইউআরএল পাথ টেমপ্লেটের অংশ নয়, একটি কোয়েরি প্যারামিটারের সাথে ম্যাপ করা হয়।
  • এর জন্য সেরা : সরল টাইপ (স্ট্রিং, ইন্ট, এনাম) এবং পুনরাবৃত্ত ফিল্ড।

উদাহরণ সিনট্যাক্স:

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

এক নজরে মূল পার্থক্যসমূহ

বৈশিষ্ট্য কোয়েরি প্যারামিটার অনুরোধের মূল অংশ
এআইপি নির্দেশিকা অনুসন্ধান, ফিল্টারিং এবং পঠন কার্যক্রমের জন্য ব্যবহৃত হয়। লেখার কাজের জন্য ব্যবহৃত হয়।
দৃশ্যমানতা ব্রাউজার হিস্ট্রি এবং সার্ভার লগে দেখা যায়। ইউআরএল থেকে লুকানো।
জটিলতা সমতল বা পুনরাবৃত্ত কাঠামোর মধ্যে সীমাবদ্ধ। গভীরভাবে নেস্টেড JSON অবজেক্ট সমর্থন করে।
এনকোডিং অবশ্যই URL-এনকোড করতে হবে (উদাহরণস্বরূপ, স্পেস %20 হয়ে যাবে)। স্ট্যান্ডার্ড JSON এনকোডিং।

তারিখ

গুগল হেলথ এপিআই-তে সমস্ত তারিখ YYYY-MM-DD ফরম্যাটে প্রদর্শিত হয়। নিউট্রিশন এপিআই নিম্নলিখিত শর্ত সাপেক্ষে তারিখের মানের জন্য ISO-8601 স্ট্যান্ডার্ড সমর্থন করে:

  • চার অঙ্কের বছর YYYY
  • ০০০০-৯৯৯৯ পরিসরের মধ্যে থাকা বছরের মান
  • ISO-8601 স্ট্যান্ডার্ড বা অন্য কোনো যুগ দ্বারা আরোপিত শুরুর তারিখের বিধিনিষেধের কোনো প্রয়োগ নেই।

হেডার

গুগল হেলথ এপিআই এন্ডপয়েন্টগুলো কার্যকর করার জন্য উপযুক্ত হেডার এবং অ্যাক্সেস টোকেন ব্যবহার করা প্রয়োজন। GET এবং POST উভয় অনুরোধের জন্য নিম্নলিখিত হেডারটি ব্যবহার করার পরামর্শ দেওয়া হয়:

Authorization: Bearer access-token
Accept: application/json

এপিআই টাস্ক সূচক

এই বিভাগে গুগল হেলথ এপিআই-এর সাধারণ কাজগুলোর একটি সূচি এবং প্রতিটির উদাহরণ দেওয়া হয়েছে।

Fitbit বা Google ইউজার আইডি সংগ্রহ করুন

কোনো ব্যবহারকারী Google OAuth 2.0-এর মাধ্যমে সম্মতি দেওয়ার পর, টোকেন রেসপন্সে Fitbit বা Google ইউজার আইডি থাকে না। ইউজার আইডি পেতে, getIdentity এন্ডপয়েন্টটি কল করুন। getIdentity Fitbit লিগ্যাসি ইউজার আইডি এবং Google ইউজার আইডি উভয়ই রিটার্ন করে।

আমরা সুপারিশ করি যে, কোনো নতুন ব্যবহারকারী OAuth-এর মাধ্যমে সম্মতি দেওয়ার সাথে সাথেই আপনি getIdentity এন্ডপয়েন্টটি কল করে উভয় ইউজার আইডি সংরক্ষণ করুন। এটি আপনার ইন্টিগ্রেশনে ব্যাকওয়ার্ড এবং ফরোয়ার্ড কম্প্যাটিবিলিটি নিশ্চিত করে।

উদাহরণস্বরূপ:

অনুরোধ

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

প্রতিক্রিয়া

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

সারাদিন ধরে সংগৃহীত ইন্ট্রাডে বা বিস্তারিত ডেটা পান।

একটি নির্দিষ্ট ডেটা টাইপের জন্য সমর্থিত বিরতিতে দিনব্যাপী সংগৃহীত ইন্ট্রাডে বা বিস্তারিত ডেটা পেতে, সেই ডেটা টাইপের 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"
}

একটি নির্দিষ্ট সময় অন্তর সিভিল শুরুর সময় অনুযায়ী ডেটা ফিল্টার করুন

সিভিল টাইম বা কোনো ব্যবধান অনুযায়ী ডেটা ফিল্টার করতে 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/2515055256096816351/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 এন্ডপয়েন্টটি ব্যবহার করুন।

এখানে ২০২৬-০৩-০৩ তারিখের পরের দিনের জন্য শুধুমাত্র ট্র্যাকারে রেকর্ড করা ঘুম ফিল্টার করার একটি উদাহরণ দেওয়া হলো:

অনুরোধ

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

একটি নির্দিষ্ট সময়সীমার মধ্যে ডেটা পয়েন্টগুলিকে একত্রিত করুন

ব্যবহারকারীর ভৌত সময় (UTC-তে) অনুযায়ী datetime পরিসরের মধ্যে, সেকেন্ডে একটি উইন্ডোতে ডেটা পয়েন্টগুলোর সমষ্টি ফেরত পেতে rollUp এন্ডপয়েন্টটি ব্যবহার করুন।

rollUp এন্ডপয়েন্টটি কল করার সময়, আপনাকে অবশ্যই ব্যবহারকারীর সিভিল টাইম অনুযায়ী প্রয়োজনীয় তারিখের পরিসর উল্লেখ করে রিকোয়েস্ট বডি প্রদান করতে হবে। উদাহরণস্বরূপ:

অনুরোধ

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

প্রতিক্রিয়া

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

একদিন বা একাধিক দিনের ডেটা একত্রিত করুন

যখন আপনি একটি একক দিন বা একাধিক দিনের (যা windowSize নামে পরিচিত) ডেটা একত্রিত করতে চান, তখন dailyRollUp এন্ডপয়েন্টটি ব্যবহার করা উচিত। অনুরোধের বডিতে প্রয়োজনীয় ব্যবধানের জন্য বন্ধ-খোলা বেসামরিক সময়সীমা প্রদান করুন। ডেটার ধরনের উপর নির্ভর করে, আপনি উক্ত ব্যবধানের যোগফল বা গড় পাবেন।

উদাহরণস্বরূপ:

অনুরোধ

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
}

প্রতিক্রিয়া

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

ব্যবহারকারীর স্বাস্থ্য তথ্য প্রবেশ করান বা আপডেট করুন

ব্যবহারকারীর Fitbit অ্যাপের ডেটা যোগ বা আপডেট করতে patch এন্ডপয়েন্ট ব্যবহার করুন।

এখানে একটি উদাহরণ দেওয়া হল যেখানে একজন ব্যবহারকারী 'স্কেলস আর আস' কোম্পানির 'হিউম্যানস্কেল' নামক একটি স্কেলে তার শরীরের চর্বির পরিমাণ রেকর্ড করেছেন। ২০২৬-০৩-১০ তারিখে ব্যবহারকারীর শরীরের চর্বির নতুন পরিমাপ হল ২০%।

অনুরোধ

PATCH https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints/1234567890
Authorization: Bearer access-token
content-length: 329

{
  "name": "bodyFatName",
  "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/2515055256096816351/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
    }
  }
}

ব্যবহারকারীর স্বাস্থ্য তথ্য মুছে ফেলুন

কোনো ব্যবহারকারীর 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/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890"
  ]
}

প্রতিক্রিয়া

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