Nest Changelog
1.43.13 PRE
10/9/2023
1.43.14
10/9/2023
18 changed endpoints Collapse changed endpoints
PATCH /strength-routine/items/{guid} 
Edit a strength routine.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}PATCH /strength-routine/items/{guid} 
Edit a strength routine.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}GET /strength-routine/movement/items 
List strength routine movements. Translated. Paginated.
Response Body
{
data: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /strength-routine/movement/items 
List strength routine movements. Translated. Paginated.
Response Body
{
data: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}PATCH /strength-routine/movement/items/{guid} 
Admin only. Edit a specific strength routine movement
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}PATCH /strength-routine/movement/items/{guid} 
Admin only. Edit a specific strength routine movement
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /strength-routine/movement/items/{guid} 
Return a single strength routine movement.
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /strength-routine/movement/items/{guid} 
Return a single strength routine movement.
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /strength-routine/admin/items/{guid} 
Load an individual strength routine by guid.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}GET /strength-routine/admin/items/{guid} 
Load an individual strength routine by guid.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}GET /strength-routine/admin/library 
Producer and above only. Search the library with elevated access.
Response Body
{
data: List<{
circuit?: bool,
createdByEchelon?: bool,
dateCreated?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
movements?: List<string>,
name?: string,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
visibility?: 'public' | 'private',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /strength-routine/admin/library 
Producer and above only. Search the library with elevated access.
Response Body
{
data: List<{
circuit?: bool,
createdByEchelon?: bool,
dateCreated?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
movements?: List<string>,
name?: string,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
visibility?: 'public' | 'private',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}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?: {
firstplayStation?: {
guid?: string,
status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
},
normalStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
replayStation?: {
guid?: string,
status?: '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,
},
musicSource?: 'playlist' | 'feedFM' | 'none',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
controlStation?: {
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?: {
firstplayStation?: {
guid?: string,
status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
},
normalStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
replayStation?: {
guid?: string,
status?: '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,
},
musicSource?: 'playlist' | 'feedFM' | 'none',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
controlStation?: {
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<{
+ description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
+ text?: string,
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/tags 
List of tags.
Response Body
{
data: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/tags 
List of tags.
Response Body
{
data: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /collections/items 
Create a new Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}POST /collections/items 
Create a new Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}GET /collections/items/{guid} 
Get a collection by guid. Cached every 10 minutes.
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}GET /collections/items/{guid} 
Get a collection by guid. Cached every 10 minutes.
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}PATCH /collections/items/{guid} 
Update a Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}PATCH /collections/items/{guid} 
Update a Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}GET /control-stations 
Get all control stations
Response Body
{
data: List<{
active?: bool,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
guid?: string,
mux?: {
latencyMode?: 'standard' | 'reduced' | 'low',
playbackId?: string,
policy?: 'public' | 'signed',
reconnectWindow?: number,
streamId?: string,
streamKey?: string,
},
name?: string,
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /control-stations 
Get all control stations
Response Body
{
data: List<{
active?: bool,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
guid?: string,
mux?: {
latencyMode?: 'standard' | 'reduced' | 'low',
playbackId?: string,
policy?: 'public' | 'signed',
reconnectWindow?: number,
streamId?: string,
streamKey?: string,
},
name?: string,
+ rtmpUrl?: {
+ secure?: string,
+ standard?: string,
+ },
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /control-stations 
Create a new control station
Request Body
{
active?: bool,
mux?: {
latencyMode?: 'standard' | 'reduced' | 'low',
policy?: 'public' | 'signed',
reconnectWindow?: number,
},
name?: string,
studio?: {
id?: number,
},
}Response Body
{
data: {
active?: bool,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
guid?: string,
mux?: {
latencyMode?: 'standard' | 'reduced' | 'low',
playbackId?: string,
policy?: 'public' | 'signed',
reconnectWindow?: number,
streamId?: string,
streamKey?: string,
},
name?: string,
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
},
}POST /control-stations 
Create a new control station
Request Body
{
active?: bool,
mux?: {
latencyMode?: 'standard' | 'reduced' | 'low',
policy?: 'public' | 'signed',
reconnectWindow?: number,
},
name?: string,
+ rtmpUrl?: {
+ secure?: string,
+ standard?: string,
+ },
studio?: {
id?: number,
},
}Response Body
{
data: {
active?: bool,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
guid?: string,
mux?: {
latencyMode?: 'standard' | 'reduced' | 'low',
playbackId?: string,
policy?: 'public' | 'signed',
reconnectWindow?: number,
streamId?: string,
streamKey?: string,
},
name?: string,
+ rtmpUrl?: {
+ secure?: string,
+ standard?: string,
+ },
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
},
}GET /favorites/{userId}/items 
List users favorite content items.
Response Body
{
data: List<{
content?: {
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
bio?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>,
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
status?: 'active' | 'inactive',
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
user?: {
id?: number,
},
}>,
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
},
dateCreated?: number,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /favorites/{userId}/items 
List users favorite content items.
Response Body
{
data: List<{
content?: {
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
bio?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>,
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
status?: 'active' | 'inactive',
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
user?: {
id?: number,
},
}>,
medium?: 'reflect' | 'standard' | 'strength',
name?: string,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
},
dateCreated?: number,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /users/{userId}/strength-routines/import 
Copy a strength routine.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}POST /users/{userId}/strength-routines/import 
Copy a strength routine.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}POST /users/{userId}/strength-routines/items 
Create a new strength routine.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}POST /users/{userId}/strength-routines/items 
Create a new strength routine.
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}GET /users/{userId}/strength-routines/items/{guid} 
Get strength routine for a user, comes with workout data for this routine
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
userData?: {
workouts?: {
history?: List<{
date?: number,
guid?: string,
isPersonalBest?: bool,
status?: 'incomplete' | 'complete',
}>,
personalBest?: {
guid?: string,
totalVolume?: number,
},
},
},
visibility?: 'public' | 'private',
},
}GET /users/{userId}/strength-routines/items/{guid} 
Get strength routine for a user, comes with workout data for this routine
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
createdByEchelon?: bool,
dateCreated?: number,
dateDeleted?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
translations?: record,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
weight?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
userData?: {
workouts?: {
history?: List<{
date?: number,
guid?: string,
isPersonalBest?: bool,
status?: 'incomplete' | 'complete',
}>,
personalBest?: {
guid?: string,
totalVolume?: number,
},
},
},
visibility?: 'public' | 'private',
},
}GET /users/{userId}/strength-routines/library 
Search the library of routines available to the user.
Response Body
{
data: List<{
circuit?: bool,
createdByEchelon?: bool,
dateCreated?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
movements?: List<string>,
name?: string,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
}>,
embedded: {
aggregations?: {
tags?: List<{
buckets?: List<{
count?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
value?: string,
}>,
value?: string,
}>,
},
},
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/strength-routines/library 
Search the library of routines available to the user.
Response Body
{
data: List<{
circuit?: bool,
createdByEchelon?: bool,
dateCreated?: number,
description?: string,
duration?: number,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
language?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
level?: {
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
movements?: List<string>,
name?: string,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
+ translations?: record,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
}>,
embedded: {
aggregations?: {
tags?: List<{
buckets?: List<{
count?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
value?: string,
}>,
value?: string,
}>,
},
},
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}3 added endpoints Collapse added endpoints
POST /webhooks/feedfm 
Internal use only. Used by FeedFM to manage radio stations.
Request Body
{
creator: string,
event?: 'station_requested' | 'station_published_to_production' | 'station_published_to_development' | 'station_unpublished',
explicit: bool,
meta?: string,
name: string,
testing: bool,
uuid?: string,
}GET /content/items/{guid}/schedule/{scheduleGuid} 
This is a convenience endpoint, that loads content information with a specific schedule, rather than all schedules, included.
Guard: loggedIn, service
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?: {
firstplayStation?: {
guid?: string,
status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
},
normalStation?: {
guid?: string,
},
playbackStation?: {
guid?: string,
type?: 'firstplay' | 'replay' | 'normal',
},
replayStation?: {
guid?: string,
status?: '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,
},
musicSource?: 'playlist' | 'feedFM' | 'none',
name?: string,
playlist?: {
id?: number,
},
schedule?: {
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
controlStation?: {
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<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',
text?: string,
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',
},
}