Each summary is uniquely identified by its ID ($.id).

Given the same ID, the latest version of a summary you received replaces all its previous versions.

Properties

event_type
const string
required

Constant: daily.data.workouts.created

team_id
string
required
user_id
string
required
client_user_id
string
required
data
ClientFacingWorkout
required
user_id
string
required

User id returned by vital create user request. This id should be stored in your database against the user and used for all interactions with the vital api.

id
string
required
title
anyOf | null

Title given for the workout Any of:

  • string
  • null
timezone_offset
anyOf | null

Timezone offset from UTC as seconds. For example, EEST (Eastern European Summer Time, +3h) is 10800. PST (Pacific Standard Time, -8h) is -28800::seconds Any of:

  • integer
  • null
average_hr
anyOf | null

Average heart rate during workout::bpm Any of:

  • integer
  • null
max_hr
anyOf | null

Max heart rate during workout::bpm Any of:

  • integer
  • null
distance
anyOf | null

Distance travelled during workout::meters Any of:

  • number
  • null
calendar_date
string
required

Date of the workout summary in the YYYY-mm-dd format. This generally matches the workout start date.

time_start
string
required

Start time of the workout::time

time_end
string
required

End time of the workout::time

calories
anyOf | null

Calories burned during the workout::kCal Any of:

  • number
  • null
sport
ClientFacingSport | null

Sport’s name

id
integer
requireddeprecated

This ID is unstable across environments. Use the slug instead.

name
string
required

Sport’s name

slug
string
required

Slug for designated sport

hr_zones
anyOf | null

Time in seconds spent in different heart rate zones <50%, 50-60%, 60-70%, 70-80%, 80-90%, 90%+. Due to rounding errors, it’s possible that summing all values is different than the total time of the workout. Not available for all providers::seconds Any of:

  • array
  • null
moving_time
anyOf | null

Time spent active during the workout::seconds Any of:

  • integer
  • null
total_elevation_gain
anyOf | null

Elevation gain during the workout::meters Any of:

  • number
  • null
elev_high
anyOf | null

Highest point of elevation::meters Any of:

  • number
  • null
elev_low
anyOf | null

Lowest point of elevation::meters Any of:

  • number
  • null
average_speed
anyOf | null

Average speed during workout in m/s::meters/sec Any of:

  • number
  • null
max_speed
anyOf | null

Max speed during workout in m/s::meters/sec Any of:

  • number
  • null
average_watts
anyOf | null

Average watts burned during exercise::watts Any of:

  • number
  • null
device_watts
anyOf | null

Watts burned during exercise::watts Any of:

  • number
  • null
max_watts
anyOf | null

Max watts burned during exercise::watts Any of:

  • number
  • null
weighted_average_watts
anyOf | null

Weighted average watts burned during exercise::watts Any of:

  • number
  • null
steps
anyOf | null

Number of steps accumulated during this workout::count Any of:

  • integer
  • null
map
anyOf | null

Map of workouts encoded as polyline Any of:

  • object
  • null
provider_id
string
required

Provider ID given for that specific workout

source
ClientFacingSource
required

Source the data has come from.

provider
string
required

Provider slug. e.g., oura, fitbit, garmin.

type
string | null

The type of the data source (app or device) by which the summary or the timeseries data were recorded. This defaults to unknown when Vital cannot extract or infer that information

app_id
anyOf | null

The identifier of the app which recorded this summary. This is only applicable to multi-source providers like Apple Health and Android Health Connect. Any of:

  • string
  • null
name
string | null
deprecated

Deprecated. Subject to removal after 1 Jan 2024.

slug
string | null
deprecated

Deprecated. Use provider instead. Subject to removal after 1 Jan 2024.

Deprecated. Subject to removal after 1 Jan 2024.