Daily Data & Scores
Read calendar-aligned metrics and Sonar scores in a compact columnar shape.
Both endpoints return a dates axis and one equally sized array per requested type. Index i in every series is the value for dates[i].
Daily Metrics
/v1/users/{id}/dailyReturns one normalized value per day and metric across the inclusive range.
| Query parameter | Default | Rules |
|---|---|---|
types | all public daily metrics | Comma-separated IDs from the Metric Catalog |
from_date | 29 days before to_date | YYYY-MM-DD |
to_date | current date in the user’s timezone | YYYY-MM-DD |
The maximum inclusive range is 366 days. from_date cannot be later than to_date.
Every date is a calendar day in the timezone saved on the user’s profile, not a UTC date. If the profile has no timezone, Sonar uses UTC. See The Health-Data Clock.
GET /v1/users/7e4e91a5-1e4f-4fc2-903c-251046d2a4d3/daily?types=steps,distance,resting_heart_rate&from_date=2026-09-01&to_date=2026-09-03{
"from_date": "2026-09-01",
"to_date": "2026-09-03",
"dates": ["2026-09-01", "2026-09-02", "2026-09-03"],
"series": {
"steps": [9418, 7310, null],
"distance": [7.1, 5.4, null],
"resting_heart_rate": [52, 54.5, null]
}
}Missing readings are null; dates are never omitted. Keys in series follow the requested types order. Whitespace around IDs is ignored and duplicate IDs are returned once. An empty or unsupported list returns 422 invalid_types.
Scores
/v1/users/{id}/scoresReturns Sonar scores in the daily shape, plus the latest scored day per requested score.
| Query parameter | Default | Rules |
|---|---|---|
types | all five scores | Comma-separated score IDs |
from_date | 29 days before to_date | YYYY-MM-DD |
to_date | current date in the user’s timezone | YYYY-MM-DD |
{
"from_date": "2026-09-01",
"to_date": "2026-09-03",
"dates": ["2026-09-01", "2026-09-02", "2026-09-03"],
"series": {
"sleep_score": [84, 88, null],
"recovery_score": [79, 82, null]
},
"latest": {
"sleep_score": { "date": "2026-09-02", "value": 88, "previous_value": 84 },
"recovery_score": { "date": "2026-09-02", "value": 82, "previous_value": 79 }
}
}latest is null when a requested score has no value in the range. previous_value is the prior calendar day’s value, or null when that day is absent or outside the range.
Scores use their own endpoint
Score IDs are rejected by /daily, and daily metric IDs are rejected by /scores. See Health Scores for the five score IDs and their meaning.
Sonar