What body_temperature_basal measures
body_temperature_basal is the day’s average of the user’s basal body temperature readings, the resting core temperature measured on waking, in degrees Celsius.
| Field | body_temperature_basal |
|---|---|
| Unit | Celsius |
| Reported | Daily average, on days with at least one reading |
| Window | Midnight to midnight, profile local time |
| Wearable required | Yes, a thermometer or sensor writing to the platform |
| API | GET /api/v1/profile/biomarker/{externalId}?categories=vitals&types=body_temperature_basal plus a date range |
| Webhook | BiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id. |
Data sources
| Platform | Record | Notes |
|---|---|---|
| iOS, HealthKit | basalBodyTemperature | Fertility tracking apps, wearable thermometers, and manual entries |
| Android, Health Connect | BasalBodyTemperatureRecord | Same kinds of apps |
| Direct integrations | Provider-dependent | |
| Phone only | Manual entries only |
How Sahha calculates body_temperature_basal
- Pick one source for the day within the temperature category, which also covers sleeping skin temperature. One source wins per day; readings are never blended.
- Average that source’s readings with an end time inside the local day. Usually there is one.
Absence means no reading that day.
Interpreting the value
The shift is the signal. Basal temperature is used for its small, consistent rise after ovulation and its fall before menstruation. Absolute values vary by person and by thermometer. Charts of the daily value over a cycle are the established presentation.
Consistency of measurement matters more than the device. A reading taken after getting up, or at a different time, is not a basal reading. The biomarker cannot tell.
Related scores and insights
Basal body temperature is not a score factor and has no trend or comparison insight. The reproductive biomarkers planned for 2026 are the natural companion.
Use cases
A cycle chart. Plot the daily value over the current cycle with a rolling 3-day average to smooth single-day noise, and mark the day the average rises above the preceding six days.
GET /api/v1/profile/biomarker/{externalId}?categories=vitals&types=body_temperature_basal&startDateTime=2026-08-03&endDateTime=2026-09-02A reminder loop. Absence of a reading by mid-morning is the trigger for users who chart.
Limitations
- Sparse and user-driven. Coverage depends on the user measuring.
- Not the same as wrist temperature. Do not merge the two fields.
- Absence is not zero.
Related guides
- Sleeping skin temperature for the passive wrist measurement
- Data dictionary in the developer docs