The Google Health API provides data types for tracking reproductive health, symptoms, and moods. These types allow you to log menstrual periods, ovulation test results, and associated physical and emotional states.
Supported data types
Data typedataType
filter parameter |
Available operations |
Scope |
|---|---|---|
|
Menstrual Period
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Moods
|
create, update, batchDelete | .mindfulness.writeonly |
|
Ovulation Test
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Symptoms
|
create, update, batchDelete | .logged_symptoms.writeonly |
Menstrual Period
A Menstrual Period represents a period interval logged by a user. For a complete
list of fields and descriptions, see
MenstrualPeriod.
Guidelines for logging periods
- End dates are required: All period records must include an end date or time. End dates should never be null.
- Handling ongoing periods: If you are unable to provide an end date when the record is created (for example, if the period is ongoing), set the end date to match the start date. Update the record daily, setting the end date to the current date, until the period ends and the final end date is confirmed.
- Confirmed periods: All period records are treated as confirmed periods.
Create a menstrual period
To create a menstrual period entry, send a POST request to the
menstrual-period data points endpoint. The response includes the name field
containing the data-point-id, which can be used in a
Batch Delete or
Update (Patch) request.
Request
POST https://health.googleapis.com/v4/users/me/dataTypes/menstrual-period/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"menstrualPeriod": {
"interval": {
"startTime": "2026-07-01T08:00:00Z",
"endTime": "2026-07-05T20:00:00Z"
},
"notes": "Regular flow reported."
}
}Response
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/user-id/dataTypes/menstrual-period/dataPoints/data-point-id",
"menstrualPeriod": {
"interval": {
"startTime": "2026-07-01T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-07-05T20:00:00Z",
"endUtcOffset": "0s",
"civilStartTime": {
"date": { "year": 2026, "month": 7, "day": 1 },
"time": { "hours": 8 }
},
"civilEndTime": {
"date": { "year": 2026, "month": 7, "day": 5 },
"time": { "hours": 20 }
}
},
"notes": "Regular flow reported."
}
}
}Ovulation Test
Records an ovulation test observation. For a complete list of fields and
descriptions, see
OvulationTest.
Create an ovulation test
To log an ovulation test result, send a POST request to the ovulation-test
data points endpoint. The response includes the name field containing the
data-point-id, which can be used in a Batch Delete or
Update (Patch) request.
Request
POST https://health.googleapis.com/v4/users/me/dataTypes/ovulation-test/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"ovulationTest": {
"sampleTime": {
"physicalTime": "2026-07-14T07:30:00Z"
},
"result": "LUTEINIZING_HORMONE_SURGE"
}
}Response
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/user-id/dataTypes/ovulation-test/dataPoints/data-point-id",
"ovulationTest": {
"sampleTime": {
"physicalTime": "2026-07-14T07:30:00Z",
"utcOffset": "0s",
"civilTime": {
"date": { "year": 2026, "month": 7, "day": 14 },
"time": { "hours": 7, "minutes": 30 }
}
},
"result": "LUTEINIZING_HORMONE_SURGE"
}
}
}Symptoms
Records physical symptoms experienced at a given timestamp. For a complete
list of fields and descriptions, see
Symptoms.
Create a symptom log
To log physical symptoms, send a POST request to the symptoms data points
endpoint. The response includes the name field containing the data-point-id,
which can be used in a Batch Delete or
Update (Patch) request.
Request
POST https://health.googleapis.com/v4/users/me/dataTypes/symptoms/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"symptoms": {
"sampleTime": {
"physicalTime": "2026-07-02T19:00:00Z"
},
"symptoms": [ "CRAMPS", "BLOATED", "FATIGUE" ]
}
}Response
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/user-id/dataTypes/symptoms/dataPoints/data-point-id",
"symptoms": {
"sampleTime": {
"physicalTime": "2026-07-02T19:00:00Z",
"utcOffset": "0s",
"civilTime": {
"date": { "year": 2026, "month": 7, "day": 2 },
"time": { "hours": 19 }
}
},
"symptoms": [ "CRAMPS", "BLOATED", "FATIGUE" ]
}
}
}Moods
Records emotional states and valances at a given timestamp. For a complete
list of fields and descriptions, see
Moods.
Create a mood log
To log emotional states, send a POST request to the moods data points
endpoint. The response includes the name field containing the data-point-id,
which can be used in a Batch Delete or
Update (Patch) request.
Request
POST https://health.googleapis.com/v4/users/me/dataTypes/moods/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"moods": {
"sampleTime": {
"physicalTime": "2026-07-02T21:00:00Z"
},
"moods": [ "CALM", "CONTENT" ],
"valences": [ "PLEASANT" ]
}
}Response
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/user-id/dataTypes/moods/dataPoints/data-point-id",
"moods": {
"sampleTime": {
"physicalTime": "2026-07-02T21:00:00Z",
"utcOffset": "0s",
"civilTime": {
"date": { "year": 2026, "month": 7, "day": 2 },
"time": { "hours": 21 }
}
},
"moods": [ "CALM", "CONTENT" ],
"valences": [ "PLEASANT" ]
}
}
}Batch Delete
To delete one or more data points, send a POST request to the batchDelete
endpoint with the resource names of the entries to remove.
POST https://health.googleapis.com/v4/users/me/dataTypes/data-type-name/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json
{
"names": [
"users/me/dataTypes/data-type/dataPoints/data-point-id"
]
}Example: Deleting multiple data points
To delete multiple data points in a single request, include their resource
names in the names array.
POST https://health.googleapis.com/v4/users/me/dataTypes/symptoms/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json
{
"names": [
"users/user-id/dataTypes/symptoms/dataPoints/symptom-id-1",
"users/user-id/dataTypes/symptoms/dataPoints/symptom-id-2"
]
}