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