- A top-level
event_type
field, specifying the payload type contained in thedata
field. - A top-level
data
field containing the event-specific payload. - A set of top-level fields describing the event subject:
team_id
: Your Junction Team ID.user_id
andclient_user_id
: The unique Vital User ID.client_user_id
: Your application user reference you declared for the Vital User.
Wearable data events
Wearable data events have the following extended standard structure:- An
event_type
field for differentiating the payload contained in the data field. - A
data
field, which comprises of:- The UUID of the Vital user for which this event is intended — note that this is not the
client_user_id
of the Vital user. (JSON path:$.data.user_id
) - The metadata about the data source of this event (JSON path:
$.data.source
)name
: The human-readable name of the sourceslug
: The stable identifier Vital assigned to the source — see Supported providers for the complete list.logo
: The URL to an icon representing the source.
- Any number of event-specific fields.
- The UUID of the Vital user for which this event is intended — note that this is not the
Wearable data event structure
Summary types
Each time a summary object is created or updated, Vital emits a data event for the occurrence. The object is made available directly at the top-leveldata
field (JSON path: $.data
), alongside the standard fields listed above.
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.Timeseries types (except for Workout Streams)
Each time a batch of timeseries samples has been created or updated, Vital emits a data event for the batch of samples. The samples are made available under an innerdata
field under the top-level data
field (JSON path: $.data.data
).
Each timeseries sample is uniquely identified by a compound key of:
- the timeseries resource type;
- the source provider;
- the Source Type; and
- the sample timestamp.
While most timeseries data are immutable, there have been exceptions of some sources aggregating some data types using time bucketing,
and some may even send updates ASAP on time buckets that have incomplete data. For example, activity timeseries data from Apple HealthKit
(integration in production) and Garmin (integration planned) do exhibit such behaviour.
These exceptions are the rationale behind the recommended deduplication semantic as stated above.
These exceptions are the rationale behind the recommended deduplication semantic as stated above.
Workout Streams
While Workout Streams are classified as a timeseries type, it contains a huge amount of timeseries data which cannot be delivered by our webhook message transport. So events for Webhook Streams are shallow, with only some minimal metadata about the workout. Successful reception of the event indicates that the data are available to be read via our REST API, e.g., the Workout Stream endpointGET /v2/timeseries/workouts/{workout_id}/stream
.
Workout Stream created