{
  "mtlsRootUrl": "https://health.mtls.googleapis.com/",
  "parameters": {
    "fields": {
      "description": "Selector specifying which fields to include in a partial response.",
      "type": "string",
      "location": "query"
    },
    "key": {
      "type": "string",
      "location": "query",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
    },
    "access_token": {
      "type": "string",
      "location": "query",
      "description": "OAuth access token."
    },
    "prettyPrint": {
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "type": "boolean",
      "location": "query"
    },
    "alt": {
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "default": "json",
      "type": "string",
      "location": "query",
      "description": "Data format for response."
    },
    "$.xgafv": {
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "enum": [
        "1",
        "2"
      ],
      "description": "V1 error format.",
      "type": "string",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "location": "query",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
    },
    "upload_protocol": {
      "type": "string",
      "location": "query",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
    },
    "callback": {
      "type": "string",
      "location": "query",
      "description": "JSONP"
    },
    "oauth_token": {
      "description": "OAuth 2.0 token for the current user.",
      "type": "string",
      "location": "query"
    },
    "quotaUser": {
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "type": "string",
      "location": "query"
    }
  },
  "discoveryVersion": "v1",
  "version_module": true,
  "schemas": {
    "BatchDeleteDataPointsRequest": {
      "description": "Request to delete a batch of identifiable data points.",
      "type": "object",
      "id": "BatchDeleteDataPointsRequest",
      "properties": {
        "names": {
          "type": "array",
          "description": "Required. The names of the DataPoints to delete. A maximum of 10000 data points can be deleted in a single request.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "TotalCaloriesRollupValue": {
      "id": "TotalCaloriesRollupValue",
      "properties": {
        "kcalSum": {
          "description": "Sum of the total calories in kilocalories.",
          "type": "number",
          "format": "double"
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the user's total calories."
    },
    "TimeInHeartRateZones": {
      "id": "TimeInHeartRateZones",
      "properties": {
        "lightTime": {
          "description": "Optional. Time spent in light heart rate zone.",
          "type": "string",
          "format": "google-duration"
        },
        "peakTime": {
          "description": "Optional. Time spent in peak heart rate zone.",
          "type": "string",
          "format": "google-duration"
        },
        "moderateTime": {
          "type": "string",
          "format": "google-duration",
          "description": "Optional. Time spent in moderate heart rate zone."
        },
        "vigorousTime": {
          "description": "Optional. Time spent in vigorous heart rate zone.",
          "type": "string",
          "format": "google-duration"
        }
      },
      "type": "object",
      "description": "Time spent in each heart rate zone."
    },
    "TimeInHeartRateZone": {
      "type": "object",
      "description": "Time in heart rate zone record. It's an interval spent in specific heart rate zone.",
      "id": "TimeInHeartRateZone",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        },
        "heartRateZoneType": {
          "type": "string",
          "enum": [
            "HEART_RATE_ZONE_TYPE_UNSPECIFIED",
            "LIGHT",
            "MODERATE",
            "VIGOROUS",
            "PEAK"
          ],
          "description": "Required. Heart rate zone type.",
          "enumDescriptions": [
            "Unspecified heart rate zone.",
            "The light heart rate zone.",
            "The moderate heart rate zone.",
            "The vigorous heart rate zone.",
            "The peak heart rate zone."
          ]
        }
      }
    },
    "CreateSubscriberPayload": {
      "type": "object",
      "description": "Payload for creating a subscriber.",
      "id": "CreateSubscriberPayload",
      "properties": {
        "subscriberConfigs": {
          "description": "Optional. Configuration for the subscriber.",
          "items": {
            "$ref": "SubscriberConfig"
          },
          "type": "array"
        },
        "endpointUri": {
          "description": "Required. The full HTTPS URI where update notifications will be sent. The URI must be a valid URL and use HTTPS as the scheme. This endpoint will be verified during the `CreateSubscriber` call. See CreateSubscriber RPC documentation for verification details.",
          "type": "string"
        },
        "endpointAuthorization": {
          "description": "Required. Authorization mechanism for the subscriber endpoint. The `secret` within this message is crucial for endpoint verification and for securing webhook notifications.",
          "$ref": "EndpointAuthorization"
        }
      }
    },
    "Operation": {
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "type": "object",
      "id": "Operation",
      "properties": {
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "Status"
        },
        "response": {
          "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          }
        },
        "name": {
          "type": "string",
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
        },
        "done": {
          "type": "boolean",
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
        },
        "metadata": {
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        }
      }
    },
    "ActiveMinutes": {
      "description": "Record of active minutes in a given time interval.",
      "type": "object",
      "id": "ActiveMinutes",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        },
        "activeMinutesByActivityLevel": {
          "description": "Required. Active minutes by activity level. At most one record per activity level is allowed.",
          "items": {
            "$ref": "ActiveMinutesByActivityLevel"
          },
          "type": "array"
        }
      }
    },
    "SleepMetadata": {
      "id": "SleepMetadata",
      "properties": {
        "stagesStatus": {
          "enum": [
            "STAGES_STATE_UNSPECIFIED",
            "REJECTED_COVERAGE",
            "REJECTED_MAX_GAP",
            "REJECTED_START_GAP",
            "REJECTED_END_GAP",
            "REJECTED_NAP",
            "REJECTED_SERVER",
            "TIMEOUT",
            "SUCCEEDED",
            "PROCESSING_INTERNAL_ERROR"
          ],
          "enumDescriptions": [
            "Output only. Sleep stages status is unspecified.",
            "Output only. Sleep stages cannot be computed due to low RR coverage.",
            "Output only. Sleep stages cannot be computed due to the large middle gap (2h).",
            "Output only. Sleep stages cannot be computed due to the large start gap (1h).",
            "Output only. Sleep stages cannot be computed due to the large end gap (1h).",
            "Output only. Sleep stages cannot be computed because the sleep log is a nap (has \u003c 3h duration).",
            "Output only. Sleep stages cannot be computed because input data is not available (PPGV2, wake magnitude, etc).",
            "Output only. Sleep stages cannot be computed due to server timeout.",
            "Output only. Sleep stages successfully computed.",
            "Output only. Sleep stages cannot be computed due to server internal error."
          ],
          "description": "Output only. Sleep stages algorithm processing status.",
          "readOnly": true,
          "type": "string"
        },
        "processed": {
          "readOnly": true,
          "type": "boolean",
          "description": "Output only. Sleep and sleep stages algorithms finished processing."
        },
        "nap": {
          "readOnly": true,
          "type": "boolean",
          "description": "Output only. Naps are sleeps without stages and relatively short durations."
        },
        "manuallyEdited": {
          "description": "Output only. Some sleeps autodetected by algorithms can be manually edited by users.",
          "readOnly": true,
          "type": "boolean"
        },
        "externalId": {
          "type": "string",
          "description": "Optional. Sleep identifier relevant in the context of the data source."
        }
      },
      "description": "Additional information about how the sleep was processed.",
      "type": "object"
    },
    "DataSource": {
      "type": "object",
      "description": "Data Source definition to track the origin of data. Each health data point, regardless of the complexity or data model (whether a simple step count or a detailed sleep session) must retain information about its source of origin (e.g. the device or app that collected it).",
      "id": "DataSource",
      "properties": {
        "device": {
          "description": "Optional. Captures metadata for raw data points originating from devices. We expect this data source to be used for data points written on device sync.",
          "$ref": "Device"
        },
        "recordingMethod": {
          "enumDescriptions": [
            "The recording method is unspecified.",
            "The data was manually entered by the user.",
            "The data was passively measured by a device.",
            "The data was derived from other data, e.g., by an algorithm in the backend.",
            "The data was actively measured by a device.",
            "The recording method is unknown. This is set when the data is uploaded from a third party app that does not provide this information."
          ],
          "description": "Optional. Captures how the data was recorded.",
          "type": "string",
          "enum": [
            "RECORDING_METHOD_UNSPECIFIED",
            "MANUAL",
            "PASSIVELY_MEASURED",
            "DERIVED",
            "ACTIVELY_MEASURED",
            "UNKNOWN"
          ]
        },
        "application": {
          "$ref": "Application",
          "description": "Output only. Captures metadata for the application that provided this data.",
          "readOnly": true
        },
        "platform": {
          "enumDescriptions": [
            "The platform is unspecified.",
            "The data was uploaded from Fitbit.",
            "The data was uploaded from Health Connect.",
            "The data was uploaded from Health Kit.",
            "The data was uploaded from Google Fit.",
            "The data was uploaded from Fitbit legacy Web API.",
            "The data was uploaded from Nest devices.",
            "The data was uploaded from Google Health API.",
            "The data was uploaded from Google Partner Integrations."
          ],
          "enum": [
            "PLATFORM_UNSPECIFIED",
            "FITBIT",
            "HEALTH_CONNECT",
            "HEALTH_KIT",
            "FIT",
            "FITBIT_WEB_API",
            "NEST",
            "GOOGLE_WEB_API",
            "GOOGLE_PARTNER_INTEGRATION"
          ],
          "description": "Output only. Captures the platform that uploaded the data.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "VolumeQuantityRollup": {
      "description": "Rollup for volume quantity.",
      "type": "object",
      "id": "VolumeQuantityRollup",
      "properties": {
        "userProvidedUnitLast": {
          "type": "string",
          "enum": [
            "VOLUME_UNIT_UNSPECIFIED",
            "CUP_IMPERIAL",
            "CUP_US",
            "FLUID_OUNCE_IMPERIAL",
            "FLUID_OUNCE_US",
            "LITER",
            "MILLILITER",
            "PINT_IMPERIAL",
            "PINT_US"
          ],
          "description": "Optional. The user provided unit on the last element.",
          "enumDescriptions": [
            "Unspecified volume unit.",
            "Cup (imperial)",
            "Cup (US)",
            "Fluid ounce (imperial)",
            "Fluid ounce (US)",
            "Liter",
            "Milliliter",
            "Pint (imperial)",
            "Pint (US)"
          ]
        },
        "millilitersSum": {
          "type": "number",
          "format": "double",
          "description": "Required. The sum of volume in milliliters."
        }
      }
    },
    "ReconciledDataPoint": {
      "description": "A reconciled computed or recorded metric.",
      "type": "object",
      "id": "ReconciledDataPoint",
      "properties": {
        "weight": {
          "description": "Data for points in the `weight` sample data type collection.",
          "$ref": "Weight"
        },
        "dailyHeartRateVariability": {
          "description": "Data for points in the `daily-heart-rate-variability` daily data type collection.",
          "$ref": "DailyHeartRateVariability"
        },
        "hydrationLog": {
          "$ref": "HydrationLog",
          "description": "Data for points in the `hydration-log` session data type collection."
        },
        "swimLengthsData": {
          "$ref": "SwimLengthsData",
          "description": "Data for points in the `swim-lengths-data` interval data type collection."
        },
        "activityLevel": {
          "description": "Data for points in the `activity-level` daily data type collection.",
          "$ref": "ActivityLevel"
        },
        "heartRateVariability": {
          "$ref": "HeartRateVariability",
          "description": "Data for points in the `heart-rate-variability` sample data type collection."
        },
        "vo2Max": {
          "description": "Data for points in the `vo2-max` sample data type collection.",
          "$ref": "VO2Max"
        },
        "dailyVo2Max": {
          "$ref": "DailyVO2Max",
          "description": "Data for points in the `daily-vo2-max` daily data type collection."
        },
        "sleep": {
          "description": "Data for points in the `sleep` session data type collection.",
          "$ref": "Sleep"
        },
        "activeZoneMinutes": {
          "$ref": "ActiveZoneMinutes",
          "description": "Data for points in the `active-zone-minutes` interval data type collection, measured in minutes."
        },
        "sedentaryPeriod": {
          "$ref": "SedentaryPeriod",
          "description": "Data for points in the `sedentary-period` interval data type collection."
        },
        "dailyHeartRateZones": {
          "$ref": "DailyHeartRateZones",
          "description": "Data for points in the `daily-heart-rate-zones` daily data type collection."
        },
        "dailyRespiratoryRate": {
          "description": "Data for points in the `daily-respiratory-rate` daily data type collection.",
          "$ref": "DailyRespiratoryRate"
        },
        "distance": {
          "$ref": "Distance",
          "description": "Data for points in the `distance` interval data type collection."
        },
        "oxygenSaturation": {
          "$ref": "OxygenSaturation",
          "description": "Data for points in the `oxygen-saturation` sample data type collection."
        },
        "timeInHeartRateZone": {
          "$ref": "TimeInHeartRateZone",
          "description": "Data for points in the `time-in-heart-rate-zone` interval data type collection."
        },
        "heartRate": {
          "description": "Data for points in the `heart-rate` sample data type collection.",
          "$ref": "HeartRate"
        },
        "dailyOxygenSaturation": {
          "description": "Data for points in the `daily-oxygen-saturation` daily data type collection.",
          "$ref": "DailyOxygenSaturation"
        },
        "activeMinutes": {
          "description": "Data for points in the `active-minutes` interval data type collection.",
          "$ref": "ActiveMinutes"
        },
        "steps": {
          "$ref": "Steps",
          "description": "Data for points in the `steps` interval data type collection."
        },
        "altitude": {
          "description": "Data for points in the `altitude` interval data type collection.",
          "$ref": "Altitude"
        },
        "height": {
          "description": "Data for points in the `height` sample data type collection.",
          "$ref": "Height"
        },
        "basalEnergyBurned": {
          "$ref": "BasalEnergyBurned",
          "description": "Data for points in the `basal-energy-burned` interval data type collection."
        },
        "respiratoryRateSleepSummary": {
          "$ref": "RespiratoryRateSleepSummary",
          "description": "Data for points in the `respiratory-rate-sleep-summary` sample data type collection."
        },
        "dataPointName": {
          "type": "string",
          "description": "Identifier. Data point name, only supported for the subset of identifiable data types. For the majority of the data types, individual data points do not need to be identified and this field would be empty. Format: `users/{user}/dataTypes/{data_type}/dataPoints/{data_point}` Example: `users/abcd1234/dataTypes/sleep/dataPoints/a1b2c3d4-e5f6-7890-1234-567890abcdef` The `{user}` ID is a system-generated identifier, as described in Identity.health_user_id. The `{data_type}` ID corresponds to the kebab-case version of the field names in the DataPoint data union field, e.g. `total-calories` for the `total_calories` field. The `{data_point}` ID can be client-provided or system-generated. If client-provided, it must be a string of 4-63 characters, containing only lowercase letters, numbers, and hyphens."
        },
        "dailySleepTemperatureDerivations": {
          "description": "Data for points in the `daily-sleep-temperature-derivations` daily data type collection.",
          "$ref": "DailySleepTemperatureDerivations"
        },
        "runVo2Max": {
          "$ref": "RunVO2Max",
          "description": "Data for points in the `run-vo2-max` sample data type collection."
        },
        "dailyRestingHeartRate": {
          "$ref": "DailyRestingHeartRate",
          "description": "Data for points in the `daily-resting-heart-rate` daily data type collection."
        },
        "exercise": {
          "$ref": "Exercise",
          "description": "Data for points in the `exercise` session data type collection."
        },
        "bodyFat": {
          "$ref": "BodyFat",
          "description": "Data for points in the `body-fat` sample data type collection."
        },
        "floors": {
          "$ref": "Floors",
          "description": "Data for points in the `floors` interval data type collection."
        }
      }
    },
    "Steps": {
      "description": "Step count over the time interval.",
      "type": "object",
      "id": "Steps",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        },
        "count": {
          "type": "string",
          "format": "int64",
          "description": "Required. Number of steps in the recorded interval."
        }
      }
    },
    "DailyOxygenSaturation": {
      "type": "object",
      "description": "A daily oxygen saturation (SpO2) record. Represents the user's daily oxygen saturation summary, typically calculated during sleep.",
      "id": "DailyOxygenSaturation",
      "properties": {
        "averagePercentage": {
          "type": "number",
          "format": "double",
          "description": "Required. The average value of the oxygen saturation samples during the sleep."
        },
        "lowerBoundPercentage": {
          "description": "Required. The lower bound of the confidence interval of oxygen saturation samples during sleep.",
          "type": "number",
          "format": "double"
        },
        "upperBoundPercentage": {
          "description": "Required. The upper bound of the confidence interval of oxygen saturation samples during sleep.",
          "type": "number",
          "format": "double"
        },
        "date": {
          "$ref": "Date",
          "description": "Required. Date (in user's timezone) of the daily oxygen saturation record."
        },
        "standardDeviationPercentage": {
          "type": "number",
          "format": "double",
          "description": "Optional. Standard deviation of the daily oxygen saturation averages from the past 7-30 days."
        }
      }
    },
    "BodyFat": {
      "id": "BodyFat",
      "properties": {
        "sampleTime": {
          "description": "Required. The time at which body fat was measured.",
          "$ref": "ObservationSampleTime"
        },
        "percentage": {
          "description": "Required. Body fat percentage, in range [0, 100].",
          "type": "number",
          "format": "double"
        }
      },
      "description": "Body fat measurement.",
      "type": "object"
    },
    "CivilDateTime": {
      "id": "CivilDateTime",
      "properties": {
        "date": {
          "$ref": "Date",
          "description": "Required. Calendar date."
        },
        "time": {
          "description": "Optional. Time of day. Defaults to the start of the day, at midnight if omitted.",
          "$ref": "TimeOfDay"
        }
      },
      "description": "Civil time representation similar to google.type.DateTime, but ensures that neither the timezone nor the UTC offset can be set to avoid confusion between civil and physical time queries.",
      "type": "object"
    },
    "OxygenSaturation": {
      "id": "OxygenSaturation",
      "properties": {
        "percentage": {
          "type": "number",
          "format": "double",
          "description": "Required. The oxygen saturation percentage. Valid values are from 0 to 100."
        },
        "sampleTime": {
          "$ref": "ObservationSampleTime",
          "description": "Required. The time at which oxygen saturation was measured."
        }
      },
      "type": "object",
      "description": "Captures the user's instantaneous oxygen saturation percentage (SpO2)."
    },
    "ListSubscribersResponse": {
      "id": "ListSubscribersResponse",
      "properties": {
        "subscribers": {
          "type": "array",
          "description": "Subscribers from the specified project.",
          "items": {
            "$ref": "Subscriber"
          }
        },
        "totalSize": {
          "type": "integer",
          "format": "int32",
          "description": "The total number of subscribers matching the request."
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Response message for ListSubscribers."
    },
    "ExerciseEvent": {
      "id": "ExerciseEvent",
      "properties": {
        "eventUtcOffset": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. Exercise event time offset from UTC"
        },
        "exerciseEventType": {
          "description": "Required. The type of the event, such as start, stop, pause, resume.",
          "type": "string",
          "enum": [
            "EXERCISE_EVENT_TYPE_UNSPECIFIED",
            "START",
            "STOP",
            "PAUSE",
            "RESUME",
            "AUTO_PAUSE",
            "AUTO_RESUME"
          ],
          "enumDescriptions": [
            "Exercise event type is unspecified.",
            "Exercise start event.",
            "Exercise stop event.",
            "Exercise pause event.",
            "Exercise resume event.",
            "Exercise auto-pause event.",
            "Exercise auto-resume event."
          ]
        },
        "eventTime": {
          "description": "Required. Exercise event time",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "description": "Represents instantaneous events that happen during an exercise, such as start, stop, pause, split.",
      "type": "object"
    },
    "Device": {
      "id": "Device",
      "properties": {
        "displayName": {
          "description": "Optional. An optional name for the device.",
          "type": "string"
        },
        "manufacturer": {
          "description": "Optional. An optional manufacturer of the device.",
          "type": "string"
        },
        "formFactor": {
          "enumDescriptions": [
            "The form factor is unspecified.",
            "The device is a fitness band.",
            "The device is a watch.",
            "The device is a phone.",
            "The device is a ring.",
            "The device is a chest strap.",
            "The device is a scale.",
            "The device is a tablet.",
            "The device is a head mounted device.",
            "The device is a smart display."
          ],
          "type": "string",
          "enum": [
            "FORM_FACTOR_UNSPECIFIED",
            "FITNESS_BAND",
            "WATCH",
            "PHONE",
            "RING",
            "CHEST_STRAP",
            "SCALE",
            "TABLET",
            "HEAD_MOUNTED",
            "SMART_DISPLAY"
          ],
          "description": "Optional. Captures the form factor of the device."
        }
      },
      "type": "object",
      "description": "Captures metadata about the device that recorded the measurement."
    },
    "RunVO2Max": {
      "id": "RunVO2Max",
      "properties": {
        "sampleTime": {
          "description": "Required. The time at which the metric was measured.",
          "$ref": "ObservationSampleTime"
        },
        "runVo2Max": {
          "description": "Required. Run VO2 max value in ml/kg/min.",
          "type": "number",
          "format": "double"
        }
      },
      "type": "object",
      "description": "VO2 max value calculated based on the user's running activity. Value stored in ml/kg/min."
    },
    "ReconcileDataPointsResponse": {
      "type": "object",
      "description": "Response containing the list of reconciled DataPoints.",
      "id": "ReconcileDataPointsResponse",
      "properties": {
        "dataPoints": {
          "description": "Data points matching the query",
          "items": {
            "$ref": "ReconciledDataPoint"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "Next page token, empty if the response is complete",
          "type": "string"
        }
      }
    },
    "ExerciseMetadata": {
      "id": "ExerciseMetadata",
      "properties": {
        "hasGps": {
          "description": "Optional. Whether the exercise had GPS tracking.",
          "type": "boolean"
        },
        "poolLengthMillimeters": {
          "type": "string",
          "format": "int64",
          "description": "Optional. Pool length in millimeters. Only present in the swimming exercises."
        }
      },
      "type": "object",
      "description": "Additional exercise metadata."
    },
    "ActiveZoneMinutes": {
      "id": "ActiveZoneMinutes",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        },
        "heartRateZone": {
          "description": "Required. Heart rate zone in which the active zone minutes have been earned, in the given time interval.",
          "type": "string",
          "enum": [
            "HEART_RATE_ZONE_UNSPECIFIED",
            "FAT_BURN",
            "CARDIO",
            "PEAK"
          ],
          "enumDescriptions": [
            "Unspecified heart rate zone.",
            "The fat burn heart rate zone.",
            "The cardio heart rate zone.",
            "The peak heart rate zone."
          ]
        },
        "activeZoneMinutes": {
          "type": "string",
          "format": "int64",
          "description": "Required. Number of Active Zone Minutes earned in the given time interval. Note: active_zone_minutes equals to 1 for low intensity (fat burn) zones or 2 for high intensity zones (cardio, peak)."
        }
      },
      "type": "object",
      "description": "Record of active zone minutes in a given time interval."
    },
    "CaloriesInHeartRateZoneRollupValue": {
      "description": "Represents the result of the rollup of the calories in heart rate zone data type.",
      "type": "object",
      "id": "CaloriesInHeartRateZoneRollupValue",
      "properties": {
        "caloriesInHeartRateZones": {
          "description": "List of calories burned in each heart rate zone.",
          "items": {
            "$ref": "CaloriesInHeartRateZoneValue"
          },
          "type": "array"
        }
      }
    },
    "SessionTimeInterval": {
      "description": "Represents a time interval of session data point, which bundles multiple observed metrics together.",
      "type": "object",
      "id": "SessionTimeInterval",
      "properties": {
        "civilEndTime": {
          "readOnly": true,
          "description": "Output only. Session end time in civil time in the timezone the subject is in at the end of the session.",
          "$ref": "CivilDateTime"
        },
        "civilStartTime": {
          "$ref": "CivilDateTime",
          "readOnly": true,
          "description": "Output only. Session start time in civil time in the timezone the subject is in at the start of the session."
        },
        "endUtcOffset": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. The offset of the user's local time at the end of the session relative to the Coordinated Universal Time (UTC)."
        },
        "startTime": {
          "description": "Required. The start time of the observed session.",
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. The end time of the observed session."
        },
        "startUtcOffset": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. The offset of the user's local time at the start of the session relative to the Coordinated Universal Time (UTC)."
        }
      }
    },
    "TimeInHeartRateZoneValue": {
      "description": "Represents the total time spent in a specific heart rate zone.",
      "type": "object",
      "id": "TimeInHeartRateZoneValue",
      "properties": {
        "duration": {
          "type": "string",
          "format": "google-duration",
          "description": "The total time spent in the specified heart rate zone."
        },
        "heartRateZone": {
          "enumDescriptions": [
            "Unspecified heart rate zone.",
            "The light heart rate zone.",
            "The moderate heart rate zone.",
            "The vigorous heart rate zone.",
            "The peak heart rate zone."
          ],
          "description": "The heart rate zone.",
          "type": "string",
          "enum": [
            "HEART_RATE_ZONE_TYPE_UNSPECIFIED",
            "LIGHT",
            "MODERATE",
            "VIGOROUS",
            "PEAK"
          ]
        }
      }
    },
    "TimeOfDay": {
      "description": "Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may choose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`.",
      "type": "object",
      "id": "TimeOfDay",
      "properties": {
        "nanos": {
          "description": "Fractions of seconds, in nanoseconds. Must be greater than or equal to 0 and less than or equal to 999,999,999.",
          "type": "integer",
          "format": "int32"
        },
        "hours": {
          "description": "Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23. An API may choose to allow the value \"24:00:00\" for scenarios like business closing time.",
          "type": "integer",
          "format": "int32"
        },
        "seconds": {
          "description": "Seconds of a minute. Must be greater than or equal to 0 and typically must be less than or equal to 59. An API may allow the value 60 if it allows leap-seconds.",
          "type": "integer",
          "format": "int32"
        },
        "minutes": {
          "type": "integer",
          "format": "int32",
          "description": "Minutes of an hour. Must be greater than or equal to 0 and less than or equal to 59."
        }
      }
    },
    "HttpResponse": {
      "id": "HttpResponse",
      "properties": {
        "headers": {
          "type": "array",
          "description": "The HTTP response headers. The ordering of the headers is significant. Multiple headers with the same key may present for the response.",
          "items": {
            "$ref": "HttpHeader"
          }
        },
        "status": {
          "type": "integer",
          "format": "int32",
          "description": "The HTTP status code, such as 200 or 404."
        },
        "reason": {
          "description": "The HTTP reason phrase, such as \"OK\" or \"Not Found\".",
          "type": "string"
        },
        "body": {
          "description": "The HTTP response body. If the body is not expected, it should be empty.",
          "type": "string",
          "format": "byte"
        }
      },
      "description": "Represents an HTTP response.",
      "type": "object"
    },
    "Weight": {
      "id": "Weight",
      "properties": {
        "sampleTime": {
          "$ref": "ObservationSampleTime",
          "description": "Required. The time at which the weight was measured"
        },
        "weightGrams": {
          "type": "number",
          "format": "double",
          "description": "Required. Weight of a user in grams."
        },
        "notes": {
          "description": "Optional. Standard free-form notes captured at manual logging.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Body weight measurement."
    },
    "GoogleDevicesandservicesHealthV4WebhookNotificationCloudLog": {
      "id": "GoogleDevicesandservicesHealthV4WebhookNotificationCloudLog",
      "properties": {
        "httpResponse": {
          "description": "Required. Represents the HTTP response. This message includes the status code, reason phrase, headers, and body.",
          "$ref": "HttpResponse"
        }
      },
      "type": "object",
      "description": "Log message for a webhook notification sent by the Google Health API to a subscriber's endpoint. Includes the HTTP response received from the endpoint."
    },
    "MobilityMetrics": {
      "type": "object",
      "description": "Mobility workouts specific metrics",
      "id": "MobilityMetrics",
      "properties": {
        "avgCadenceStepsPerMinute": {
          "type": "number",
          "format": "double",
          "description": "Optional. Cadence is a measure of the frequency of your foot strikes. Steps / min in real time during workout."
        },
        "avgVerticalOscillationMillimeters": {
          "description": "Optional. Distance off the ground your center of mass moves with each stride while running",
          "type": "string",
          "format": "int64"
        },
        "avgStrideLengthMillimeters": {
          "description": "Optional. Stride length is a measure of the distance covered by a single stride",
          "type": "string",
          "format": "int64"
        },
        "avgGroundContactTimeDuration": {
          "description": "Optional. The ground contact time for a particular stride is the amount of time for which the foot was in contact with the ground on that stride",
          "type": "string",
          "format": "google-duration"
        },
        "avgVerticalRatio": {
          "description": "Optional. Vertical oscillation/stride length between [5.0, 11.0].",
          "type": "number",
          "format": "double"
        }
      }
    },
    "TimeInHeartRateZoneRollupValue": {
      "id": "TimeInHeartRateZoneRollupValue",
      "properties": {
        "timeInHeartRateZones": {
          "description": "List of time spent in each heart rate zone.",
          "items": {
            "$ref": "TimeInHeartRateZoneValue"
          },
          "type": "array"
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the time in heart rate zone data type."
    },
    "BasalEnergyBurned": {
      "description": "Number of calories burned due to basal metabolic rate (BMR) over a period of time.",
      "type": "object",
      "id": "BasalEnergyBurned",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        },
        "kcal": {
          "type": "number",
          "format": "double",
          "description": "Required. Number of calories burned due to basal metabolic rate in kilocalories over the observed interval."
        }
      }
    },
    "HeartRateVariabilityPersonalRangeRollupValue": {
      "id": "HeartRateVariabilityPersonalRangeRollupValue",
      "properties": {
        "averageHeartRateVariabilityMillisecondsMin": {
          "type": "number",
          "format": "double",
          "description": "The lower bound of the user's average heart rate variability personal range."
        },
        "averageHeartRateVariabilityMillisecondsMax": {
          "type": "number",
          "format": "double",
          "description": "The upper bound of the user's average heart rate variability personal range."
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the user's daily heart rate variability personal range."
    },
    "ListDataPointsResponse": {
      "description": "Response containing raw data points matching the query",
      "type": "object",
      "id": "ListDataPointsResponse",
      "properties": {
        "dataPoints": {
          "description": "Data points matching the query",
          "items": {
            "$ref": "DataPoint"
          },
          "type": "array"
        },
        "nextPageToken": {
          "type": "string",
          "description": "Next page token, empty if the response is complete"
        }
      }
    },
    "ActiveMinutesRollupValue": {
      "id": "ActiveMinutesRollupValue",
      "properties": {
        "activeMinutesRollupByActivityLevel": {
          "type": "array",
          "description": "Active minutes by activity level. At most one record per activity level is allowed.",
          "items": {
            "$ref": "ActiveMinutesRollupByActivityLevel"
          }
        }
      },
      "description": "Represents the result of the rollup of the active minutes data type.",
      "type": "object"
    },
    "SedentaryPeriod": {
      "id": "SedentaryPeriod",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        }
      },
      "type": "object",
      "description": "SedentaryPeriod SedentaryPeriod data represents the periods of time that the user was sedentary (i.e. not moving while wearing the device)."
    },
    "ObservationSampleTime": {
      "id": "ObservationSampleTime",
      "properties": {
        "utcOffset": {
          "description": "Required. The offset of the user's local time during the observation relative to the Coordinated Universal Time (UTC).",
          "type": "string",
          "format": "google-duration"
        },
        "physicalTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. The time of the observation."
        },
        "civilTime": {
          "$ref": "CivilDateTime",
          "readOnly": true,
          "description": "Output only. The civil time in the timezone the subject is in at the time of the observation."
        }
      },
      "type": "object",
      "description": "Represents a sample time of an observed data point."
    },
    "SleepSummary": {
      "id": "SleepSummary",
      "properties": {
        "minutesToFallAsleep": {
          "readOnly": true,
          "type": "string",
          "format": "int64",
          "description": "Output only. Minutes to fall asleep calculated by restlessness algorithm."
        },
        "minutesAsleep": {
          "readOnly": true,
          "type": "string",
          "format": "int64",
          "description": "Output only. Total number of minutes asleep. For classic sleep it is the sum of ASLEEP stages (excluding AWAKE and RESTLESS). For \"stages\" sleep it is the sum of LIGHT, REM and DEEP stages (excluding AWAKE)."
        },
        "minutesInSleepPeriod": {
          "readOnly": true,
          "type": "string",
          "format": "int64",
          "description": "Output only. Delta between wake time and bedtime. It is the sum of all stages."
        },
        "minutesAfterWakeUp": {
          "description": "Output only. Minutes after wake up calculated by restlessness algorithm.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "minutesAwake": {
          "description": "Output only. Total number of minutes awake. It is a sum of all AWAKE stages.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "stagesSummary": {
          "description": "Output only. List of summaries (total duration and segment count) per each sleep stage type.",
          "items": {
            "$ref": "StageSummary"
          },
          "readOnly": true,
          "type": "array"
        }
      },
      "description": " Sleep summary: metrics and stages summary.",
      "type": "object"
    },
    "DailyRespiratoryRate": {
      "type": "object",
      "description": "A daily average respiratory rate (breaths per minute) for a day of the year. One data point per day calculated for the main sleep.",
      "id": "DailyRespiratoryRate",
      "properties": {
        "breathsPerMinute": {
          "description": "Required. The average number of breaths taken per minute.",
          "type": "number",
          "format": "double"
        },
        "date": {
          "$ref": "Date",
          "description": "Required. The date on which the respiratory rate was measured."
        }
      }
    },
    "EndpointAuthorization": {
      "type": "object",
      "description": "Authorization mechanism for a subscriber endpoint. For all requests sent by the Webhooks service, the JSON payload is cryptographically signed. The signature is delivered in the `X-HEALTHAPI-SIGNATURE` HTTP header. This is an ECDSA (NIST P256) signature of the JSON payload. Clients must verify this signature using Google Health API's public key to confirm the payload was sent by the Health API.",
      "id": "EndpointAuthorization",
      "properties": {
        "secret": {
          "description": "Required. Input only. Provides a client-provided secret that will be sent with each notification to the subscriber endpoint using the \"Authorization\" header. The value must include the authorization scheme, e.g., \"Bearer \" or \"Basic \", as it will be used as the full Authorization header value. This secret is used by the API to test the endpoint during `CreateSubscriber` and `UpdateSubscriber` calls, and will be sent in the `Authorization` header for all subsequent webhook notifications to this endpoint.",
          "type": "string"
        },
        "secretSet": {
          "readOnly": true,
          "type": "boolean",
          "description": "Output only. Whether the secret is set."
        }
      }
    },
    "DailyHeartRateZones": {
      "id": "DailyHeartRateZones",
      "properties": {
        "date": {
          "description": "Required. Date (in user's timezone) of the heart rate zones record.",
          "$ref": "Date"
        },
        "heartRateZones": {
          "description": "Required. The heart rate zones.",
          "items": {
            "$ref": "HeartRateZone"
          },
          "type": "array"
        }
      },
      "description": "User's heart rate zone thresholds based on the Karvonen algorithm for a specific day.",
      "type": "object"
    },
    "DailyRollUpDataPointsResponse": {
      "type": "object",
      "description": "Response containing the list of rolled up data points.",
      "id": "DailyRollUpDataPointsResponse",
      "properties": {
        "rollupDataPoints": {
          "description": "Values for each aggregation time window.",
          "items": {
            "$ref": "DailyRollupDataPoint"
          },
          "type": "array"
        }
      }
    },
    "RunVO2MaxRollupValue": {
      "type": "object",
      "description": "Represents the result of the rollup of the user's daily heart rate variability personal range.",
      "id": "RunVO2MaxRollupValue",
      "properties": {
        "rateMax": {
          "description": "Maximum value of run VO2 max in the interval.",
          "type": "number",
          "format": "double"
        },
        "rateAvg": {
          "description": "Average value of run VO2 max in the interval.",
          "type": "number",
          "format": "double"
        },
        "rateMin": {
          "type": "number",
          "format": "double",
          "description": "Minimum value of run VO2 max in the interval.."
        }
      }
    },
    "HydrationLogRollupValue": {
      "description": "Represents the result of the rollup of the hydration log data type.",
      "type": "object",
      "id": "HydrationLogRollupValue",
      "properties": {
        "amountConsumed": {
          "description": "Rollup for amount consumed.",
          "$ref": "VolumeQuantityRollup"
        }
      }
    },
    "TimeZone": {
      "description": "Represents a time zone from the [IANA Time Zone Database](https://www.iana.org/time-zones).",
      "type": "object",
      "id": "TimeZone",
      "properties": {
        "version": {
          "type": "string",
          "description": "Optional. IANA Time Zone Database version number. For example \"2019a\"."
        },
        "id": {
          "description": "IANA Time Zone Database time zone. For example \"America/New_York\".",
          "type": "string"
        }
      }
    },
    "Interval": {
      "type": "object",
      "description": "Represents a time interval, encoded as a Timestamp start (inclusive) and a Timestamp end (exclusive). The start must be less than or equal to the end. When the start equals the end, the interval is empty (matches no time). When both start and end are unspecified, the interval matches any time.",
      "id": "Interval",
      "properties": {
        "startTime": {
          "description": "Optional. Inclusive start of the interval. If specified, a Timestamp matching this interval will have to be the same or after the start.",
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "Optional. Exclusive end of the interval. If specified, a Timestamp matching this interval will have to be before the end.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "VolumeQuantity": {
      "description": "Represents the volume quantity.",
      "type": "object",
      "id": "VolumeQuantity",
      "properties": {
        "milliliters": {
          "description": "Required. Value representing the volume in milliliters.",
          "type": "number",
          "format": "double"
        },
        "userProvidedUnit": {
          "enumDescriptions": [
            "Unspecified volume unit.",
            "Cup (imperial)",
            "Cup (US)",
            "Fluid ounce (imperial)",
            "Fluid ounce (US)",
            "Liter",
            "Milliliter",
            "Pint (imperial)",
            "Pint (US)"
          ],
          "description": "Optional. Value representing the user provided unit.",
          "type": "string",
          "enum": [
            "VOLUME_UNIT_UNSPECIFIED",
            "CUP_IMPERIAL",
            "CUP_US",
            "FLUID_OUNCE_IMPERIAL",
            "FLUID_OUNCE_US",
            "LITER",
            "MILLILITER",
            "PINT_IMPERIAL",
            "PINT_US"
          ]
        }
      }
    },
    "HeartRateRollupValue": {
      "id": "HeartRateRollupValue",
      "properties": {
        "beatsPerMinuteMax": {
          "description": "The maximum heart rate value in the interval.",
          "type": "number",
          "format": "double"
        },
        "beatsPerMinuteMin": {
          "type": "number",
          "format": "double",
          "description": "The minimum heart rate value in the interval."
        },
        "beatsPerMinuteAvg": {
          "description": "The average heart rate value in the interval.",
          "type": "number",
          "format": "double"
        }
      },
      "description": "Represents the result of the rollup of the heart rate data type.",
      "type": "object"
    },
    "HttpHeader": {
      "type": "object",
      "description": "Represents an HTTP header.",
      "id": "HttpHeader",
      "properties": {
        "key": {
          "description": "The HTTP header key. It is case insensitive.",
          "type": "string"
        },
        "value": {
          "description": "The HTTP header value.",
          "type": "string"
        }
      }
    },
    "OutOfBedSegment": {
      "type": "object",
      "description": "A time interval to represent an out-of-bed segment.",
      "id": "OutOfBedSegment",
      "properties": {
        "startTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. Segment tart time."
        },
        "endTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. Segment end time."
        },
        "startUtcOffset": {
          "description": "Required. The offset of the user's local time at the start of the segment relative to the Coordinated Universal Time (UTC).",
          "type": "string",
          "format": "google-duration"
        },
        "endUtcOffset": {
          "description": "Required. The offset of the user's local time at the end of the segment relative to the Coordinated Universal Time (UTC).",
          "type": "string",
          "format": "google-duration"
        }
      }
    },
    "ExportExerciseTcxResponse": {
      "id": "ExportExerciseTcxResponse",
      "properties": {
        "tcxData": {
          "description": "Contains the exported TCX data.",
          "type": "string"
        }
      },
      "description": "Represents a Response for exporting exercise data in TCX format.",
      "type": "object"
    },
    "BodyFatRollupValue": {
      "id": "BodyFatRollupValue",
      "properties": {
        "bodyFatPercentageAvg": {
          "type": "number",
          "format": "double",
          "description": "Average body fat percentage."
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the body fat data type."
    },
    "ActivityLevelRollupByActivityLevelType": {
      "type": "object",
      "description": "Represents the total duration in a specific activity level type.",
      "id": "ActivityLevelRollupByActivityLevelType",
      "properties": {
        "totalDuration": {
          "type": "string",
          "format": "google-duration",
          "description": "Total duration in the activity level type."
        },
        "activityLevelType": {
          "enumDescriptions": [
            "Unspecified activity level type.",
            "Sedentary activity level.",
            "Lightly active activity level.",
            "Moderately active activity level.",
            "Very active activity level."
          ],
          "description": "Activity level type.",
          "type": "string",
          "enum": [
            "ACTIVITY_LEVEL_TYPE_UNSPECIFIED",
            "SEDENTARY",
            "LIGHTLY_ACTIVE",
            "MODERATELY_ACTIVE",
            "VERY_ACTIVE"
          ]
        }
      }
    },
    "Settings": {
      "id": "Settings",
      "properties": {
        "weightUnit": {
          "description": "Optional. The measurement unit defined in the user's account settings.",
          "type": "string",
          "enum": [
            "WEIGHT_UNIT_UNSPECIFIED",
            "WEIGHT_UNIT_POUNDS",
            "WEIGHT_UNIT_STONE",
            "WEIGHT_UNIT_KILOGRAMS"
          ],
          "enumDescriptions": [
            "Weight unit is not specified.",
            "Weight unit is pounds.",
            "Weight unit is stones.",
            "Weight unit is kilograms."
          ]
        },
        "temperatureUnit": {
          "type": "string",
          "enum": [
            "TEMPERATURE_UNIT_UNSPECIFIED",
            "TEMPERATURE_UNIT_CELSIUS",
            "TEMPERATURE_UNIT_FAHRENHEIT"
          ],
          "description": "Optional. The measurement unit defined in the user's account settings.",
          "enumDescriptions": [
            "Temperature unit is not specified.",
            "Temperature unit is Celsius.",
            "Temperature unit is Fahrenheit."
          ]
        },
        "strideLengthRunningType": {
          "enumDescriptions": [
            "Stride length type is not specified.",
            "Stride length type is computed based on the user's gender and height.",
            "Stride length type is manually set by the user.",
            "Stride length type is determined automatically."
          ],
          "description": "Optional. The stride length type defined in the user's account settings for running. Updates to this field are currently not supported.",
          "type": "string",
          "enum": [
            "STRIDE_LENGTH_TYPE_UNSPECIFIED",
            "STRIDE_LENGTH_TYPE_DEFAULT",
            "STRIDE_LENGTH_TYPE_MANUAL",
            "STRIDE_LENGTH_TYPE_AUTO"
          ]
        },
        "waterUnit": {
          "type": "string",
          "enum": [
            "WATER_UNIT_UNSPECIFIED",
            "WATER_UNIT_ML",
            "WATER_UNIT_FL_OZ",
            "WATER_UNIT_CUP"
          ],
          "description": "Optional. The measurement unit defined in the user's account settings.",
          "enumDescriptions": [
            "Water unit is not specified.",
            "Water unit is milliliters.",
            "Water unit is fluid ounces.",
            "Water unit is cups."
          ]
        },
        "autoStrideEnabled": {
          "description": "Optional. True if the user's stride length is determined automatically. Updates to this field are currently not supported.",
          "type": "boolean"
        },
        "swimUnit": {
          "enumDescriptions": [
            "Swim unit is not specified.",
            "Swim unit is meters.",
            "Swim unit is yards."
          ],
          "type": "string",
          "enum": [
            "SWIM_UNIT_UNSPECIFIED",
            "SWIM_UNIT_METERS",
            "SWIM_UNIT_YARDS"
          ],
          "description": "Optional. The measurement unit defined in the user's account settings."
        },
        "strideLengthWalkingType": {
          "description": "Optional. The stride length type defined in the user's account settings for walking. Updates to this field are currently not supported.",
          "type": "string",
          "enum": [
            "STRIDE_LENGTH_TYPE_UNSPECIFIED",
            "STRIDE_LENGTH_TYPE_DEFAULT",
            "STRIDE_LENGTH_TYPE_MANUAL",
            "STRIDE_LENGTH_TYPE_AUTO"
          ],
          "enumDescriptions": [
            "Stride length type is not specified.",
            "Stride length type is computed based on the user's gender and height.",
            "Stride length type is manually set by the user.",
            "Stride length type is determined automatically."
          ]
        },
        "glucoseUnit": {
          "type": "string",
          "enum": [
            "GLUCOSE_UNIT_UNSPECIFIED",
            "GLUCOSE_UNIT_MG_DL",
            "GLUCOSE_UNIT_MMOL_L"
          ],
          "description": "Optional. The measurement unit defined in the user's account settings.",
          "enumDescriptions": [
            "Glucose unit is not specified.",
            "Glucose unit is mg/dL.",
            "Glucose unit is mmol/l."
          ]
        },
        "languageLocale": {
          "type": "string",
          "description": "Optional. The locale defined in the user's account settings. Updates to this field are currently not supported."
        },
        "name": {
          "description": "Identifier. The resource name of this Settings resource. Format: `users/{user}/settings` Example: `users/1234567890/settings` or `users/me/settings` The {user} ID is a system-generated Google Health API user ID, a string of 1-63 characters consisting of lowercase and uppercase letters, numbers, and hyphens. The literal `me` can also be used to refer to the authenticated user.",
          "type": "string"
        },
        "heightUnit": {
          "description": "Optional. The measurement unit defined in the user's account settings.",
          "type": "string",
          "enum": [
            "HEIGHT_UNIT_UNSPECIFIED",
            "HEIGHT_UNIT_INCHES",
            "HEIGHT_UNIT_CENTIMETERS"
          ],
          "enumDescriptions": [
            "Height unit is not specified.",
            "Height unit is inches.",
            "Height unit is cm."
          ]
        },
        "utcOffset": {
          "description": "Optional. The user's timezone offset relative to UTC. Updates to this field are currently not supported.",
          "type": "string",
          "format": "google-duration"
        },
        "distanceUnit": {
          "enumDescriptions": [
            "Distance unit is not specified.",
            "Distance unit is miles.",
            "Distance unit is kilometers."
          ],
          "description": "Optional. The measurement unit defined in the user's account settings. Updates to this field are currently not supported.",
          "type": "string",
          "enum": [
            "DISTANCE_UNIT_UNSPECIFIED",
            "DISTANCE_UNIT_MILES",
            "DISTANCE_UNIT_KILOMETERS"
          ]
        },
        "timeZone": {
          "description": "Optional. The timezone defined in the user's account settings. This follows the IANA [Time Zone Database](https://www.iana.org/time-zones). Updates to this field are currently not supported.",
          "type": "string"
        }
      },
      "description": "Settings details.",
      "type": "object"
    },
    "SwimLengthsData": {
      "description": "Swim lengths data over the time interval.",
      "type": "object",
      "id": "SwimLengthsData",
      "properties": {
        "strokeCount": {
          "description": "Required. Number of strokes in the lap.",
          "type": "string",
          "format": "int64"
        },
        "interval": {
          "$ref": "ObservationTimeInterval",
          "description": "Required. Observed interval."
        },
        "swimStrokeType": {
          "type": "string",
          "enum": [
            "SWIM_STROKE_TYPE_UNSPECIFIED",
            "FREESTYLE",
            "BACKSTROKE",
            "BREASTSTROKE",
            "BUTTERFLY"
          ],
          "description": "Required. Swim stroke type.",
          "enumDescriptions": [
            "Swim stroke type is unspecified.",
            "Freestyle swim stroke type.",
            "Backstroke swim stroke type.",
            "Breaststroke swim stroke type.",
            "Butterfly swim stroke type."
          ]
        }
      }
    },
    "DailyRollupDataPoint": {
      "type": "object",
      "description": "Value of a daily rollup for a single civil time interval (aggregation window)",
      "id": "DailyRollupDataPoint",
      "properties": {
        "civilEndTime": {
          "description": "End time of the window this value aggregates over",
          "$ref": "CivilDateTime"
        },
        "bodyFat": {
          "$ref": "BodyFatRollupValue",
          "description": "Returned by default when rolling up data points from the `body-fat` data type, or when requested explicitly using the `body-fat` rollup type identifier."
        },
        "floors": {
          "$ref": "FloorsRollupValue",
          "description": "Returned by default when rolling up data points from the `floors` data type, or when requested explicitly using the `floors` rollup type identifier."
        },
        "distance": {
          "description": "Returned by default when rolling up data points from the `distance` data type, or when requested explicitly using the `distance` rollup type identifier.",
          "$ref": "DistanceRollupValue"
        },
        "restingHeartRatePersonalRange": {
          "description": "Returned by default when rolling up data points from the `daily-resting-heart-rate` data type, or when requested explicitly using the `resting-heart-rate-personal-range` rollup type identifier.",
          "$ref": "RestingHeartRatePersonalRangeRollupValue"
        },
        "totalCalories": {
          "description": "Returned by default when rolling up data points from the `total-calories` data type, or when requested explicitly using the `total-calories` rollup type identifier.",
          "$ref": "TotalCaloriesRollupValue"
        },
        "sedentaryPeriod": {
          "description": "Returned by default when rolling up data points from the `sedentary-period` data type, or when requested explicitly using the `sedentary-period` rollup type identifier.",
          "$ref": "SedentaryPeriodRollupValue"
        },
        "activeZoneMinutes": {
          "$ref": "ActiveZoneMinutesRollupValue",
          "description": "Returned by default when rolling up data points from the `active-zone-minutes` data type, or when requested explicitly using the `active-zone-minutes` rollup type identifier."
        },
        "caloriesInHeartRateZone": {
          "description": "Returned by default when rolling up data points from the `calories-in-heart-rate-zone` data type, or when requested explicitly using the `calories-in-heart-rate-zone` rollup type identifier.",
          "$ref": "CaloriesInHeartRateZoneRollupValue"
        },
        "civilStartTime": {
          "$ref": "CivilDateTime",
          "description": "Start time of the window this value aggregates over"
        },
        "runVo2Max": {
          "description": "Returned by default when rolling up data points from the `run-vo2-max` data type, or when requested explicitly using the `run-vo2-max` rollup type identifier.",
          "$ref": "RunVO2MaxRollupValue"
        },
        "swimLengthsData": {
          "description": "Returned by default when rolling up data points from the `swim-lengths-data` data type, or when requested explicitly using the `swim-lengths-data` rollup type identifier.",
          "$ref": "SwimLengthsDataRollupValue"
        },
        "activityLevel": {
          "description": "Returned by default when rolling up data points from the `activity-level` data type, or when requested explicitly using the `activity-level` rollup type identifier.",
          "$ref": "ActivityLevelRollupValue"
        },
        "activeMinutes": {
          "$ref": "ActiveMinutesRollupValue",
          "description": "Returned by default when rolling up data points from the `active-minutes` data type, or when requested explicitly using the `active-minutes` rollup type identifier."
        },
        "steps": {
          "description": "Returned by default when rolling up data points from the `steps` data type, or when requested explicitly using the `steps` rollup type identifier.",
          "$ref": "StepsRollupValue"
        },
        "altitude": {
          "$ref": "AltitudeRollupValue",
          "description": "Returned by default when rolling up data points from the `altitude` data type, or when requested explicitly using the `altitude` rollup type identifier."
        },
        "hydrationLog": {
          "description": "Returned by default when rolling up data points from the `hydration-log` data type, or when requested explicitly using the `hydration-log` rollup type identifier.",
          "$ref": "HydrationLogRollupValue"
        },
        "weight": {
          "$ref": "WeightRollupValue",
          "description": "Returned by default when rolling up data points from the `weight` data type, or when requested explicitly using the `weight` rollup type identifier."
        },
        "heartRate": {
          "description": "Returned by default when rolling up data points from the `heart-rate` data type, or when requested explicitly using the `heart-rate` rollup type identifier.",
          "$ref": "HeartRateRollupValue"
        },
        "heartRateVariabilityPersonalRange": {
          "description": "Returned by default when rolling up data points from the `daily-heart-rate-variability` data type, or when requested explicitly using the `heart-rate-variability-personal-range` rollup type identifier.",
          "$ref": "HeartRateVariabilityPersonalRangeRollupValue"
        },
        "timeInHeartRateZone": {
          "description": "Returned by default when rolling up data points from the `time-in-heart-rate-zone` data type, or when requested explicitly using the `time-in-heart-rate-zone` rollup type identifier.",
          "$ref": "TimeInHeartRateZoneRollupValue"
        }
      }
    },
    "Profile": {
      "id": "Profile",
      "properties": {
        "autoWalkingStrideLengthMm": {
          "readOnly": true,
          "type": "integer",
          "format": "int32",
          "description": "Output only. The automatically calculated walking stride length, in millimeters. The user must consent to one of the following access scopes to access this field: - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly` - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness`"
        },
        "membershipStartDate": {
          "readOnly": true,
          "description": "Output only. The date the user created their account. Updates to this field are currently not supported.",
          "$ref": "Date"
        },
        "userConfiguredRunningStrideLengthMm": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. The user's user configured running stride length, in millimeters. The user must consent to one of the following access scopes to access this field: - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly` - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness`"
        },
        "autoRunningStrideLengthMm": {
          "description": "Output only. The automatically calculated running stride length, in millimeters. The user must consent to one of the following access scopes to access this field: - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly` - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness`",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "age": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. The age in years based on the user's birth date. Updates to this field are currently not supported."
        },
        "name": {
          "description": "Identifier. The resource name of this Profile resource. Format: `users/{user}/profile` Example: `users/1234567890/profile` or `users/me/profile` The {user} ID is a system-generated Google Health API user ID, a string of 1-63 characters consisting of lowercase and uppercase letters, numbers, and hyphens. The literal `me` can also be used to refer to the authenticated user.",
          "type": "string"
        },
        "userConfiguredWalkingStrideLengthMm": {
          "description": "Optional. The user's user configured walking stride length, in millimeters. The user must consent to one of the following access scopes to access this field: - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly` - `https://www.googleapis.com/auth/googlehealth.activity_and_fitness`",
          "type": "integer",
          "format": "int32"
        }
      },
      "description": "Profile details.",
      "type": "object"
    },
    "StageSummary": {
      "description": "Total duration and segment count for a stage.",
      "type": "object",
      "id": "StageSummary",
      "properties": {
        "type": {
          "description": "Output only. Sleep stage type: AWAKE, DEEP, REM, LIGHT etc.",
          "readOnly": true,
          "type": "string",
          "enum": [
            "SLEEP_STAGE_TYPE_UNSPECIFIED",
            "AWAKE",
            "LIGHT",
            "DEEP",
            "REM",
            "ASLEEP",
            "RESTLESS"
          ],
          "enumDescriptions": [
            "The default unset value.",
            "Sleep stage AWAKE.",
            "Sleep stage LIGHT.",
            "Sleep stage DEEP.",
            "Sleep stage REM.",
            "Sleep stage ASLEEP.",
            "Sleep stage RESTLESS."
          ]
        },
        "count": {
          "description": "Output only. Number of sleep stages segments.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "minutes": {
          "description": "Output only. Total duration in minutes of a sleep stage.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "Sleep": {
      "id": "Sleep",
      "properties": {
        "updateTime": {
          "description": "Output only. Last update time of this sleep observation.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "metadata": {
          "$ref": "SleepMetadata",
          "description": "Optional. Sleep metadata: processing, main, manually edited, stages status."
        },
        "interval": {
          "$ref": "SessionTimeInterval",
          "description": "Required. Observed sleep interval."
        },
        "createTime": {
          "description": "Output only. Creation time of this sleep observation.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "type": {
          "description": "Optional. SleepType: classic or stages.",
          "type": "string",
          "enum": [
            "SLEEP_TYPE_UNSPECIFIED",
            "CLASSIC",
            "STAGES"
          ],
          "enumDescriptions": [
            "Sleep type is unspecified.",
            "Classic sleep is a sleep with 3 stages types: AWAKE, RESTLESS and ASLEEP.",
            "On top of \"classic\" sleep stages an additional processing pass can calculate stages more precisely, overwriting the prior stages with AWAKE, LIGHT, REM and DEEP."
          ]
        },
        "outOfBedSegments": {
          "description": "Optional. “Out of bed” segments that can overlap with sleep stages.",
          "items": {
            "$ref": "OutOfBedSegment"
          },
          "type": "array"
        },
        "summary": {
          "readOnly": true,
          "description": "Output only. Sleep summary: metrics and stages summary.",
          "$ref": "SleepSummary"
        },
        "stages": {
          "type": "array",
          "description": "Optional. List of non-overlapping contiguous sleep stage segments that cover the sleep period.",
          "items": {
            "$ref": "SleepStage"
          }
        }
      },
      "type": "object",
      "description": "A sleep session possibly including stages."
    },
    "Altitude": {
      "id": "Altitude",
      "properties": {
        "interval": {
          "$ref": "ObservationTimeInterval",
          "description": "Required. Observed interval."
        },
        "gainMillimeters": {
          "type": "string",
          "format": "int64",
          "description": "Required. Altitude gain in millimeters over the observed interval."
        }
      },
      "description": "Captures the altitude gain (i.e. deltas), and not level above sea, for a user in millimeters.",
      "type": "object"
    },
    "Date": {
      "id": "Date",
      "properties": {
        "day": {
          "type": "integer",
          "format": "int32",
          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant."
        },
        "month": {
          "type": "integer",
          "format": "int32",
          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day."
        },
        "year": {
          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
          "type": "integer",
          "format": "int32"
        }
      },
      "type": "object",
      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay * google.type.DateTime * google.protobuf.Timestamp"
    },
    "SubscriberConfig": {
      "type": "object",
      "description": "Configuration for a subscriber. A notification is sent to a subscription ONLY if the subscriber has a config for the data type.",
      "id": "SubscriberConfig",
      "properties": {
        "dataTypes": {
          "type": "array",
          "description": "Required. Supported data types are: \"altitude\", \"distance\", \"floors\", \"sleep\", \"steps\", \"weight\". Values should be in kebab-case.",
          "items": {
            "type": "string"
          }
        },
        "subscriptionCreatePolicy": {
          "type": "string",
          "enum": [
            "SUBSCRIPTION_CREATE_POLICY_UNSPECIFIED",
            "AUTOMATIC",
            "MANUAL"
          ],
          "description": "Required. Policy for subscription creation.",
          "enumDescriptions": [
            "Represents an unspecified policy.",
            "When using `AUTOMATIC`, individual subscriptions are not created or stored. Instead, eligibility for notifications is computed dynamically. When a data update occurs for a given data type, notifications are sent to all subscribers with an `AUTOMATIC` policy for that data type, provided the user has granted the necessary consents. This means you do not need to call `CreateSubscription` for each user; notifications are managed automatically based on user consents. As `Subscription` resources are not stored, they cannot be retrieved or managed through `GetSubscription`, `ListSubscriptions`, `UpdateSubscription`, or `DeleteSubscription`.",
            "Requires subscriptions to be created manually for new users. The developer needs to call CreateSubscription for new users."
          ]
        }
      }
    },
    "DailyHeartRateVariability": {
      "id": "DailyHeartRateVariability",
      "properties": {
        "entropy": {
          "type": "number",
          "format": "double",
          "description": "Optional. The Shanon entropy of heartbeat intervals. Entropy quantifies randomness or disorder in a system. High entropy indicates high HRV. Entropy is measured from the histogram of time interval between successive heart beats values measured during sleep."
        },
        "averageHeartRateVariabilityMilliseconds": {
          "type": "number",
          "format": "double",
          "description": "Optional. A user's average heart rate variability calculated using the root mean square of successive differences (RMSSD) in times between heartbeats."
        },
        "date": {
          "description": "Required. Date (in the user's timezone) of heart rate variability measurement.",
          "$ref": "Date"
        },
        "nonRemHeartRateBeatsPerMinute": {
          "description": "Optional. Non-REM heart rate",
          "type": "string",
          "format": "int64"
        },
        "deepSleepRootMeanSquareOfSuccessiveDifferencesMilliseconds": {
          "type": "number",
          "format": "double",
          "description": "Optional. The root mean square of successive differences (RMSSD) value during deep sleep."
        }
      },
      "description": "Represents the daily heart rate variability data type. At least one of the following fields must be set: - `average_heart_rate_variability_milliseconds` - `non_rem_heart_rate_beats_per_minute` - `entropy` - `deep_sleep_root_mean_square_of_successive_differences_milliseconds`",
      "type": "object"
    },
    "Status": {
      "type": "object",
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "id": "Status",
      "properties": {
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "type": "string",
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
        },
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            },
            "type": "object"
          },
          "type": "array"
        }
      }
    },
    "DistanceRollupValue": {
      "description": "Result of the rollup of the user's distance.",
      "type": "object",
      "id": "DistanceRollupValue",
      "properties": {
        "millimetersSum": {
          "description": "Sum of the distance in millimeters.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "DataPoint": {
      "type": "object",
      "description": "A computed or recorded metric.",
      "id": "DataPoint",
      "properties": {
        "swimLengthsData": {
          "description": "Optional. Data for points in the `swim-lengths-data` interval data type collection.",
          "$ref": "SwimLengthsData"
        },
        "activityLevel": {
          "description": "Optional. Data for points in the `activity-level` daily data type collection.",
          "$ref": "ActivityLevel"
        },
        "vo2Max": {
          "description": "Optional. Data for points in the `vo2-max` sample data type collection.",
          "$ref": "VO2Max"
        },
        "dailyVo2Max": {
          "description": "Optional. Data for points in the `daily-vo2-max` daily data type collection.",
          "$ref": "DailyVO2Max"
        },
        "heartRateVariability": {
          "$ref": "HeartRateVariability",
          "description": "Optional. Data for points in the `heart-rate-variability` sample data type collection."
        },
        "weight": {
          "$ref": "Weight",
          "description": "Optional. Data for points in the `weight` sample data type collection."
        },
        "dailyHeartRateVariability": {
          "description": "Optional. Data for points in the `daily-heart-rate-variability` daily data type collection.",
          "$ref": "DailyHeartRateVariability"
        },
        "hydrationLog": {
          "$ref": "HydrationLog",
          "description": "Optional. Data for points in the `hydration-log` session data type collection."
        },
        "name": {
          "description": "Identifier. Data point name, only supported for the subset of identifiable data types. For the majority of the data types, individual data points do not need to be identified and this field would be empty. Format: `users/{user}/dataTypes/{data_type}/dataPoints/{data_point}` Example: `users/abcd1234/dataTypes/sleep/dataPoints/a1b2c3d4-e5f6-7890-1234-567890abcdef` The `{user}` ID is a system-generated identifier, as described in Identity.health_user_id. The `{data_type}` ID corresponds to the kebab-case version of the field names in the DataPoint data union field, e.g. `total-calories` for the `total_calories` field. The `{data_point}` ID can be client-provided or system-generated. If client-provided, it must be a string of 4-63 characters, containing only lowercase letters, numbers, and hyphens.",
          "type": "string"
        },
        "dailyRespiratoryRate": {
          "description": "Optional. Data for points in the `daily-respiratory-rate` daily data type collection.",
          "$ref": "DailyRespiratoryRate"
        },
        "distance": {
          "description": "Optional. Data for points in the `distance` interval data type collection.",
          "$ref": "Distance"
        },
        "sleep": {
          "$ref": "Sleep",
          "description": "Optional. Data for points in the `sleep` session data type collection."
        },
        "activeZoneMinutes": {
          "$ref": "ActiveZoneMinutes",
          "description": "Optional. Data for points in the `active-zone-minutes` interval data type collection, measured in minutes."
        },
        "sedentaryPeriod": {
          "description": "Optional. Data for points in the `sedentary-period` interval data type collection.",
          "$ref": "SedentaryPeriod"
        },
        "dailyHeartRateZones": {
          "$ref": "DailyHeartRateZones",
          "description": "Optional. Data for points in the `daily-heart-rate-zones` daily data type collection."
        },
        "respiratoryRateSleepSummary": {
          "$ref": "RespiratoryRateSleepSummary",
          "description": "Optional. Data for points in the `respiratory-rate-sleep-summary` sample data type collection."
        },
        "dataSource": {
          "description": "Optional. Data source information for the metric",
          "$ref": "DataSource"
        },
        "dailySleepTemperatureDerivations": {
          "$ref": "DailySleepTemperatureDerivations",
          "description": "Optional. Data for points in the `daily-sleep-temperature-derivations` daily data type collection."
        },
        "runVo2Max": {
          "$ref": "RunVO2Max",
          "description": "Optional. Data for points in the `run-vo2-max` sample data type collection."
        },
        "heartRate": {
          "$ref": "HeartRate",
          "description": "Optional. Data for points in the `heart-rate` sample data type collection."
        },
        "dailyOxygenSaturation": {
          "$ref": "DailyOxygenSaturation",
          "description": "Optional. Data for points in the `daily-oxygen-saturation` daily data type collection."
        },
        "oxygenSaturation": {
          "description": "Optional. Data for points in the `oxygen-saturation` sample data type collection.",
          "$ref": "OxygenSaturation"
        },
        "timeInHeartRateZone": {
          "$ref": "TimeInHeartRateZone",
          "description": "Optional. Data for points in the `time-in-heart-rate-zone` interval data type collection."
        },
        "activeMinutes": {
          "$ref": "ActiveMinutes",
          "description": "Optional. Data for points in the `active-minutes` interval data type collection."
        },
        "steps": {
          "description": "Optional. Data for points in the `steps` interval data type collection.",
          "$ref": "Steps"
        },
        "altitude": {
          "$ref": "Altitude",
          "description": "Optional. Data for points in the `altitude` interval data type collection."
        },
        "height": {
          "description": "Optional. Data for points in the `height` sample data type collection.",
          "$ref": "Height"
        },
        "basalEnergyBurned": {
          "$ref": "BasalEnergyBurned",
          "description": "Optional. Data for points in the `basal-energy-burned` interval data type collection."
        },
        "bodyFat": {
          "$ref": "BodyFat",
          "description": "Optional. Data for points in the `body-fat` sample data type collection."
        },
        "floors": {
          "$ref": "Floors",
          "description": "Optional. Data for points in the `floors` interval data type collection."
        },
        "dailyRestingHeartRate": {
          "description": "Optional. Data for points in the `daily-resting-heart-rate` daily data type collection.",
          "$ref": "DailyRestingHeartRate"
        },
        "exercise": {
          "description": "Optional. Data for points in the `exercise` session data type collection.",
          "$ref": "Exercise"
        }
      }
    },
    "RollupDataPoint": {
      "id": "RollupDataPoint",
      "properties": {
        "startTime": {
          "description": "Start time of the window this value aggregates over",
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "End time of the window this value aggregates over",
          "type": "string",
          "format": "google-datetime"
        },
        "activeZoneMinutes": {
          "$ref": "ActiveZoneMinutesRollupValue",
          "description": "Returned by default when rolling up data points from the `active-zone-minutes` data type, or when requested explicitly using the `active-zone-minutes` rollup type identifier."
        },
        "sedentaryPeriod": {
          "$ref": "SedentaryPeriodRollupValue",
          "description": "Returned by default when rolling up data points from the `sedentary-period` data type, or when requested explicitly using the `sedentary-period` rollup type identifier."
        },
        "totalCalories": {
          "description": "Returned by default when rolling up data points from the `total-calories` data type, or when requested explicitly using the `total-calories` rollup type identifier.",
          "$ref": "TotalCaloriesRollupValue"
        },
        "floors": {
          "$ref": "FloorsRollupValue",
          "description": "Returned by default when rolling up data points from the `floors` data type, or when requested explicitly using the `floors` rollup type identifier."
        },
        "distance": {
          "description": "Returned by default when rolling up data points from the `distance` data type, or when requested explicitly using the `distance` rollup type identifier.",
          "$ref": "DistanceRollupValue"
        },
        "bodyFat": {
          "$ref": "BodyFatRollupValue",
          "description": "Returned by default when rolling up data points from the `body-fat` data type, or when requested explicitly using the `body-fat` rollup type identifier."
        },
        "heartRate": {
          "$ref": "HeartRateRollupValue",
          "description": "Returned by default when rolling up data points from the `heart-rate` data type, or when requested explicitly using the `heart-rate` rollup type identifier."
        },
        "timeInHeartRateZone": {
          "description": "Returned by default when rolling up data points from the `time-in-heart-rate-zone` data type, or when requested explicitly using the `time-in-heart-rate-zone` rollup type identifier.",
          "$ref": "TimeInHeartRateZoneRollupValue"
        },
        "weight": {
          "$ref": "WeightRollupValue",
          "description": "Returned by default when rolling up data points from the `weight` data type, or when requested explicitly using the `weight` rollup type identifier."
        },
        "steps": {
          "description": "Returned by default when rolling up data points from the `steps` data type, or when requested explicitly using the `steps` rollup type identifier.",
          "$ref": "StepsRollupValue"
        },
        "altitude": {
          "$ref": "AltitudeRollupValue",
          "description": "Returned by default when rolling up data points from the `altitude` data type, or when requested explicitly using the `altitude` rollup type identifier."
        },
        "hydrationLog": {
          "$ref": "HydrationLogRollupValue",
          "description": "Returned by default when rolling up data points from the `hydration-log` data type, or when requested explicitly using the `hydration-log` rollup type identifier."
        },
        "activeMinutes": {
          "description": "Returned by default when rolling up data points from the `active-minutes` data type, or when requested explicitly using the `active-minutes` rollup type identifier.",
          "$ref": "ActiveMinutesRollupValue"
        },
        "activityLevel": {
          "$ref": "ActivityLevelRollupValue",
          "description": "Returned by default when rolling up data points from the `activity-level` data type, or when requested explicitly using the `activity-level` rollup type identifier."
        },
        "swimLengthsData": {
          "description": "Returned by default when rolling up data points from the `swim-lengths-data` data type, or when requested explicitly using the `swim-lengths-data` rollup type identifier.",
          "$ref": "SwimLengthsDataRollupValue"
        },
        "runVo2Max": {
          "$ref": "RunVO2MaxRollupValue",
          "description": "Returned by default when rolling up data points from the `run-vo2-max` data type, or when requested explicitly using the `run-vo2-max` rollup type identifier."
        },
        "caloriesInHeartRateZone": {
          "description": "Returned by default when rolling up data points from the `calories-in-heart-rate-zone` data type, or when requested explicitly using the `calories-in-heart-rate-zone` rollup type identifier.",
          "$ref": "CaloriesInHeartRateZoneRollupValue"
        }
      },
      "type": "object",
      "description": "Value of a rollup for a single physical time interval (aggregation window)"
    },
    "CivilTimeInterval": {
      "id": "CivilTimeInterval",
      "properties": {
        "end": {
          "description": "Required. The exclusive end of the range.",
          "$ref": "CivilDateTime"
        },
        "start": {
          "$ref": "CivilDateTime",
          "description": "Required. The inclusive start of the range."
        }
      },
      "description": "Counterpart of google.type.Interval, but using CivilDateTime.",
      "type": "object"
    },
    "MetricsSummary": {
      "type": "object",
      "description": "Summary metrics for an exercise.",
      "id": "MetricsSummary",
      "properties": {
        "averagePaceSecondsPerMeter": {
          "description": "Optional. Average pace in seconds per meter.",
          "type": "number",
          "format": "double"
        },
        "heartRateZoneDurations": {
          "description": "Optional. Time spent in each heart rate zone.",
          "$ref": "TimeInHeartRateZones"
        },
        "averageHeartRateBeatsPerMinute": {
          "description": "Optional. Average heart rate during the exercise.",
          "type": "string",
          "format": "int64"
        },
        "totalSwimLengths": {
          "description": "Optional. Number of full pool lengths completed during the exercise. Only present in the swimming exercises at the top level as in the summary of the whole exercise.",
          "type": "number",
          "format": "double"
        },
        "averageSpeedMillimetersPerSecond": {
          "type": "number",
          "format": "double",
          "description": "Optional. Average speed in millimeters per second."
        },
        "runVo2Max": {
          "description": "Optional. Run VO2 max value for the exercise. Only present in the running exercises at the top level as in the summary of the whole exercise.",
          "type": "number",
          "format": "double"
        },
        "distanceMillimeters": {
          "type": "number",
          "format": "double",
          "description": "Optional. Total distance covered by the user during the exercise."
        },
        "mobilityMetrics": {
          "description": "Optional. Mobility workouts specific metrics. Only present in the advanced running exercises.",
          "$ref": "MobilityMetrics"
        },
        "caloriesKcal": {
          "type": "number",
          "format": "double",
          "description": "Optional. Total calories burned by the user during the exercise."
        },
        "activeZoneMinutes": {
          "description": "Optional. Total active zone minutes for the exercise.",
          "type": "string",
          "format": "int64"
        },
        "steps": {
          "type": "string",
          "format": "int64",
          "description": "Optional. Total steps taken during the exercise."
        },
        "elevationGainMillimeters": {
          "description": "Optional. Total elevation gain during the exercise.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleDevicesandservicesHealthV4DataType": {
      "id": "GoogleDevicesandservicesHealthV4DataType",
      "properties": {
        "name": {
          "type": "string",
          "description": "Identifier. The resource name of the data type. Format: `users/{user}/dataTypes/{data_type}` See DataPoint.name for examples and possible values."
        }
      },
      "description": "Represents a type of health data a user can have data points recorded for. It matches the parent resource of collection containing data points of the given type. Clients currently do not need to interact with this resource directly.",
      "type": "object"
    },
    "DailyRestingHeartRate": {
      "id": "DailyRestingHeartRate",
      "properties": {
        "date": {
          "$ref": "Date",
          "description": "Required. Date (in the user's timezone) of the resting heart rate measurement."
        },
        "beatsPerMinute": {
          "description": "Required. The resting heart rate value in beats per minute.",
          "type": "string",
          "format": "int64"
        },
        "dailyRestingHeartRateMetadata": {
          "$ref": "DailyRestingHeartRateMetadata",
          "description": "Optional. Metadata for the daily resting heart rate."
        }
      },
      "description": "Measures the daily resting heart rate for a user, calculated using the all day heart rate measurements.",
      "type": "object"
    },
    "Subscriber": {
      "id": "Subscriber",
      "properties": {
        "createTime": {
          "description": "Output only. The time at which the subscriber was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "subscriberConfigs": {
          "type": "array",
          "description": "Optional. Configuration for the subscriber.",
          "items": {
            "$ref": "SubscriberConfig"
          }
        },
        "endpointUri": {
          "type": "string",
          "description": "Required. The full HTTPS URI where update notifications will be sent. The URI must be a valid URL and use HTTPS as the scheme. This endpoint will be verified during CreateSubscriber and UpdateSubscriber calls. See RPC documentation for verification details."
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name of the Subscriber. Format: projects/{project}/subscribers/{subscriber} The {project} ID is a Google Cloud Project ID or Project Number. The {subscriber} ID is user-settable (4-36 characters, matching /[a-z]([a-z0-9-]{2,34}[a-z0-9])/) if provided during creation, or system-generated otherwise (e.g., a UUID). Example (User-settable subscriber ID): projects/my-project/subscribers/my-sub-123 Example (System-generated subscriber ID): projects/my-project/subscribers/a1b2c3d4-e5f6-7890-1234-567890abcdef"
        },
        "updateTime": {
          "description": "Output only. The time at which the subscriber was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "endpointAuthorization": {
          "$ref": "EndpointAuthorization",
          "description": "Required. Authorization mechanism for a subscriber endpoint. This is required to ensure the endpoint can be verified."
        },
        "state": {
          "enum": [
            "STATE_UNSPECIFIED",
            "UNVERIFIED",
            "ACTIVE",
            "INACTIVE"
          ],
          "enumDescriptions": [
            "Represents an unspecified subscriber state.",
            "Represents an unverified subscriber. This is the initial state of the subscriber when it is created. The backend will verify the subscriber's endpoint_uri.",
            "Represents an active subscriber. The endpoint has been verified.",
            "Represents an inactive subscriber."
          ],
          "description": "Output only. The state of the subscriber.",
          "readOnly": true,
          "type": "string"
        }
      },
      "description": "-- Resource Messages -- A subscriber receives notifications from Google Health API.",
      "type": "object"
    },
    "WeightRollupValue": {
      "id": "WeightRollupValue",
      "properties": {
        "weightGramsAvg": {
          "description": "Average weight in grams.",
          "type": "number",
          "format": "double"
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the weight data type."
    },
    "ActiveZoneMinutesRollupValue": {
      "id": "ActiveZoneMinutesRollupValue",
      "properties": {
        "sumInPeakHeartZone": {
          "description": "Active zone minutes in `HeartRateZone.PEAK`.",
          "type": "string",
          "format": "int64"
        },
        "sumInCardioHeartZone": {
          "description": "Active zone minutes in `HeartRateZone.CARDIO`.",
          "type": "string",
          "format": "int64"
        },
        "sumInFatBurnHeartZone": {
          "type": "string",
          "format": "int64",
          "description": "Active zone minutes in `HeartRateZone.FAT_BURN`."
        }
      },
      "description": "Represents the result of the rollup of the active zone minutes data type.",
      "type": "object"
    },
    "DailyVO2Max": {
      "id": "DailyVO2Max",
      "properties": {
        "date": {
          "$ref": "Date",
          "description": "Required. The date for which the Daily VO2 max was measured."
        },
        "vo2MaxCovariance": {
          "type": "number",
          "format": "double",
          "description": "Optional. The covariance of the VO2 max value."
        },
        "cardioFitnessLevel": {
          "enumDescriptions": [
            "Unspecified cardio fitness level.",
            "Poor cardio fitness level.",
            "Fair cardio fitness level.",
            "Average cardio fitness level.",
            "Good cardio fitness level.",
            "Very good cardio fitness level.",
            "Excellent cardio fitness level."
          ],
          "type": "string",
          "enum": [
            "CARDIO_FITNESS_LEVEL_UNSPECIFIED",
            "POOR",
            "FAIR",
            "AVERAGE",
            "GOOD",
            "VERY_GOOD",
            "EXCELLENT"
          ],
          "description": "Optional. Represents the user's cardio fitness level based on their VO2 max."
        },
        "vo2Max": {
          "type": "number",
          "format": "double",
          "description": "Required. Daily VO2 max value measured as in ml consumed oxygen / kg of body weight / min."
        },
        "estimated": {
          "type": "boolean",
          "description": "Optional. An estimated field is added to indicate when the confidence has decreased sufficiently to consider the value an estimation."
        }
      },
      "type": "object",
      "description": "Contains a daily summary of the user's VO2 max (cardio fitness score), which is the maximum rate of oxygen the body can use during exercise."
    },
    "ActiveMinutesByActivityLevel": {
      "id": "ActiveMinutesByActivityLevel",
      "properties": {
        "activityLevel": {
          "enumDescriptions": [
            "Activity level is unspecified.",
            "Light activity level.",
            "Moderate activity level.",
            "Vigorous activity level."
          ],
          "type": "string",
          "enum": [
            "ACTIVITY_LEVEL_UNSPECIFIED",
            "LIGHT",
            "MODERATE",
            "VIGOROUS"
          ],
          "description": "Required. The level of activity."
        },
        "activeMinutes": {
          "type": "string",
          "format": "int64",
          "description": "Required. Number of whole minutes spent in activity."
        }
      },
      "type": "object",
      "description": "Active minutes at a given activity level."
    },
    "CaloriesInHeartRateZoneValue": {
      "id": "CaloriesInHeartRateZoneValue",
      "properties": {
        "kcal": {
          "description": "The amount of kilocalories burned in the specified heart rate zone.",
          "type": "number",
          "format": "double"
        },
        "heartRateZone": {
          "enumDescriptions": [
            "Unspecified heart rate zone.",
            "The light heart rate zone.",
            "The moderate heart rate zone.",
            "The vigorous heart rate zone.",
            "The peak heart rate zone."
          ],
          "type": "string",
          "enum": [
            "HEART_RATE_ZONE_TYPE_UNSPECIFIED",
            "LIGHT",
            "MODERATE",
            "VIGOROUS",
            "PEAK"
          ],
          "description": "The heart rate zone."
        }
      },
      "description": "Represents the amount of kilocalories burned in a specific heart rate zone.",
      "type": "object"
    },
    "HeartRateZone": {
      "type": "object",
      "description": "The heart rate zone.",
      "id": "HeartRateZone",
      "properties": {
        "maxBeatsPerMinute": {
          "description": "Required. Maximum heart rate for this zone in beats per minute.",
          "type": "string",
          "format": "int64"
        },
        "heartRateZoneType": {
          "enumDescriptions": [
            "Unspecified heart rate zone.",
            "The light heart rate zone.",
            "The moderate heart rate zone.",
            "The vigorous heart rate zone.",
            "The peak heart rate zone."
          ],
          "type": "string",
          "enum": [
            "HEART_RATE_ZONE_TYPE_UNSPECIFIED",
            "LIGHT",
            "MODERATE",
            "VIGOROUS",
            "PEAK"
          ],
          "description": "Required. The heart rate zone type."
        },
        "minBeatsPerMinute": {
          "type": "string",
          "format": "int64",
          "description": "Required. Minimum heart rate for this zone in beats per minute."
        }
      }
    },
    "RestingHeartRatePersonalRangeRollupValue": {
      "id": "RestingHeartRatePersonalRangeRollupValue",
      "properties": {
        "beatsPerMinuteMin": {
          "description": "The lower bound of the user's daily resting heart rate personal range.",
          "type": "number",
          "format": "double"
        },
        "beatsPerMinuteMax": {
          "description": "The upper bound of the user's daily resting heart rate personal range.",
          "type": "number",
          "format": "double"
        }
      },
      "type": "object",
      "description": "Represents the rollup value for the daily resting heart rate data type."
    },
    "ObservationTimeInterval": {
      "id": "ObservationTimeInterval",
      "properties": {
        "civilEndTime": {
          "$ref": "CivilDateTime",
          "readOnly": true,
          "description": "Output only. Observed interval end time in civil time in the timezone the subject is in at the end of the observed interval"
        },
        "civilStartTime": {
          "$ref": "CivilDateTime",
          "description": "Output only. Observed interval start time in civil time in the timezone the subject is in at the start of the observed interval",
          "readOnly": true
        },
        "endUtcOffset": {
          "description": "Required. The offset of the user's local time at the end of the observation relative to the Coordinated Universal Time (UTC).",
          "type": "string",
          "format": "google-duration"
        },
        "startTime": {
          "description": "Required. Observed interval start time.",
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. Observed interval end time."
        },
        "startUtcOffset": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. The offset of the user's local time at the start of the observation relative to the Coordinated Universal Time (UTC)."
        }
      },
      "description": "Represents a time interval of an observed data point.",
      "type": "object"
    },
    "RespiratoryRateSleepSummaryStatistics": {
      "description": "Respiratory rate statistics for a given sleep stage.",
      "type": "object",
      "id": "RespiratoryRateSleepSummaryStatistics",
      "properties": {
        "signalToNoise": {
          "description": "Optional. How trustworthy the data is for the computation.",
          "type": "number",
          "format": "double"
        },
        "breathsPerMinute": {
          "type": "number",
          "format": "double",
          "description": "Required. Average breaths per minute."
        },
        "standardDeviation": {
          "description": "Optional. Standard deviation of the respiratory rate during sleep.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "ActivityLevel": {
      "id": "ActivityLevel",
      "properties": {
        "interval": {
          "$ref": "ObservationTimeInterval",
          "description": "Required. Observed interval."
        },
        "activityLevelType": {
          "enumDescriptions": [
            "Unspecified activity level type.",
            "Sedentary activity level.",
            "Lightly active activity level.",
            "Moderately active activity level.",
            "Very active activity level."
          ],
          "description": "Required. Activity level type in the given time interval.",
          "type": "string",
          "enum": [
            "ACTIVITY_LEVEL_TYPE_UNSPECIFIED",
            "SEDENTARY",
            "LIGHTLY_ACTIVE",
            "MODERATELY_ACTIVE",
            "VERY_ACTIVE"
          ]
        }
      },
      "type": "object",
      "description": "Internal type to capture activity level during a certain time interval."
    },
    "Application": {
      "id": "Application",
      "properties": {
        "googleWebClientId": {
          "description": "Output only. The Google OAuth 2.0 client ID of the web application or service that recorded the data. This is the client ID used during the Google OAuth flow to obtain user credentials. This field is system-populated when the data is uploaded from Google Web API.",
          "readOnly": true,
          "type": "string"
        },
        "webClientId": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The client ID of the application that recorded the data. This ID is a legacy Fitbit API client ID, which is different from a Google OAuth client ID. Example format: `ABC123`. This field is system-populated and used for tracing data from legacy Fitbit API integrations. This field is system-populated when the data is uploaded from a legacy Fitbit API integration."
        },
        "packageName": {
          "description": "Output only. A unique identifier for the mobile application that was the source of the data. This is typically the application's package name on Android (e.g., `com.google.fitbit`) or the bundle ID on iOS. This field is informational and helps trace data origin. This field is system-populated when the data is uploaded from the Fitbit mobile application, Health Connect or Health Kit.",
          "readOnly": true,
          "type": "string"
        }
      },
      "description": "Optional metadata for the application that provided this data.",
      "type": "object"
    },
    "SplitSummary": {
      "description": "Represents splits or laps recorded within an exercise. Lap events partition a workout into segments based on criteria like distance, time, or calories.",
      "type": "object",
      "id": "SplitSummary",
      "properties": {
        "startTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. Lap start time"
        },
        "endTime": {
          "description": "Required. Lap end time",
          "type": "string",
          "format": "google-datetime"
        },
        "startUtcOffset": {
          "description": "Required. Lap start time offset from UTC",
          "type": "string",
          "format": "google-duration"
        },
        "splitType": {
          "enumDescriptions": [
            "Split type is unspecified.",
            "Manual split.",
            "Split by duration.",
            "Split by distance.",
            "Split by calories."
          ],
          "type": "string",
          "enum": [
            "SPLIT_TYPE_UNSPECIFIED",
            "MANUAL",
            "DURATION",
            "DISTANCE",
            "CALORIES"
          ],
          "description": "Required. Method used to split the exercise laps. Users may manually mark the lap as complete even if the tracking is automatic."
        },
        "endUtcOffset": {
          "description": "Required. Lap end time offset from UTC",
          "type": "string",
          "format": "google-duration"
        },
        "activeDuration": {
          "description": "Output only. Lap time excluding the pauses.",
          "readOnly": true,
          "type": "string",
          "format": "google-duration"
        },
        "metricsSummary": {
          "$ref": "MetricsSummary",
          "description": "Required. Summary metrics for this split."
        }
      }
    },
    "SwimLengthsDataRollupValue": {
      "id": "SwimLengthsDataRollupValue",
      "properties": {
        "strokeCountSum": {
          "type": "string",
          "format": "int64",
          "description": "Total number of swim strokes in the interval."
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the swim lengths data type."
    },
    "ActiveMinutesRollupByActivityLevel": {
      "description": "Active minutes by activity level.",
      "type": "object",
      "id": "ActiveMinutesRollupByActivityLevel",
      "properties": {
        "activityLevel": {
          "enumDescriptions": [
            "Activity level is unspecified.",
            "Light activity level.",
            "Moderate activity level.",
            "Vigorous activity level."
          ],
          "description": "The level of activity.",
          "type": "string",
          "enum": [
            "ACTIVITY_LEVEL_UNSPECIFIED",
            "LIGHT",
            "MODERATE",
            "VIGOROUS"
          ]
        },
        "activeMinutesSum": {
          "type": "string",
          "format": "int64",
          "description": "Number of whole minutes spent in activity."
        }
      }
    },
    "SleepStage": {
      "id": "SleepStage",
      "properties": {
        "updateTime": {
          "readOnly": true,
          "type": "string",
          "format": "google-datetime",
          "description": "Output only. Last update time of this sleep stages segment."
        },
        "startTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. Sleep stage start time."
        },
        "endTime": {
          "description": "Required. Sleep stage end time.",
          "type": "string",
          "format": "google-datetime"
        },
        "createTime": {
          "readOnly": true,
          "type": "string",
          "format": "google-datetime",
          "description": "Output only. Creation time of this sleep stages segment."
        },
        "startUtcOffset": {
          "description": "Required. The offset of the user's local time at the start of the sleep stage relative to the Coordinated Universal Time (UTC).",
          "type": "string",
          "format": "google-duration"
        },
        "type": {
          "enumDescriptions": [
            "The default unset value.",
            "Sleep stage AWAKE.",
            "Sleep stage LIGHT.",
            "Sleep stage DEEP.",
            "Sleep stage REM.",
            "Sleep stage ASLEEP.",
            "Sleep stage RESTLESS."
          ],
          "type": "string",
          "enum": [
            "SLEEP_STAGE_TYPE_UNSPECIFIED",
            "AWAKE",
            "LIGHT",
            "DEEP",
            "REM",
            "ASLEEP",
            "RESTLESS"
          ],
          "description": "Required. Sleep stage type: AWAKE, DEEP, REM, LIGHT etc."
        },
        "endUtcOffset": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. The offset of the user's local time at the end of the sleep stage relative to the Coordinated Universal Time (UTC)."
        }
      },
      "type": "object",
      "description": "Sleep stage segment."
    },
    "Exercise": {
      "type": "object",
      "description": "An exercise that stores information about a physical activity.",
      "id": "Exercise",
      "properties": {
        "metricsSummary": {
          "description": "Required. Summary metrics for this exercise ( )",
          "$ref": "MetricsSummary"
        },
        "interval": {
          "description": "Required. Observed exercise interval",
          "$ref": "SessionTimeInterval"
        },
        "notes": {
          "description": "Optional. Standard free-form notes captured at manual logging.",
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "Required. Exercise display name."
        },
        "splits": {
          "description": "Optional. The default split is 1 km or 1 mile. - if the movement distance is less than the default, then there are no splits - if the movement distance is greater than or equal to the default, then we have splits",
          "items": {
            "$ref": "SplitSummary"
          },
          "type": "array"
        },
        "activeDuration": {
          "description": "Optional. Duration excluding pauses.",
          "type": "string",
          "format": "google-duration"
        },
        "createTime": {
          "description": "Output only. Represents the timestamp of the creation of the exercise.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "exerciseType": {
          "enumDescriptions": [
            "Exercise type is unspecified.",
            "Running type.",
            "Walking type.",
            "Biking type.",
            "Swimming type.",
            "Hiking type.",
            "Yoga type.",
            "Pilates type.",
            "Workout type.",
            "HIIT type.",
            "Weightlifting type.",
            "Strength training type.",
            "Other type."
          ],
          "description": "Required. The type of activity performed during an exercise.",
          "type": "string",
          "enum": [
            "EXERCISE_TYPE_UNSPECIFIED",
            "RUNNING",
            "WALKING",
            "BIKING",
            "SWIMMING",
            "HIKING",
            "YOGA",
            "PILATES",
            "WORKOUT",
            "HIIT",
            "WEIGHTLIFTING",
            "STRENGTH_TRAINING",
            "OTHER"
          ]
        },
        "exerciseEvents": {
          "type": "array",
          "description": "Optional. Exercise events that happen during an exercise, such as pause & restarts.",
          "items": {
            "$ref": "ExerciseEvent"
          }
        },
        "splitSummaries": {
          "type": "array",
          "description": "Optional. Laps or splits recorded within an exercise. Laps could be split based on distance or other criteria (duration, etc.) Laps should not be overlapping with each other.",
          "items": {
            "$ref": "SplitSummary"
          }
        },
        "exerciseMetadata": {
          "$ref": "ExerciseMetadata",
          "description": "Optional. Additional exercise metadata."
        },
        "updateTime": {
          "readOnly": true,
          "type": "string",
          "format": "google-datetime",
          "description": "Output only. This is the timestamp of the last update to the exercise."
        }
      }
    },
    "DailySleepTemperatureDerivations": {
      "id": "DailySleepTemperatureDerivations",
      "properties": {
        "baselineTemperatureCelsius": {
          "description": "Optional. The user's baseline skin temperature. It is the median of the user's nightly skin temperature over the past 30 days.",
          "type": "number",
          "format": "double"
        },
        "nightlyTemperatureCelsius": {
          "description": "Required. The user's nightly skin temperature. It is the mean of skin temperature samples taken from the user’s sleep.",
          "type": "number",
          "format": "double"
        },
        "date": {
          "$ref": "Date",
          "description": "Required. Date for which the sleep temperature derivations are calculated."
        },
        "relativeNightlyStddev30dCelsius": {
          "description": "Optional. The standard deviation of the user’s relative nightly skin temperature (temperature - baseline) over the past 30 days.",
          "type": "number",
          "format": "double"
        }
      },
      "description": "Provides derived sleep temperature values, calculated from skin or internal device temperature readings during sleep.",
      "type": "object"
    },
    "FloorsRollupValue": {
      "type": "object",
      "description": "Represents the result of the rollup of the user's floors.",
      "id": "FloorsRollupValue",
      "properties": {
        "countSum": {
          "type": "string",
          "format": "int64",
          "description": "Sum of the floors count."
        }
      }
    },
    "AltitudeRollupValue": {
      "description": "Represents the result of the rollup of the user's altitude.",
      "type": "object",
      "id": "AltitudeRollupValue",
      "properties": {
        "gainMillimetersSum": {
          "description": "Sum of the altitude gain in millimeters.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "RespiratoryRateSleepSummary": {
      "type": "object",
      "description": "Records respiratory rate details during sleep. Can have multiple per day if the user sleeps multiple times.",
      "id": "RespiratoryRateSleepSummary",
      "properties": {
        "sampleTime": {
          "description": "Required. The time at which respiratory rate was measured.",
          "$ref": "ObservationSampleTime"
        },
        "remSleepStats": {
          "$ref": "RespiratoryRateSleepSummaryStatistics",
          "description": "Optional. Respiratory rate statistics for REM sleep."
        },
        "deepSleepStats": {
          "$ref": "RespiratoryRateSleepSummaryStatistics",
          "description": "Optional. Respiratory rate statistics for deep sleep."
        },
        "lightSleepStats": {
          "$ref": "RespiratoryRateSleepSummaryStatistics",
          "description": "Optional. Respiratory rate statistics for light sleep."
        },
        "fullSleepStats": {
          "description": "Required. Full respiratory rate statistics.",
          "$ref": "RespiratoryRateSleepSummaryStatistics"
        }
      }
    },
    "Height": {
      "type": "object",
      "description": "Body height measurement.",
      "id": "Height",
      "properties": {
        "sampleTime": {
          "description": "Required. The time at which the height was recorded.",
          "$ref": "ObservationSampleTime"
        },
        "heightMillimeters": {
          "description": "Required. Height of the user in millimeters.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "VO2Max": {
      "id": "VO2Max",
      "properties": {
        "vo2Max": {
          "type": "number",
          "format": "double",
          "description": "Required. VO2 max value measured as in ml consumed oxygen / kg of body weight / min."
        },
        "measurementMethod": {
          "enumDescriptions": [
            "Unspecified measurement method.",
            "Fitbit specific, measures VO2 max rate during a run.",
            "Google specific, measures VO2 max rate for a user based on their demographic data.",
            "Run as far as possible for 12 minutes. Distance correlated with age and gender translates to a VO2 max value.",
            "Maximum heart rate divided by the resting heart rate, with a multiplier applied. Does not require any exercise.",
            "Measured by a medical device called metabolic cart.",
            "Continuous 20m back-and-forth runs with increasing difficulty, until exhaustion.",
            "Measured using walking exercise.",
            "Healthkit specific, measures VO2 max rate by monitoring exercise to the user’s physical limit. Similar to COOPER_TEST or MULTISTAGE_FITNESS_TEST.",
            "Healthkit specific, estimates VO2 max rate based on low-intensity exercise. Similar to ROCKPORT_FITNESS_TEST.",
            "Healthkit specific, estimates VO2 max rate without any exercise. Similar to HEART_RATE_RATIO.",
            "Use when the method is not covered in this enum."
          ],
          "description": "Optional. The method used to measure the VO2 max value.",
          "type": "string",
          "enum": [
            "MEASUREMENT_METHOD_UNSPECIFIED",
            "FITBIT_RUN",
            "GOOGLE_DEMOGRAPHIC",
            "COOPER_TEST",
            "HEART_RATE_RATIO",
            "METABOLIC_CART",
            "MULTISTAGE_FITNESS_TEST",
            "ROCKPORT_FITNESS_TEST",
            "MAX_EXERCISE",
            "PREDICTION_SUB_MAX_EXERCISE",
            "PREDICTION_NON_EXERCISE",
            "OTHER"
          ]
        },
        "sampleTime": {
          "description": "Required. The time at which VO2 max was measured.",
          "$ref": "ObservationSampleTime"
        }
      },
      "description": "VO2 max measurement.",
      "type": "object"
    },
    "Distance": {
      "type": "object",
      "description": "Distance traveled over an interval of time.",
      "id": "Distance",
      "properties": {
        "millimeters": {
          "description": "Required. Distance in millimeters over the observed interval.",
          "type": "string",
          "format": "int64"
        },
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "ObservationTimeInterval"
        }
      }
    },
    "StepsRollupValue": {
      "description": "Represents the result of the rollup of the steps data type.",
      "type": "object",
      "id": "StepsRollupValue",
      "properties": {
        "countSum": {
          "type": "string",
          "format": "int64",
          "description": "Total number of steps in the interval."
        }
      }
    },
    "Floors": {
      "id": "Floors",
      "properties": {
        "interval": {
          "$ref": "ObservationTimeInterval",
          "description": "Required. Observed interval"
        },
        "count": {
          "type": "string",
          "format": "int64",
          "description": "Required. Number of floors in the recorded interval"
        }
      },
      "type": "object",
      "description": "Gained elevation measured in floors over the time interval"
    },
    "RollUpDataPointsRequest": {
      "id": "RollUpDataPointsRequest",
      "properties": {
        "dataSourceFamily": {
          "type": "string",
          "description": "Optional. The data source family name to roll up. If empty, data points from all available data sources will be rolled up. Format: `users/me/dataSourceFamilies/{data_source_family}` The supported values are: - `users/me/dataSourceFamilies/all-sources` - default value - `users/me/dataSourceFamilies/google-wearables` - tracker devices - `users/me/dataSourceFamilies/google-sources` - Google first party sources"
        },
        "windowSize": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. The size of the time window to group data points into before applying the aggregation functions."
        },
        "range": {
          "$ref": "Interval",
          "description": "Required. Closed-open range of data points that will be rolled up. The maximum range for `calories-in-heart-rate-zone`, `heart-rate`, `active-minutes` and `total-calories` is 14 days. The maximum range for all other data types is 90 days."
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. The maximum number of data points to return. If unspecified, at most 1440 data points will be returned. The maximum page size is 10000; values above that will be truncated accordingly."
        },
        "pageToken": {
          "description": "Optional. The next_page_token from a previous request, if any. All other request fields need to be the same as in the initial request when the page token is specified.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Request to roll up data points by physical time intervals."
    },
    "HeartRate": {
      "id": "HeartRate",
      "properties": {
        "sampleTime": {
          "$ref": "ObservationSampleTime",
          "description": "Required. Observation time"
        },
        "beatsPerMinute": {
          "type": "string",
          "format": "int64",
          "description": "Required. The heart rate value in beats per minute."
        },
        "metadata": {
          "$ref": "HeartRateMetadata",
          "description": "Optional. Metadata about the heart rate sample."
        }
      },
      "description": "A heart rate measurement.",
      "type": "object"
    },
    "ActivityLevelRollupValue": {
      "id": "ActivityLevelRollupValue",
      "properties": {
        "activityLevelRollupsByActivityLevelType": {
          "type": "array",
          "description": "List of total durations in each activity level type.",
          "items": {
            "$ref": "ActivityLevelRollupByActivityLevelType"
          }
        }
      },
      "description": "Represents the result of the rollup of the activity level data type.",
      "type": "object"
    },
    "HydrationLog": {
      "id": "HydrationLog",
      "properties": {
        "interval": {
          "description": "Required. Observed interval.",
          "$ref": "SessionTimeInterval"
        },
        "amountConsumed": {
          "$ref": "VolumeQuantity",
          "description": "Required. Amount of liquid (ex. water) consumed."
        }
      },
      "type": "object",
      "description": "Holds information about a user logged hydration."
    },
    "RollUpDataPointsResponse": {
      "description": "Response containing the list of rolled up data points.",
      "type": "object",
      "id": "RollUpDataPointsResponse",
      "properties": {
        "rollupDataPoints": {
          "type": "array",
          "description": "Values for each aggregation time window.",
          "items": {
            "$ref": "RollupDataPoint"
          }
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "SedentaryPeriodRollupValue": {
      "id": "SedentaryPeriodRollupValue",
      "properties": {
        "durationSum": {
          "type": "string",
          "format": "google-duration",
          "description": "The total time user spent sedentary during the interval."
        }
      },
      "type": "object",
      "description": "Represents the result of the rollup of the user's sedentary periods."
    },
    "DailyRollUpDataPointsRequest": {
      "type": "object",
      "description": "Request to roll up data points by civil time intervals.",
      "id": "DailyRollUpDataPointsRequest",
      "properties": {
        "windowSizeDays": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. Aggregation window size, in number of days. Defaults to 1 if not specified."
        },
        "dataSourceFamily": {
          "type": "string",
          "description": "Optional. The data source family name to roll up. If empty, data points from all available data sources will be rolled up. Format: `users/me/dataSourceFamilies/{data_source_family}` The supported values are: - `users/me/dataSourceFamilies/all-sources` - default value - `users/me/dataSourceFamilies/google-wearables` - tracker devices - `users/me/dataSourceFamilies/google-sources` - Google first party sources"
        },
        "range": {
          "description": "Required. Closed-open range of data points that will be rolled up. The start time must be aligned with the aggregation window. The maximum range for `calories-in-heart-rate-zone`, `heart-rate`, `active-minutes` and `total-calories` is 14 days. The maximum range for all other data types is 90 days.",
          "$ref": "CivilTimeInterval"
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. The maximum number of data points to return. If unspecified, at most 1440 data points will be returned. The maximum page size is 10000; values above that will be truncated accordingly."
        },
        "pageToken": {
          "type": "string",
          "description": "Optional. The `next_page_token` from a previous request, if any. All other request fields need to be the same as in the initial request when the page token is specified."
        }
      }
    },
    "HeartRateMetadata": {
      "id": "HeartRateMetadata",
      "properties": {
        "motionContext": {
          "type": "string",
          "enum": [
            "MOTION_CONTEXT_UNSPECIFIED",
            "ACTIVE",
            "SEDENTARY"
          ],
          "description": "Optional. Indicates the user’s level of activity when the heart rate sample was measured",
          "enumDescriptions": [
            "The default value when no data is available.",
            "The user is active.",
            "The user is inactive."
          ]
        },
        "sensorLocation": {
          "enumDescriptions": [
            "The default value when no data is available.",
            "Chest sensor.",
            "Wrist sensor.",
            "Finger sensor.",
            "Hand sensor.",
            "Ear lobe sensor.",
            "Foot sensor."
          ],
          "description": "Optional. Indicates the location of the sensor that measured the heart rate.",
          "type": "string",
          "enum": [
            "SENSOR_LOCATION_UNSPECIFIED",
            "CHEST",
            "WRIST",
            "FINGER",
            "HAND",
            "EAR_LOBE",
            "FOOT"
          ]
        }
      },
      "type": "object",
      "description": "Heart rate metadata."
    },
    "DailyRestingHeartRateMetadata": {
      "type": "object",
      "description": "Metadata for the daily resting heart rate.",
      "id": "DailyRestingHeartRateMetadata",
      "properties": {
        "calculationMethod": {
          "description": "Required. The method used to calculate the resting heart rate.",
          "type": "string",
          "enum": [
            "CALCULATION_METHOD_UNSPECIFIED",
            "WITH_SLEEP",
            "ONLY_WITH_AWAKE_DATA"
          ],
          "enumDescriptions": [
            "The calculation method is unspecified.",
            "The resting heart rate is calculated using the sleep data.",
            "The resting heart rate is calculated using only awake data."
          ]
        }
      }
    },
    "DateTime": {
      "id": "DateTime",
      "properties": {
        "day": {
          "description": "Optional. Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a datetime without a day.",
          "type": "integer",
          "format": "int32"
        },
        "hours": {
          "description": "Optional. Hours of day in 24 hour format. Should be from 0 to 23, defaults to 0 (midnight). An API may choose to allow the value \"24:00:00\" for scenarios like business closing time.",
          "type": "integer",
          "format": "int32"
        },
        "seconds": {
          "description": "Optional. Seconds of minutes of the time. Must normally be from 0 to 59, defaults to 0. An API may allow the value 60 if it allows leap-seconds.",
          "type": "integer",
          "format": "int32"
        },
        "nanos": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999, defaults to 0."
        },
        "month": {
          "type": "integer",
          "format": "int32",
          "description": "Optional. Month of year. Must be from 1 to 12, or 0 if specifying a datetime without a month."
        },
        "utcOffset": {
          "type": "string",
          "format": "google-duration",
          "description": "UTC offset. Must be whole seconds, between -18 hours and +18 hours. For example, a UTC offset of -4:00 would be represented as { seconds: -14400 }."
        },
        "timeZone": {
          "description": "Time zone.",
          "$ref": "TimeZone"
        },
        "year": {
          "description": "Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a datetime without a year.",
          "type": "integer",
          "format": "int32"
        },
        "minutes": {
          "description": "Optional. Minutes of hour of day. Must be from 0 to 59, defaults to 0.",
          "type": "integer",
          "format": "int32"
        }
      },
      "description": "Represents civil time (or occasionally physical time). This type can represent a civil time in one of a few possible ways: * When utc_offset is set and time_zone is unset: a civil time on a calendar day with a particular offset from UTC. * When time_zone is set and utc_offset is unset: a civil time on a calendar day in a particular time zone. * When neither time_zone nor utc_offset is set: a civil time on a calendar day in local time. The date is relative to the Proleptic Gregorian Calendar. If year, month, or day are 0, the DateTime is considered not to have a specific year, month, or day respectively. This type may also be used to represent a physical time if all the date and time fields are set and either case of the `time_offset` oneof is set. Consider using `Timestamp` message for physical time instead. If your use case also would like to store the user's timezone, that can be done in another field. This type is more flexible than some applications may want. Make sure to document and validate your application's limitations.",
      "type": "object"
    },
    "Identity": {
      "description": "Represents details about the Google user's identity.",
      "type": "object",
      "id": "Identity",
      "properties": {
        "legacyUserId": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The legacy Fitbit User identifier. This is the Fitbit ID used in the legacy Fitbit APIs (v1-v3). It can be referenced by clients migrating from the legacy Fitbit APIs to map their existing identifiers to the new Google user ID. It **must not** be used for any other purpose. It is not of any use for new clients using only the Google Health APIs. Valid values are strings of 1-63 characters, and valid characters are lowercase and uppercase letters, numbers, and hyphens."
        },
        "healthUserId": {
          "description": "Output only. The Google User Identifier in the Google Health APIs. It matches the `{user}` resource ID segment in the resource name paths, e.g. `users/{user}/dataTypes/steps`. Valid values are strings of 1-63 characters, and valid characters are lowercase and uppercase letters, numbers, and hyphens.",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "description": "Identifier. The resource name of this Identity resource. Format: `users/me/identity`",
          "type": "string"
        }
      }
    },
    "HeartRateVariability": {
      "id": "HeartRateVariability",
      "properties": {
        "rootMeanSquareOfSuccessiveDifferencesMilliseconds": {
          "type": "number",
          "format": "double",
          "description": "Optional. The root mean square of successive differences between normal heartbeats. This is a measure of heart rate variability used by Fitbit."
        },
        "sampleTime": {
          "description": "Required. The time of the heart rate variability measurement.",
          "$ref": "ObservationSampleTime"
        },
        "standardDeviationMilliseconds": {
          "type": "number",
          "format": "double",
          "description": "Optional. The standard deviation of the heart rate variability measurement."
        }
      },
      "type": "object",
      "description": "Captures user's heart rate variability (HRV) as measured by the root mean square of successive differences (RMSSD) between normal heartbeats or by standard deviation of the inter-beat intervals (SDNN)."
    }
  },
  "icons": {
    "x32": "http://www.google.com/images/icons/product/search-32.gif",
    "x16": "http://www.google.com/images/icons/product/search-16.gif"
  },
  "version": "v4",
  "id": "health:v4",
  "protocol": "rest",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        }
      }
    }
  },
  "description": "The Google Health API lets you view and manage health and fitness metrics and measurement data.",
  "ownerName": "Google",
  "baseUrl": "https://health.googleapis.com/",
  "basePath": "",
  "title": "Google Health API",
  "revision": "20260505",
  "documentationLink": "https://developers.google.com/health",
  "servicePath": "",
  "batchPath": "batch",
  "kind": "discovery#restDescription",
  "rootUrl": "https://health.googleapis.com/",
  "ownerDomain": "google.com",
  "resources": {
    "projects": {
      "resources": {
        "subscribers": {
          "methods": {
            "patch": {
              "description": "Updates the configuration of an existing subscriber, such as the endpoint URI or the data types it's interested in. **Endpoint Verification:** If the `endpoint_uri` or `endpoint_authorization` field is included in the `update_mask`, the backend will re-verify the endpoint. The verification process is the same as described in `CreateSubscriber`: 1. **Verification with Authorization:** POST to the new or existing `endpoint_uri` with the new or existing `Authorization` secret. Expects HTTP `201 Created`. 2. **Verification without Authorization:** POST to the `endpoint_uri` without the `Authorization` header. Expects HTTP `401 Unauthorized` or `403 Forbidden`. Both tests must pass using the potentially updated values for the subscriber update to succeed. If verification fails, the update will not be applied, and an error will be returned.",
              "httpMethod": "PATCH",
              "response": {
                "$ref": "Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "path": "v4/{+name}",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "updateMask": {
                  "description": "Optional. A field mask that specifies which fields of the Subscriber message are to be updated. This allows for partial updates. Supported fields: - endpoint_uri - subscriber_configs - endpoint_authorization",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                },
                "name": {
                  "description": "Identifier. The resource name of the Subscriber. Format: projects/{project}/subscribers/{subscriber} The {project} ID is a Google Cloud Project ID or Project Number. The {subscriber} ID is user-settable (4-36 characters, matching /[a-z]([a-z0-9-]{2,34}[a-z0-9])/) if provided during creation, or system-generated otherwise (e.g., a UUID). Example (User-settable subscriber ID): projects/my-project/subscribers/my-sub-123 Example (System-generated subscriber ID): projects/my-project/subscribers/a1b2c3d4-e5f6-7890-1234-567890abcdef",
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "pattern": "^projects/[^/]+/subscribers/[^/]+$"
                }
              },
              "flatPath": "v4/projects/{projectsId}/subscribers/{subscribersId}",
              "id": "health.projects.subscribers.patch",
              "request": {
                "$ref": "Subscriber"
              }
            },
            "delete": {
              "parameters": {
                "name": {
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the subscriber to delete. Format: projects/{project}/subscribers/{subscriber} Example: projects/my-project/subscribers/my-subscriber-123 The {subscriber} ID is user-settable (4-36 characters, matching /[a-z]([a-z0-9-]{2,34}[a-z0-9])/) or system-generated if not provided during creation.",
                  "pattern": "^projects/[^/]+/subscribers/[^/]+$"
                },
                "force": {
                  "description": "Optional. If set to true, any child resources (e.g., subscriptions) will also be deleted. If false (default) and child resources exist, the request will fail.",
                  "location": "query",
                  "type": "boolean"
                }
              },
              "id": "health.projects.subscribers.delete",
              "flatPath": "v4/projects/{projectsId}/subscribers/{subscribersId}",
              "parameterOrder": [
                "name"
              ],
              "path": "v4/{+name}",
              "description": "Deletes a subscriber registration. This will stop all notifications to the subscriber's endpoint.",
              "response": {
                "$ref": "Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "httpMethod": "DELETE"
            },
            "create": {
              "path": "v4/{+parent}/subscribers",
              "parameterOrder": [
                "parent"
              ],
              "description": "Registers a new subscriber endpoint to receive notifications. A subscriber represents an application or service that wishes to receive data change notifications for users who have granted consent. **Endpoint Verification:** For a subscriber to be successfully created, the provided `endpoint_uri` must be a valid HTTPS endpoint and must pass an automated verification check. The backend will send two HTTP POST requests to the `endpoint_uri`: 1. **Verification with Authorization:** * **Headers:** Includes `Content-Type: application/json` and `Authorization` (with the exact value from `CreateSubscriberPayload.endpoint_authorization.secret`). * **Body:** `{\"type\": \"verification\"}` * **Expected Response:** HTTP `201 Created`. 2. **Verification without Authorization:** * **Headers:** Includes `Content-Type: application/json`. The `Authorization` header is OMITTED. * **Body:** `{\"type\": \"verification\"}` * **Expected Response:** HTTP `401 Unauthorized` or `403 Forbidden`. Both tests must pass for the subscriber creation to succeed. If verification fails, the operation will not be completed and an error will be returned. This process ensures the endpoint is reachable and correctly validates the `Authorization` header.",
              "httpMethod": "POST",
              "response": {
                "$ref": "Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "parameters": {
                "subscriberId": {
                  "location": "query",
                  "type": "string",
                  "description": "Optional. The ID to use for the subscriber, which will become the final component of the subscriber's resource name. This value should be 4-36 characters, and valid characters are /[a-z]([a-z0-9-]{2,34}[a-z0-9])/."
                },
                "parent": {
                  "pattern": "^projects/[^/]+$",
                  "description": "Required. The parent resource where this subscriber will be created. Format: projects/{project} Example: projects/my-project-123",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "flatPath": "v4/projects/{projectsId}/subscribers",
              "id": "health.projects.subscribers.create",
              "request": {
                "$ref": "CreateSubscriberPayload"
              }
            },
            "list": {
              "response": {
                "$ref": "ListSubscribersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "httpMethod": "GET",
              "description": "Lists all subscribers registered within the owned Google Cloud Project.",
              "parameterOrder": [
                "parent"
              ],
              "path": "v4/{+parent}/subscribers",
              "id": "health.projects.subscribers.list",
              "flatPath": "v4/projects/{projectsId}/subscribers",
              "parameters": {
                "pageSize": {
                  "location": "query",
                  "type": "integer",
                  "format": "int32",
                  "description": "Optional. The maximum number of subscribers to return. The service may return fewer than this value. If unspecified, at most 50 subscribers will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000."
                },
                "pageToken": {
                  "location": "query",
                  "type": "string",
                  "description": "Optional. A page token, received from a previous `ListSubscribers` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListSubscribers` must match the call that provided the page token."
                },
                "parent": {
                  "pattern": "^projects/[^/]+$",
                  "description": "Required. The parent, which owns this collection of subscribers. Format: projects/{project}",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "users": {
      "resources": {
        "dataTypes": {
          "resources": {
            "dataPoints": {
              "methods": {
                "exportExerciseTcx": {
                  "description": "Exports exercise data in TCX format. Note: While the Authorization section below states that any one of the listed scopes is accepted, this specific method requires the user to provide both one of the `activity_and_fitness` scopes (`normal` or `readonly`) AND one of the `location` scopes (`normal` or `readonly`) in their access token to succeed.",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "ExportExerciseTcxResponse"
                  },
                  "path": "v4/{+name}:exportExerciseTcx",
                  "parameterOrder": [
                    "name"
                  ],
                  "useMediaDownloadService": true,
                  "parameters": {
                    "name": {
                      "pattern": "^users/[^/]+/dataTypes/[^/]+/dataPoints/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "description": "Required. The resource name of the exercise data point to export. Format: `users/{user}/dataTypes/exercise/dataPoints/{data_point}` Example: `users/me/dataTypes/exercise/dataPoints/2026443605080188808` The `{user}` is the alias `\"me\"` currently. Future versions may support user IDs. The `{data_point}` ID maps to the exercise ID, which is a long integer."
                    },
                    "partialData": {
                      "location": "query",
                      "type": "boolean",
                      "description": "Optional. Indicates whether to include the TCX data points when the GPS data is not available. If not specified, defaults to `false` and partial data will not be included."
                    }
                  },
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints/{dataPointsId}:exportExerciseTcx",
                  "id": "health.users.dataTypes.dataPoints.exportExerciseTcx",
                  "supportsMediaDownload": true
                },
                "get": {
                  "id": "health.users.dataTypes.dataPoints.get",
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints/{dataPointsId}",
                  "parameters": {
                    "name": {
                      "pattern": "^users/[^/]+/dataTypes/[^/]+/dataPoints/[^/]+$",
                      "description": "Required. The name of the data point to retrieve. Format: `users/{user}/dataTypes/{data_type}/dataPoints/{data_point}` See DataPoint.name for examples and possible values.",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "path": "v4/{+name}",
                  "response": {
                    "$ref": "DataPoint"
                  },
                  "httpMethod": "GET",
                  "description": "Get a single identifyable data point."
                },
                "reconcile": {
                  "id": "health.users.dataTypes.dataPoints.reconcile",
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints:reconcile",
                  "parameters": {
                    "dataSourceFamily": {
                      "description": "Optional. The data source family name to reconcile. If empty, data points from all data sources will be reconciled. Format: `users/me/dataSourceFamilies/{data_source_family}` The supported values are: - `users/me/dataSourceFamilies/all-sources` - default value - `users/me/dataSourceFamilies/google-wearables` - tracker devices - `users/me/dataSourceFamilies/google-sources` - Google first party sources",
                      "location": "query",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "Optional. The maximum number of data points to return. If unspecified, at most 1440 data points will be returned. The maximum page size is 10000; values above that will be truncated accordingly. For `exercise` and `sleep` the default page size is 25. The maximum page size for `exercise` and `sleep` is 25.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "filter": {
                      "description": "Optional. Filter expression based on https://aip.dev/160. A time range, either physical or civil, can be specified. See the ListDataPointsRequest.filter for the supported fields and syntax.",
                      "location": "query",
                      "type": "string"
                    },
                    "pageToken": {
                      "description": "Optional. The `next_page_token` from a previous request, if any.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "description": "Required. Parent data type of the Data Point collection. Format: `users/me/dataTypes/{data_type}`, e.g.: - `users/me/dataTypes/steps` - `users/me/dataTypes/heart-rate` For a list of the supported data types see the DataPoint data union field.",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^users/[^/]+/dataTypes/[^/]+$"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v4/{+parent}/dataPoints:reconcile",
                  "response": {
                    "$ref": "ReconcileDataPointsResponse"
                  },
                  "httpMethod": "GET",
                  "description": "Reconcile data points from multiple data sources into a single data stream."
                },
                "rollUp": {
                  "id": "health.users.dataTypes.dataPoints.rollUp",
                  "request": {
                    "$ref": "RollUpDataPointsRequest"
                  },
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints:rollUp",
                  "parameters": {
                    "parent": {
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "description": "Required. Parent data type of the Data Point collection. Format: `users/{user}/dataTypes/{data_type}`, e.g.: - `users/me/dataTypes/steps` - `users/me/dataTypes/distance` For a list of the supported data types see the RollupDataPoint value union field.",
                      "pattern": "^users/[^/]+/dataTypes/[^/]+$"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v4/{+parent}/dataPoints:rollUp",
                  "response": {
                    "$ref": "RollUpDataPointsResponse"
                  },
                  "httpMethod": "POST",
                  "description": "Roll up data points over physical time intervals for supported data types."
                },
                "patch": {
                  "parameters": {
                    "name": {
                      "description": "Identifier. Data point name, only supported for the subset of identifiable data types. For the majority of the data types, individual data points do not need to be identified and this field would be empty. Format: `users/{user}/dataTypes/{data_type}/dataPoints/{data_point}` Example: `users/abcd1234/dataTypes/sleep/dataPoints/a1b2c3d4-e5f6-7890-1234-567890abcdef` The `{user}` ID is a system-generated identifier, as described in Identity.health_user_id. The `{data_type}` ID corresponds to the kebab-case version of the field names in the DataPoint data union field, e.g. `total-calories` for the `total_calories` field. The `{data_point}` ID can be client-provided or system-generated. If client-provided, it must be a string of 4-63 characters, containing only lowercase letters, numbers, and hyphens.",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^users/[^/]+/dataTypes/[^/]+/dataPoints/[^/]+$"
                    }
                  },
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints/{dataPointsId}",
                  "id": "health.users.dataTypes.dataPoints.patch",
                  "request": {
                    "$ref": "DataPoint"
                  },
                  "description": "Updates a single identifiable data point. If a data point with the specified `name` is not found, the request will fail.",
                  "httpMethod": "PATCH",
                  "response": {
                    "$ref": "Operation"
                  },
                  "path": "v4/{+name}",
                  "parameterOrder": [
                    "name"
                  ]
                },
                "dailyRollUp": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v4/{+parent}/dataPoints:dailyRollUp",
                  "description": "Roll up data points over civil time intervals for supported data types.",
                  "response": {
                    "$ref": "DailyRollUpDataPointsResponse"
                  },
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "pattern": "^users/[^/]+/dataTypes/[^/]+$",
                      "description": "Required. Parent data type of the Data Point collection. Format: `users/{user}/dataTypes/{data_type}`, e.g.: - `users/me/dataTypes/steps` - `users/me/dataTypes/distance` For a list of the supported data types see the DailyRollupDataPoint value union field.",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "id": "health.users.dataTypes.dataPoints.dailyRollUp",
                  "request": {
                    "$ref": "DailyRollUpDataPointsRequest"
                  },
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints:dailyRollUp"
                },
                "create": {
                  "response": {
                    "$ref": "Operation"
                  },
                  "httpMethod": "POST",
                  "description": "Creates a single identifiable data point.",
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v4/{+parent}/dataPoints",
                  "id": "health.users.dataTypes.dataPoints.create",
                  "request": {
                    "$ref": "DataPoint"
                  },
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints",
                  "parameters": {
                    "parent": {
                      "pattern": "^users/[^/]+/dataTypes/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "description": "Required. The parent resource name where the data point will be created. Format: `users/{user}/dataTypes/{data_type}`"
                    }
                  }
                },
                "list": {
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "ListDataPointsResponse"
                  },
                  "description": "Query user health and fitness data points.",
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints",
                  "id": "health.users.dataTypes.dataPoints.list",
                  "path": "v4/{+parent}/dataPoints",
                  "parameters": {
                    "pageSize": {
                      "location": "query",
                      "type": "integer",
                      "format": "int32",
                      "description": "Optional. The maximum number of data points to return. If unspecified, at most 1440 data points will be returned. The maximum page size is 10000; values above that will be truncated accordingly. For `exercise` and `sleep` the default page size is 25. The maximum page size for `exercise` and `sleep` is 25."
                    },
                    "filter": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. Filter expression following https://google.aip.dev/160. A time range (either physical or civil) can be specified. The supported filter fields are: - Interval start time: - Pattern: `{interval_data_type}.interval.start_time` - Supported comparison operators: `\u003e=`, `\u003c` - Timestamp literal expected in RFC-3339 format - Supported logical operators: `AND` - Example: - `steps.interval.start_time \u003e= \"2023-11-24T00:00:00Z\" AND steps.interval.start_time \u003c \"2023-11-25T00:00:00Z\"` - `distance.interval.start_time \u003e= \"2024-08-14T12:34:56Z\"` - Interval civil start time: - Pattern: `{interval_data_type}.interval.civil_start_time` - Supported comparison operators: `\u003e=`, `\u003c` - Date with optional time literal expected in ISO 8601 `YYYY-MM-DD[THH:mm:ss]` format - Supported logical operators: `AND` - Example: - `steps.interval.civil_start_time \u003e= \"2023-11-24\" AND steps.interval.civil_start_time \u003c \"2023-11-25\"` - `distance.interval.civil_start_time \u003e= \"2024-08-14T12:34:56\"` - Sample observation physical time: - Pattern: `{sample_data_type}.sample_time.physical_time` - Supported comparison operators: `\u003e=`, `\u003c` - Timestamp literal expected in RFC-3339 format - Supported logical operators: `AND` - Example: - `weight.sample_time.physical_time \u003e= \"2023-11-24T00:00:00Z\" AND weight.sample_time.physical_time \u003c \"2023-11-25T00:00:00Z\"` - `weight.sample_time.physical_time \u003e= \"2024-08-14T12:34:56Z\"` - Sample observation civil time: - Pattern: `{sample_data_type}.sample_time.civil_time` - Supported comparison operators: `\u003e=`, `\u003c` - Date with optional time literal expected in ISO 8601 `YYYY-MM-DD[THH:mm:ss]` format - Supported logical operators: `AND` - Example: - `weight.sample_time.civil_time \u003e= \"2023-11-24\" AND weight.sample_time.civil_time \u003c \"2023-11-25\"` - `weight.sample_time.civil_time \u003e= \"2024-08-14T12:34:56\"` - Daily summary date: - Pattern: `{daily_summary_data_type}.date` - Supported comparison operators: `\u003e=`, `\u003c` - Date literal expected in ISO 8601 `YYYY-MM-DD` format - Supported logical operators: `AND` - Example: - `daily_heart_rate_variability.date \u003c \"2024-08-15\"` - Session civil start time (**Excluding Sleep**): - Pattern: `{session_data_type}.interval.civil_start_time` - Supported comparison operators: `\u003e=`, `\u003c` - Date with optional time literal expected in ISO 8601 `YYYY-MM-DD[THH:mm:ss]` format - Supported logical operators: `AND` - Example: - `exercise.interval.civil_start_time \u003e= \"2023-11-24\" AND exercise.interval.civil_start_time \u003c \"2023-11-25\"` - `exercise.interval.civil_start_time \u003e= \"2024-08-14T12:34:56\"` - Session end time (**Sleep specific**): - Pattern: `sleep.interval.end_time` - Supported comparison operators: `\u003e=`, `\u003c` - Timestamp literal expected in RFC-3339 format - Supported logical operators: `AND`, `OR` - Example: - `sleep.interval.end_time \u003e= \"2023-11-24T00:00:00Z\" AND sleep.interval.end_time \u003c \"2023-11-25T00:00:00Z\"` - Session civil end time (**Sleep specific**): - Pattern: `sleep.interval.civil_end_time` - Supported comparison operators: `\u003e=`, `\u003c` - Date with optional time literal expected in ISO 8601 `YYYY-MM-DD[THH:mm:ss]` format - Supported logical operators: `AND`, `OR` - Example: - `sleep.interval.civil_end_time \u003e= \"2023-11-24\" AND sleep.interval.civil_end_time \u003c \"2023-11-25\"` Data points in the response will be ordered by the interval start time in descending order."
                    },
                    "pageToken": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. The `next_page_token` from a previous request, if any."
                    },
                    "parent": {
                      "description": "Required. Parent data type of the Data Point collection. Format: `users/me/dataTypes/{data_type}`, e.g.: - `users/me/dataTypes/steps` - `users/me/dataTypes/weight` For a list of the supported data types see the DataPoint data union field.",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^users/[^/]+/dataTypes/[^/]+$"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ]
                },
                "batchDelete": {
                  "flatPath": "v4/users/{usersId}/dataTypes/{dataTypesId}/dataPoints:batchDelete",
                  "id": "health.users.dataTypes.dataPoints.batchDelete",
                  "request": {
                    "$ref": "BatchDeleteDataPointsRequest"
                  },
                  "parameters": {
                    "parent": {
                      "pattern": "^users/[^/]+/dataTypes/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "description": "Optional. Parent (data type) for the Data Point collection Format: `users/me/dataTypes/{data_type}`, e.g.: - `users/me/dataTypes/steps` - `users/me/dataTypes/-` For a list of the supported data types see the DataPoint data union field. Deleting data points across multiple data type collections is supported following https://aip.dev/159. If this is set, the parent of all of the data points specified in `names` must match this field."
                    }
                  },
                  "httpMethod": "POST",
                  "response": {
                    "$ref": "Operation"
                  },
                  "description": "Delete a batch of identifyable data points.",
                  "path": "v4/{+parent}/dataPoints:batchDelete",
                  "parameterOrder": [
                    "parent"
                  ]
                }
              }
            }
          }
        }
      },
      "methods": {
        "getProfile": {
          "path": "v4/{+name}",
          "parameters": {
            "name": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "Required. The name of the Profile. Format: `users/me/profile`.",
              "pattern": "^users/[^/]+/profile$"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "flatPath": "v4/users/{usersId}/profile",
          "id": "health.users.getProfile",
          "description": "Returns user Profile details.",
          "httpMethod": "GET",
          "response": {
            "$ref": "Profile"
          }
        },
        "getSettings": {
          "description": "Returns user settings details.",
          "response": {
            "$ref": "Settings"
          },
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "Required. The name of the Settings. Format: `users/me/settings`.",
              "location": "path",
              "required": true,
              "type": "string",
              "pattern": "^users/[^/]+/settings$"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "path": "v4/{+name}",
          "id": "health.users.getSettings",
          "flatPath": "v4/users/{usersId}/settings"
        },
        "updateProfile": {
          "path": "v4/{+name}",
          "parameterOrder": [
            "name"
          ],
          "httpMethod": "PATCH",
          "response": {
            "$ref": "Profile"
          },
          "description": "Updates the user's profile details.",
          "flatPath": "v4/users/{usersId}/profile",
          "id": "health.users.updateProfile",
          "request": {
            "$ref": "Profile"
          },
          "parameters": {
            "name": {
              "pattern": "^users/[^/]+/profile$",
              "location": "path",
              "required": true,
              "type": "string",
              "description": "Identifier. The resource name of this Profile resource. Format: `users/{user}/profile` Example: `users/1234567890/profile` or `users/me/profile` The {user} ID is a system-generated Google Health API user ID, a string of 1-63 characters consisting of lowercase and uppercase letters, numbers, and hyphens. The literal `me` can also be used to refer to the authenticated user."
            },
            "updateMask": {
              "location": "query",
              "type": "string",
              "format": "google-fieldmask",
              "description": "Optional. The list of fields to be updated."
            }
          }
        },
        "updateSettings": {
          "parameters": {
            "updateMask": {
              "description": "Optional. The list of fields to be updated.",
              "location": "query",
              "type": "string",
              "format": "google-fieldmask"
            },
            "name": {
              "pattern": "^users/[^/]+/settings$",
              "description": "Identifier. The resource name of this Settings resource. Format: `users/{user}/settings` Example: `users/1234567890/settings` or `users/me/settings` The {user} ID is a system-generated Google Health API user ID, a string of 1-63 characters consisting of lowercase and uppercase letters, numbers, and hyphens. The literal `me` can also be used to refer to the authenticated user.",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "flatPath": "v4/users/{usersId}/settings",
          "id": "health.users.updateSettings",
          "request": {
            "$ref": "Settings"
          },
          "path": "v4/{+name}",
          "parameterOrder": [
            "name"
          ],
          "description": "Updates the user's settings details.",
          "httpMethod": "PATCH",
          "response": {
            "$ref": "Settings"
          }
        },
        "getIdentity": {
          "parameters": {
            "name": {
              "description": "Required. The resource name of the Identity. Format: `users/me/identity`",
              "location": "path",
              "required": true,
              "type": "string",
              "pattern": "^users/[^/]+/identity$"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "path": "v4/{+name}",
          "id": "health.users.getIdentity",
          "flatPath": "v4/users/{usersId}/identity",
          "description": "Gets the user's identity. It includes the legacy Fitbit user ID and the Google user ID and it can be used by migrating clients to map identifiers between the two systems.",
          "response": {
            "$ref": "Identity"
          },
          "httpMethod": "GET"
        }
      }
    }
  },
  "canonicalName": "Google Health API",
  "fullyEncodeReservedExpansion": true,
  "name": "health"
}
