Nest Changelog
1.41.6 PRE
9/14/2023
1.42.0 PRE
9/19/2023
10 changed endpoints Collapse changed endpoints
GET /users/{userId}/workouts/items 
Get workout summaries for user
Response Body
{
data: List<{
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/workouts/items 
Get workout summaries for user
Response Body
{
data: List<{
+ appSource?: 'echelon' | 'worlds' | 'fitos',
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/workouts/aggregations 
Get workout aggregations for user
Response Body
{
data: {
furthestDistance?: number,
highestOutput?: number,
mostRecent?: {
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
},
personalBest?: {
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
},
totalClasses?: number,
totalDistance?: number,
totalDuration?: number,
},
}GET /users/{userId}/workouts/aggregations 
Get workout aggregations for user
Response Body
{
data: {
furthestDistance?: number,
highestOutput?: number,
mostRecent?: {
+ appSource?: 'echelon' | 'worlds' | 'fitos',
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
},
personalBest?: {
+ appSource?: 'echelon' | 'worlds' | 'fitos',
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
},
totalClasses?: number,
totalDistance?: number,
totalDuration?: number,
},
}GET /content/items 
Admin only. Get list of content items.
Response Body
{
data: List<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
},
- stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/items 
Admin only. Get list of content items.
Response Body
{
data: List<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
+ status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+ type?: 'firstplay' | 'replay' | 'normal',
},
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /content/items 
Create a content item
Request Body
{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
description?: string,
featuredRow?: string,
- feedFm?: {
- backupStation?: string,
- primaryStation?: string,
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format?: {
code?: string,
},
instructors?: List<{
id?: number,
precedence?: number,
}>,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked: {
guid?: string,
},
name?: string,
sortOrder?: number,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
precedence?: number,
}>,
tags?: List<{
value?: string,
}>,
videoLength?: {
id?: number,
},
}Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
},
- stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}POST /content/items 
Create a content item
Request Body
{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
description?: string,
featuredRow?: string,
+ feedFm: {
+ backupStation: {
+ guid?: string,
+ },
+ primaryStation?: {
+ guid: string,
+ type?: 'firstplay' | 'replay' | 'normal',
+ },
},
format?: {
code?: string,
},
instructors?: List<{
id?: number,
precedence?: number,
}>,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked: {
guid?: string,
},
name?: string,
sortOrder?: number,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
precedence?: number,
}>,
tags?: List<{
value?: string,
}>,
videoLength?: {
id?: number,
},
}Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
+ status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+ type?: 'firstplay' | 'replay' | 'normal',
},
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /content/items/{guid} 
Get a specific content item.
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
},
- stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
userData?: {
favorite?: {
content?: bool,
},
workout?: {
status?: 'finished' | 'DNF',
},
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /content/items/{guid} 
Get a specific content item.
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
+ status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+ type?: 'firstplay' | 'replay' | 'normal',
},
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
userData?: {
favorite?: {
content?: bool,
},
workout?: {
status?: 'finished' | 'DNF',
},
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}PATCH /content/items/{guid} 
Update a content item
Request Body
{
catalog: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries: List<{
code?: string,
}>,
description: string,
featuredRow: string,
feedFm: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
},
- stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format: {
code?: string,
},
instructors: List<{
id?: number,
precedence?: number,
}>,
medium: 'reflect' | 'standard' | 'strength',
mediumLinked: {
guid?: string,
},
name: string,
playlist: {
id?: number,
},
sortOrder: number,
status: 'draft' | 'published',
studios: List<{
id?: number,
precedence?: number,
}>,
tags: List<{
value?: string,
}>,
videoLength: {
id?: number,
},
videoStatus: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
},
- stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}PATCH /content/items/{guid} 
Update a content item
Request Body
{
catalog: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries: List<{
code?: string,
}>,
description: string,
featuredRow: string,
feedFm: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
+ status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+ type?: 'firstplay' | 'replay' | 'normal',
},
},
format: {
code?: string,
},
instructors: List<{
id?: number,
precedence?: number,
}>,
medium: 'reflect' | 'standard' | 'strength',
mediumLinked: {
guid?: string,
},
name: string,
playlist: {
id?: number,
},
sortOrder: number,
status: 'draft' | 'published',
studios: List<{
id?: number,
precedence?: number,
}>,
tags: List<{
value?: string,
}>,
videoLength: {
id?: number,
},
videoStatus: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
+ status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+ type?: 'firstplay' | 'replay' | 'normal',
},
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}POST /workouts/items 
Documentation only - Look at description for the actual endpoints
Request Body
{
content: {
guid?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
device?: {
appVersion?: string,
model?: string,
os?: string,
osVersion?: string,
},
legacyProduct?: string,
localTime?: string,
percentile: number,
peripherals?: List<{
firmwareVersion?: string,
guid?: string,
hardwareVersion?: string,
modelId?: string,
name?: string,
serialNO?: string,
type?: 'bike' | 'rower' | 'treadmill' | 'elliptical' | 'reflect',
}>,
ranking: {
place?: number,
total?: number,
},
stats?: List<{
classState?: 'warmup' | 'in-session' | 'overflow' | 'ended',
dateLoggedMs?: number,
output?: {
distance: number,
incrementalDistance: number,
joules: number,
RPM: number,
strokesPerMinute: number,
time500Meters: number,
watts: number,
},
peripheral: {
direction: 'forward' | 'backward',
guid: string,
incline: number,
resistance: number,
speed: number,
},
physiology?: {
calories: number,
heartRate: number,
hrPoints: number,
},
playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering',
}>,
user?: {
id?: number,
},
}POST /workouts/items 
Documentation only - Look at description for the actual endpoints
Request Body
{
content: {
guid?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
device?: {
appVersion?: string,
model?: string,
os?: string,
osVersion?: string,
},
legacyProduct?: string,
localTime?: string,
percentile: number,
peripherals?: List<{
firmwareVersion?: string,
guid?: string,
hardwareVersion?: string,
modelId?: string,
name?: string,
serialNO?: string,
type?: 'bike' | 'rower' | 'treadmill' | 'elliptical' | 'reflect',
}>,
ranking: {
place?: number,
total?: number,
},
+ source: 'echelon' | 'worlds' | 'fitos',
stats?: List<{
classState?: 'warmup' | 'in-session' | 'overflow' | 'ended',
dateLoggedMs?: number,
output?: {
distance: number,
incrementalDistance: number,
joules: number,
RPM: number,
strokesPerMinute: number,
time500Meters: number,
watts: number,
},
peripheral: {
direction: 'forward' | 'backward',
guid: string,
incline: number,
resistance: number,
speed: number,
},
physiology?: {
calories: number,
heartRate: number,
hrPoints: number,
},
playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering',
}>,
user?: {
id?: number,
},
}POST /workouts/process 
Process workout - Internal use only
Request Body
{
rideIndex?: {
appversion: string,
avgcadence: number,
avgresistance: number,
classimage: string,
classname: string,
datecreated: string,
device: string,
distancetype?: string,
dnf: bool,
finalrank: number,
incline: number,
instanceuuid?: string,
instructorname: string,
iscomplete: bool,
osversion: string,
product?: string,
rideid: number,
ridetype?: string,
source: string,
totalcalories: number,
totaldistance: number,
totalhrpoints: number,
totaloutput: number,
totalriders: number,
totalrpmspm: number,
userid?: number,
},
rideIndexById?: {
appversion: string,
avgcadence: number,
avgheartrate: number,
avgresistance: number,
classimage: string,
classname: string,
datecreated: string,
device: string,
distancetype?: string,
dnf: bool,
duration: number,
encore: bool,
finalrank: number,
incline: number,
instanceuuid?: string,
instructorname: string,
iscomplete: bool,
osversion: string,
product?: string,
rideid: number,
ridetype: string,
source: string,
totalcalories: number,
totaldistance: number,
totalhrpoints: number,
totaloutput: number,
totalriders: number,
totalrpmspm: number,
userid: number,
},
segment?: {
activity_type: string,
bike_statistics: {
cadence?: number,
calories?: number,
distance?: number,
output?: {
average?: number,
best?: number,
total?: number,
},
resistance?: {
average?: number,
maximum?: number,
},
speed?: number,
},
class_length: number,
class_name: string,
content_id: string,
content_type: 'live' | 'vod' | 'encore' | 'freestyle',
email?: string,
equipment_type: 'bike' | 'fitpass' | 'reflect' | 'row' | 'stride' | 'ellipse',
first_name?: string,
fitpass_statistics: {
calories?: number,
heart_rate_points?: number,
},
instructor_id: number,
instructor_name: string,
last_name?: string,
metric_preference?: 'imperial' | 'metric',
music_genre: string,
place: number,
platform?: string,
reflect_statistics: {
calories?: number,
heart_rate_points?: number,
},
rowing_statistics: {
calories?: number,
distance?: number,
output?: {
average?: number,
best?: number,
total?: number,
},
resistance?: {
average?: number,
maximum?: number,
},
speed?: number,
stroke?: {
average?: number,
maximum?: number,
},
},
stride_statistics: {
calories?: number,
distance?: number,
incline?: {
average?: number,
maximum?: number,
},
output?: {
average?: number,
best?: number,
total?: number,
},
speed?: {
average?: number,
maximum?: number,
},
},
user_id?: number,
},
workoutEntity?: {
buffering?: number,
commercialCode?: string,
completion?: number,
contentDuration?: number,
contentGuid?: string,
dateDeleted?: number,
dateEnd?: number,
dateStart?: number,
duration?: number,
format?: string,
guid?: string,
output?: number,
percentile?: number,
rankingPlace?: number,
rankingTotal?: number,
stats?: record,
timeOffset?: number,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
userId?: number,
},
}POST /workouts/process 
Process workout - Internal use only
Request Body
{
rideIndex?: {
appversion: string,
avgcadence: number,
avgresistance: number,
classimage: string,
classname: string,
datecreated: string,
device: string,
distancetype?: string,
dnf: bool,
finalrank: number,
incline: number,
instanceuuid?: string,
instructorname: string,
iscomplete: bool,
osversion: string,
product?: string,
rideid: number,
ridetype?: string,
source: string,
totalcalories: number,
totaldistance: number,
totalhrpoints: number,
totaloutput: number,
totalriders: number,
totalrpmspm: number,
userid?: number,
},
rideIndexById?: {
appversion: string,
avgcadence: number,
avgheartrate: number,
avgresistance: number,
classimage: string,
classname: string,
datecreated: string,
device: string,
distancetype?: string,
dnf: bool,
duration: number,
encore: bool,
finalrank: number,
incline: number,
instanceuuid?: string,
instructorname: string,
iscomplete: bool,
osversion: string,
product?: string,
rideid: number,
ridetype: string,
source: string,
totalcalories: number,
totaldistance: number,
totalhrpoints: number,
totaloutput: number,
totalriders: number,
totalrpmspm: number,
userid: number,
},
segment?: {
activity_type: string,
bike_statistics: {
cadence?: number,
calories?: number,
distance?: number,
output?: {
average?: number,
best?: number,
total?: number,
},
resistance?: {
average?: number,
maximum?: number,
},
speed?: number,
},
class_length: number,
class_name: string,
content_id: string,
content_type: 'live' | 'vod' | 'encore' | 'freestyle',
email?: string,
equipment_type: 'bike' | 'fitpass' | 'reflect' | 'row' | 'stride' | 'ellipse',
first_name?: string,
fitpass_statistics: {
calories?: number,
heart_rate_points?: number,
},
instructor_id: number,
instructor_name: string,
last_name?: string,
metric_preference?: 'imperial' | 'metric',
music_genre: string,
place: number,
platform?: string,
reflect_statistics: {
calories?: number,
heart_rate_points?: number,
},
rowing_statistics: {
calories?: number,
distance?: number,
output?: {
average?: number,
best?: number,
total?: number,
},
resistance?: {
average?: number,
maximum?: number,
},
speed?: number,
stroke?: {
average?: number,
maximum?: number,
},
},
stride_statistics: {
calories?: number,
distance?: number,
incline?: {
average?: number,
maximum?: number,
},
output?: {
average?: number,
best?: number,
total?: number,
},
speed?: {
average?: number,
maximum?: number,
},
},
user_id?: number,
},
workoutEntity?: {
+ appSource: 'echelon' | 'worlds' | 'fitos',
buffering?: number,
commercialCode?: string,
completion?: number,
contentDuration?: number,
contentGuid?: string,
dateDeleted?: number,
dateEnd?: number,
dateStart?: number,
duration?: number,
format?: string,
guid?: string,
output?: number,
percentile?: number,
rankingPlace?: number,
rankingTotal?: number,
stats?: record,
timeOffset?: number,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
userId?: number,
},
}GET /workouts/items/{guid}/summary 
Get summary view of a workout
Response Body
{
data: {
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
},
}GET /workouts/items/{guid}/summary 
Get summary view of a workout
Response Body
{
data: {
+ appSource?: 'echelon' | 'worlds' | 'fitos',
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
output?: number,
percentile?: number,
ranking?: {
place?: number,
total?: number,
},
stats?: {
calories: number,
distance: number,
heartRate: number,
heartRateMax: number,
hrPoints: number,
incline: number,
joules: number,
resistance: number,
rpm: number,
speed: number,
spm: number,
},
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
},
}GET /legacy/{id}/content 
Get content for legacy class
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
},
- stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
- stationType?: 'firstplay' | 'replay' | 'normal',
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /legacy/{id}/content 
Get content for legacy class
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
feedFm?: {
backupStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
primaryStation?: {
guid?: string,
+ status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+ type?: 'firstplay' | 'replay' | 'normal',
},
},
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard' | 'strength',
mediumLinked?: {
guid?: string,
},
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}