Nest Changelog
1.40.1
9/6/2023
1.41.0 PRE
9/12/2023
9 changed endpoints Collapse changed endpoints
GET /users/{userId}/strength-workouts/items 
Get strength workout summaries for a user
Response Body
{
data: List<{
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/strength-workouts/items 
Get strength workout summaries for a 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,
+ }>,
+ name?: string,
+ },
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/strength-workouts/aggregations 
Get strength workout aggregations for a user
Response Body
{
data: {
mostRecent?: {
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
},
personalBest?: {
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
},
totalDuration?: number,
totalReps?: number,
totalTimeUnderTension?: number,
totalWorkouts?: number,
volume?: {
max?: number,
total?: number,
},
},
}GET /users/{userId}/strength-workouts/aggregations 
Get strength workout aggregations for a user
Response Body
{
data: {
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,
+ }>,
+ name?: string,
+ },
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
},
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,
+ }>,
+ name?: string,
+ },
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
},
totalDuration?: number,
totalReps?: number,
totalTimeUnderTension?: number,
totalWorkouts?: number,
volume?: {
max?: number,
total?: number,
},
},
}GET /strength-workouts/items/{guid}/summary 
Response Body
{
data: {
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
},
}GET /strength-workouts/items/{guid}/summary 
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,
+ }>,
+ name?: string,
+ },
dateEnd?: number,
dateStart?: number,
guid?: string,
movementStats?: List<{
interval?: bool,
movement?: {
guid?: string,
name?: string,
},
setStats?: List<{
calories?: number,
completed?: bool,
duration?: number,
heartRate?: number,
number?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain',
rest?: number,
tension?: number,
volume?: number,
}>,
totalStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: number,
},
}>,
status?: 'incomplete' | 'complete',
user?: {
id?: number,
},
workoutStats?: {
calories?: number,
duration?: number,
heartRate?: number,
power?: number,
reps?: {
completed?: number,
planned?: number,
},
rest?: number,
sets?: number,
tension?: number,
volume?: 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,
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,
+ },
+ 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,
},
},
}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,
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,
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,
+ },
+ 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,
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',
},
}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,
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,
+ },
+ 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',
},
}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,
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,
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,
+ },
+ 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',
},
}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,
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,
+ },
+ 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',
},
}4 added endpoints Collapse added endpoints
Added endpoints
DELETE /redis 
Admin only. Clear redis by pattern.
Guard: admin, service
Response Body
{
data: List<string>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /webhooks/feedFm/feedfm 
Request Body
{
creator: string,
event?: 'station_requested' | 'station_published_to_production' | 'station_published_to_development' | 'station_unpublished',
name: string,
testing: bool,
uuid?: string,
}