Resources
Overview
There are two broad resource categories provided by Vital:
- A Summary type is a summarization of a specific calendar day or a session.
- A Timeseries type is a time-ordered collection of data samples.
There is no relation in resource availability among these two categories. Some providers do offer both, while some providers offer only one category. For example:
- Fitbit provides daily activity summaries, as well as some high-frequency activity timeseries data.
- Oura provides only daily activity summary, without any complementary high-frequency activity timeseries data.
There is also no strict relation between a field in a Summary type and a Timeseries type. For example:
- The existence of a
sleep_efficiency
summary field does not imply that there is a correspondingsleep_efficiency
timeseries. - The existence of a Glucose Timeseries type does not imply that there is a corresponding
glucose
summary field. - A Timeseries type could derive multiple summary fields, e.g., heart rate statistics and HR zones.
Summary types
Granularity | Resources |
---|---|
Daily | activity |
Session | sleep , workouts , body , meal , menstrual_cycle , workout_stream , sleep_stream |
Single | profile |
Discrete Timeseries types
Each value is associated with a single point in time.
Category | Resources |
---|---|
Cardiorespiratory | respiratory_rate |
Vitals | blood_oxygen , blood_pressure , glucose , heartrate , hrv |
Wellness | stress_level |
Body | fat , weight |
Lab Testing | cholesterol , igg , ige |
Interval Timeseries types
Each value is associated with a half-open time interval ([start, end[
).
Category | Resources |
---|---|
Activity | calories_active , calories_basal , distance , floors_climbed , steps |
Body | body_temperature , body_temperature_delta |
Cardiorespiratory | vo2_max |
Sleep | hypnogram |
Nutrition | water , caffeine |
Wellness | mindfulness_minutes |
Summary types by providers
Timeseries types by providers
Fetching via the API
Summary resources can be fetched from our /summary/<resource>/<user_id>
API, while everything else via /timeseries/<user_id>/<resource>
.
For example, Workouts
is made up of fields specific to an workout, like calories, distance and duration. When you make a request to /summary/workouts/<user_id>
you get the following fields:
Heartrate
on the other hand, is a timeseries resources. You can fetch it via timeseries/<user_id>/heartrate
and looks like this:
Different providers (e.g. Garmin), have different resources available. As an example, Garmin doesn’t have Glucose
as a resource.
Fields by Provider
Resources alone are not the whole story. Depending on the provider, a field might not be available. For example both Garmin and Strava provide Workouts
, yet the former doesn’t have ele_high
nor ele_low
.
Providers mark with *
means that Vital calculates the field’s value. In some cases, they might came as null
, since we weren’t able to make the calculation.
Even if a field is available for a provider, it doesn’t mean it’s available. For example, Fitbit is capable of generating HRV data. However HRV data is only available for specific high-end devices. Another common scenario is Apple HealthKit data. If the user doesn’t give permission to a particular field, it won’t be available. Be mindful of these situations and similar ones.
Activity
Body
Sleep
Sleep Stream
Workout
Workout Stream
Soon. Work in progress.
Profile
Soon. Work in progress.