Nest Changelog
1.40.1
9/6/2023
1.41.0 PRE
9/12/2023
9 changed endpoints Collapse changed endpoints
GET /users/{userId}/strength-workouts/items
Get strength workout summaries for a user
Response Body
{ data: List<{dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /users/{userId}/strength-workouts/items
Get strength workout summaries for a user
Response Body
{ data: List<{ + content?: { + description?: string, + duration?: number, + guid?: string, + image?: { + default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, + }, + instructors?: List<{ + id?: number, + name?: string, + }>, + name?: string, + }, dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /users/{userId}/strength-workouts/aggregations
Get strength workout aggregations for a user
Response Body
{ data: { mostRecent?: {dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }, personalBest?: {
dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }, totalDuration?: number, totalReps?: number, totalTimeUnderTension?: number, totalWorkouts?: number, volume?: { max?: number, total?: number, }, }, }
GET /users/{userId}/strength-workouts/aggregations
Get strength workout aggregations for a user
Response Body
{ data: { mostRecent?: { + content?: { + description?: string, + duration?: number, + guid?: string, + image?: { + default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, + }, + instructors?: List<{ + id?: number, + name?: string, + }>, + name?: string, + }, dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }, personalBest?: { + content?: { + description?: string, + duration?: number, + guid?: string, + image?: { + default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, + }, + instructors?: List<{ + id?: number, + name?: string, + }>, + name?: string, + }, dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }, totalDuration?: number, totalReps?: number, totalTimeUnderTension?: number, totalWorkouts?: number, volume?: { max?: number, total?: number, }, }, }
GET /strength-workouts/items/{guid}/summary
Response Body
{ data: {dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }, }
GET /strength-workouts/items/{guid}/summary
Response Body
{ data: { + content?: { + description?: string, + duration?: number, + guid?: string, + image?: { + default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, + }, + instructors?: List<{ + id?: number, + name?: string, + }>, + name?: string, + }, dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movement?: { guid?: string, name?: string, }, setStats?: List<{ calories?: number, completed?: bool, duration?: number, heartRate?: number, number?: number, power?: number, reps?: { completed?: number, planned?: number, }, resistanceMode?: 'standard' | 'concentric' | 'eccentric' | 'isokinetic' | 'chain', rest?: number, tension?: number, volume?: number, }>, totalStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }>, status?: 'incomplete' | 'complete', user?: { id?: number, }, workoutStats?: { calories?: number, duration?: number, heartRate?: number, power?: number, reps?: { completed?: number, planned?: number, }, rest?: number, sets?: number, tension?: number, volume?: number, }, }, }
GET /content/items
Admin only. Get list of content items.
Response Body
{ data: List<{ catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string,format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /content/items
Admin only. Get list of content items.
Response Body
{ data: List<{ catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, + feedFm?: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
POST /content/items
Create a content item
Request Body
{ catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, description?: string, featuredRow?: string,format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name?: string, sortOrder?: number, status?: 'draft' | 'published', studios?: List<{ id?: number, precedence?: number, }>, tags?: List<{ value?: string, }>, videoLength?: { id?: number, }, }
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string,format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
POST /content/items
Create a content item
Request Body
{ catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, description?: string, featuredRow?: string, + feedFm: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name?: string, sortOrder?: number, status?: 'draft' | 'published', studios?: List<{ id?: number, precedence?: number, }>, tags?: List<{ value?: string, }>, videoLength?: { id?: number, }, }
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, + feedFm?: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
GET /content/items/{guid}
Get a specific content item.
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string,format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
GET /content/items/{guid}
Get a specific content item.
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, + feedFm?: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
PATCH /content/items/{guid}
Update a content item
Request Body
{ catalog: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries: List<{ code?: string, }>, description: string, featuredRow: string,format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name: string, playlist: { id?: number, }, sortOrder: number, status: 'draft' | 'published', studios: List<{ id?: number, precedence?: number, }>, tags: List<{ value?: string, }>, videoLength: { id?: number, }, videoStatus: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string,format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
PATCH /content/items/{guid}
Update a content item
Request Body
{ catalog: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries: List<{ code?: string, }>, description: string, featuredRow: string, + feedFm: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name: string, playlist: { id?: number, }, sortOrder: number, status: 'draft' | 'published', studios: List<{ id?: number, precedence?: number, }>, tags: List<{ value?: string, }>, videoLength: { id?: number, }, videoStatus: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, + feedFm?: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
GET /legacy/{id}/content
Get content for legacy class
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string,format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
GET /legacy/{id}/content
Get content for legacy class
Response Body
{ data: { catalog?: { code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, + feedFm?: { + backupStation?: { + guid?: string, + }, + playbackStation?: { + guid?: string, + type?: 'firstplay' | 'replay' | 'normal', + }, + primaryStation?: { + guid?: string, + }, + stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', + stationType?: 'firstplay' | 'replay' | 'normal', + }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
4 added endpoints Collapse added endpoints
Added endpoints
DELETE /redis
Admin only. Clear redis by pattern.
Guard: admin, service
Response Body
{ data: List<string>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
POST /webhooks/feedFm/feedfm
Request Body
{ creator: string, event?: 'station_requested' | 'station_published_to_production' | 'station_published_to_development' | 'station_unpublished', name: string, testing: bool, uuid?: string, }