Nest Changelog
1.34.9 PRE
8/14/2023
1.35.0 PRE
7/17/2023
18 changed endpoints Collapse changed endpoints
POST /webhooks/subscription-schedule-updated
Request Body
{ accountId?: string, created?: number, currentPhase: { end_date?: number, start_date?: number, }, endBehavior?: 'cancel' | 'none' | 'release' | 'renew', id?: string, phases?: List<{ cancelAtEnd?: bool, endDate?: number,- isFreePhase: bool,priceId?: string, prorationBehavior?: string, startDate?: number, }>, sourceSubscriptionCode?: string, sourceUserCode?: string, }
POST /webhooks/subscription-schedule-updated
Request Body
{ accountId?: string, created?: number, currentPhase: { end_date?: number, start_date?: number, }, endBehavior?: 'cancel' | 'none' | 'release' | 'renew', id?: string, phases?: List<{ cancelAtEnd?: bool, endDate?: number,priceId?: string, prorationBehavior?: string, startDate?: number, }>, sourceSubscriptionCode?: string, sourceUserCode?: string, }
GET /users/{userId}/workouts/history
Get aggregations of user workout history. Groups by format, modality and duration. Counts total taken and total completed. Format and Modality are further grouped by duration for that format and modality.
Guard: customerService, family
Response Body
{ data: { durations?: List<{ count?: { completed?: number, total?: number, }, name?: string, value?: number, }>, formats?: List<{ count?: { completed?: number, total?: number, },- durations?: List<{ - count?: { - completed?: number, - total?: number, - }, - name?: string, - value?: number, - }>,text?: string, value?: string, }>, modalities?: List<{ count?: { completed?: number, total?: number, },- durations?: List<{ - count?: { - completed?: number, - total?: number, - }, - name?: string, - value?: number, - }>,text?: string, value?: string, }>, }, }
GET /users/{userId}/workouts/history
Get aggregations of user workout history
Guard: admin, family
Response Body
{ data: { durations?: List<{ count?: { completed?: number, total?: number, }, name?: string, value?: number, }>, formats?: List<{ count?: { completed?: number, total?: number, },text?: string, value?: string, }>, modalities?: List<{ count?: { completed?: number, total?: number, },
text?: string, value?: string, }>, }, }
GET /content/library
Search for content in the Library.
Response Body
{ data: List<{ catalog?: { audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, hasMusic?: bool, }, contentGuid?: string, countries?: List<{ code?: string, }>, dateLive?: number, description?: string, format?: { code?: string, }, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, legacy?: { id?: number, }, length?: number, medium?: 'reflect' | 'standard' | 'strength',- mediumLinked?: { - guid?: string, - },name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, playlistId?: number, scheduleGuid?: string, status?: 'draft' | 'published' | 'trash', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, }>, embedded: { aggregations?: { durations?: List<{ count?: number, text?: string, value?: number, }>, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, 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 /content/library
Search for content in the Library.
Response Body
{ data: List<{ catalog?: { audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, hasMusic?: bool, }, contentGuid?: string, countries?: List<{ code?: string, }>, dateLive?: number, description?: string, format?: { code?: string, }, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, legacy?: { id?: number, }, length?: number, medium?: 'reflect' | 'standard' | 'strength',name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, playlistId?: number, scheduleGuid?: string, status?: 'draft' | 'published' | 'trash', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, }>, embedded: { aggregations?: { durations?: List<{ count?: number, text?: string, value?: number, }>, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, 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 /content/library/upcoming
Search for upcoming live or encore content in the Library.
Response Body
{ data: List<{ catalog?: { audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, hasMusic?: bool, }, contentGuid?: string, countries?: List<{ code?: string, }>, dateLive?: number, description?: string, format?: { code?: string, }, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, legacy?: { id?: number, }, length?: number, medium?: 'reflect' | 'standard' | 'strength',- mediumLinked?: { - guid?: string, - },name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, playlistId?: number, scheduleGuid?: string, status?: 'draft' | 'published' | 'trash', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, }>, embedded: { aggregations?: { durations?: List<{ count?: number, text?: string, value?: number, }>, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, 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 /content/library/upcoming
Search for upcoming live or encore content in the Library.
Response Body
{ data: List<{ catalog?: { audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, hasMusic?: bool, }, contentGuid?: string, countries?: List<{ code?: string, }>, dateLive?: number, description?: string, format?: { code?: string, }, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, legacy?: { id?: number, }, length?: number, medium?: 'reflect' | 'standard' | 'strength',name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, playlistId?: number, scheduleGuid?: string, status?: 'draft' | 'published' | 'trash', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, }>, embedded: { aggregations?: { durations?: List<{ count?: number, text?: string, value?: number, }>, instructors?: List<{ id?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, }>, 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 /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' | 'strength', }, 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', 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, 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',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' | 'strength', }, 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', + strengthRoutine?: { + guid?: string, + }, 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', 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' | 'strength', }, 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', 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, format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength',name?: string, sortOrder?: number, status?: 'draft' | 'published', + strengthRoutine: { + guid?: string, + }, 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',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' | 'strength', }, 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', + strengthRoutine?: { + guid?: string, + }, 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', 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' | 'strength', }, 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', 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, 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',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' | 'strength', }, 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', + strengthRoutine?: { + guid?: string, + }, 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', 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' | 'strength', }, 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', 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, format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength',name: string, playlist: { id?: number, }, sortOrder: number, status: 'draft' | 'published', + strengthRoutine: { + guid?: string, + }, 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',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' | 'strength', }, 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', + strengthRoutine?: { + guid?: string, + }, 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', 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 /users/{userId}/account/add-phase
Request Body
{ durationDays?: number, initiatedBy: { id?: number, }, internalNote: string, planId: number, publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, },}
POST /users/{userId}/account/add-phase
Request Body
{ durationDays?: number, initiatedBy: { id?: number, }, internalNote: string, planId: number, publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, + startDate: number, }
GET /users/{userId}/collections/{collectionGuid}/progress
Get list of users completed workouts that count towards this collections progress
Response Body
{- data: { - collection?: { - guid?: string, - }, - dateJoined?: number, - status?: 'active' | 'completed' | 'abandoned' | 'cancelled', - userData?: { - progress?: { - completed?: number, - count?: number, - }, - workouts?: List<{ - contentGuid?: string, - date?: number, - workoutGuid?: string, - }>, - }, - },}
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' | 'strength', }, 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', 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',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' | 'strength', }, 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', + strengthRoutine?: { + guid?: string, + }, 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', 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 /strength-routine/items/{guid}
Load an individual strength routine by guid.
Guard: loggedIn, service
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, },- createdByEchelon?: bool,dateCreated?: 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?: { - images?: { - default?: string, - hd?: string, - portrait?: string, - sd?: string, - square?: string, - }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all', - 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',- 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, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }
GET /strength-routine/items/{guid}
Load an individual strength routine by guid.
Guard: loggedIn
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, },dateCreated?: number, dateModified?: number, description?: string, duration?: number, guid?: 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,
status?: 'draft' | 'published', tags?: List<{
images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
+ translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }
PATCH /strength-routine/items/{guid}
Edit a strength routine.
Request Body
{ circuit: bool, description: string, duration: number,- language: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr', - level: string,name: string, routineMovements: List<{ duration: number, mode?: 'standard' | 'interval', movement?: { guid?: string, }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description: string, interval: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility: 'public' | 'private', }
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, },- createdByEchelon?: bool,dateCreated?: 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?: { - images?: { - default?: string, - hd?: string, - portrait?: string, - sd?: string, - square?: string, - }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all', - 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',- 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, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }
PATCH /strength-routine/items/{guid}
Edit a strength routine.
Request Body
{ circuit: bool, description: string, duration: number,name: string, routineMovements: List<{ duration: number, mode?: 'standard' | 'interval', movement?: { guid?: string, }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description: string, interval: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility: 'public' | 'private', }
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, },dateCreated?: number, dateModified?: number, description?: string, duration?: number, guid?: 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,
status?: 'draft' | 'published', tags?: List<{
images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
+ translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }
DELETE /strength-routine/items/{guid}
Delete a strength routine.
Request Body
{ circuit: bool, description: string, duration: number,- language: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr', - level: string,name: string, routineMovements: List<{ duration: number, mode?: 'standard' | 'interval', movement?: { guid?: string, }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description: string, interval: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility: 'public' | 'private', }
DELETE /strength-routine/items/{guid}
Delete a strength routine.
Request Body
{ circuit: bool, description: string, duration: number,name: string, routineMovements: List<{ duration: number, mode?: 'standard' | 'interval', movement?: { guid?: string, }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description: string, interval: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility: 'public' | 'private', }
POST /strength-routine/movement/items
Producer and above only. Create a new strength routine movement. Not translated.
Request Body
{status: 'draft' | 'published', tags: List<{ value?: string, }>,
- translations?: record,}
Response Body
{ data: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number,guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },
- playback?: { - type?: 'hls' | 'dash', - url?: string, - },status?: 'draft' | 'published', tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', 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', }, }
POST /strength-routine/movement/items
Producer and above only. Create a new strength routine movement
Request Body
{ + description: string, + name?: string, status: 'draft' | 'published', tags: List<{ value?: string, }>,}
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, status?: 'draft' | 'published', tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
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',- 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. 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,status?: 'draft' | 'published', tags?: List<{
images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
+ translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>,
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
Request Body
{status: 'draft' | 'published', tags: List<{ value?: string, }>,
- translations: record,videoStatus: 'uploadCompleted', }
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',- 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
Request Body
{ + description: string, + name: string, status: 'draft' | 'published', tags: List<{ value?: string, }>,videoStatus: 'uploadCompleted', }
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,status?: 'draft' | 'published', tags?: List<{
images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
+ translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>,
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',- 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,status?: 'draft' | 'published', tags?: List<{
images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
+ translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
2 added endpoints Collapse added endpoints
PUT /workouts/items/{guid}
Put a Workout
Guard: loggedIn
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', }>, 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: { guid: string, incline: number, resistance: number, speed: number, }, physiology?: { calories: number, heartRate: number, hrPoints: number, }, playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering', }>, user?: { id?: number, }, }
POST /strength-routine/items
Create a new strength routine.
Guard: loggedIn
Request Body
{ circuit?: bool, description: string, duration: number, name?: string, routineMovements: List<{ duration: number, mode?: 'standard' | 'interval', movement?: { guid?: string, }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description: string, interval: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, duration?: number, guid?: 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, status?: 'draft' | 'published', tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }
10 deleted endpoints Collapse deleted endpoints
GET /users/findByEmail/{email}/dateActivated
Does user exist and are they activated.
Guard: service
Response Body
{ data: { dateActivated?: number, }, }
GET /users/{userId}/strength-workouts/items
Get strength workout summaries for a user
Guard: customerService, family
Response Body
{ data: List<{ completion?: number, 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, }, }>, 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, }, }, }
POST /strength-workouts/items
Documentation only
Guard: admin
Request Body
{ activity?: List<unknown>, device?: { appVersion?: string, model?: string, osVersion?: string, }, localTime?: string, peripherals?: List<{ firmwareVersion?: string, guid?: string, hardwareVersion?: string, modelId?: string, name?: string, serialNo?: string, type?: string, }>, routine?: { guid?: string, }, user?: { id?: number, }, }
Response Body
{ data: { guid?: string, }, }
POST /strength-workouts/process
Internal use only - post processed workout from lambda
Guard: service
Request Body
{ completion?: number, dateDeleted?: number, dateEnd?: number, dateStart?: number, guid?: string, movementStats?: List<{ interval?: bool, movementGuid?: 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, }, }>, strengthRoutineGuid?: string, timeOffset?: number, userId?: 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}
Get Detailed view of workout. Includes deleted workouts.
Guard: customerService
Response Body
{ data: { data?: record, }, }
GET /strength-workouts/items/{guid}/summary
Guard: loggedIn
Response Body
{ data: { completion?: number, 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, }, }>, 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-routine/admin/library
Producer and above only. Search the library with elevated access.
Guard: producer, service
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?: { images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', 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<{ 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', 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, }, }, }
PATCH /users/{userId}/account/edit-phase
Guard: customerService
Request Body
{ durationDays?: number, initiatedBy: { id?: number, }, internalNote: string, planId: number, publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, }
Response Body
{ data: { creditBalance?: number, dateCancelled?: number, dateExpires?: number, datePausedUntil?: number, defaultPaymentMethod?: { brand?: string, code?: string, expiration?: string, type?: string, }, discounts?: { amount: number, currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, dateEnd?: number, dateStart?: number, name?: string, percent: number, }, nextInvoice?: { amount?: number, currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, dateScheduled?: number, }, status?: { code?: 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary' | 'childProfile' | 'neverSubscribed', text?: string, }, subscription?: { activation?: { isActivated?: bool, isFirstPeriodPrepaid?: bool, }, billing?: { customerCode?: string, orderCode?: string, }, cancellation?: { dateCancelled?: number, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, offer?: { createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, type?: 'trial' | 'bundle', }, discount?: { discountStripeCouponCode?: string, introDiscount?: number, introDiscountPaymentCount?: number, }, guid?: string, name?: string, plan?: { basePrice?: { currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, priceCode?: string, productCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, country?: { code?: string, currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, name?: string, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { units?: 'month', value?: number, }, frequencyDays?: number, id?: number, legacyPlanFlags?: { emailTemplateId?: number, isOrderProcessedByHook?: bool, showInOldMember?: bool, }, name?: string, sku?: string, sortOrder?: number, source?: { accountId?: string, productId?: string, type?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', }, tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy?: { id?: number, }, }, status?: 'draft' | 'published', }, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { basePrice?: { currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, priceCode?: string, productCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, country?: { code?: string, currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, name?: string, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { units?: 'month', value?: number, }, frequencyDays?: number, id?: number, legacyPlanFlags?: { emailTemplateId?: number, isOrderProcessedByHook?: bool, showInOldMember?: bool, }, name?: string, sku?: string, sortOrder?: number, source?: { accountId?: string, productId?: string, type?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', }, tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy?: { id?: number, }, }, price?: { currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, value?: number, }, promotion?: { id?: number, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', schedule?: { createdAt?: number, endBehavior?: 'cancel' | 'none' | 'release' | 'renew', id?: string, phases?: List<string>, }, source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary', subscriptionAddons?: List<{ addonOffer?: { addon?: { createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, featureOverrides?: List<{ code?: string, value?: record, }>, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, translations?: record, updatedBy?: { id?: number, }, video?: { url?: string, }, }, billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, country?: { code?: string, currency?: { code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL', scale?: number, }, name?: string, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, frequencyDays?: number, guid?: string, name?: string, status?: 'draft' | 'published' | 'trash', unitPrice?: { priceCode: string, value?: number, }, updatedBy?: { id?: number, }, }, dateCancelled?: number, dateExpires?: number, dateStart?: number, guid?: string, subscription?: { id?: number, }, }>, term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign: string, content: string, medium: string, source: string, term: string, }, }, }, }
POST /users/{userId}/strength-routines/import
Copy a strength routine.
Guard: customerService, family
Request Body
{ guid?: string, name?: string, }
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, }, createdByEchelon?: bool, dateCreated?: 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?: { images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', 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', 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, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }
POST /users/{userId}/strength-routines/items
Create a new strength routine.
Guard: family, producer
Request Body
{ circuit: bool, createdByEchelon: bool, description: string, duration: number, language: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr', level: string, name?: string, routineMovements: List<{ duration: number, mode?: 'standard' | 'interval', movement?: { guid?: string, }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description: string, interval: { duration?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility: 'public' | 'private', }
Response Body
{ data: { circuit?: bool, createdBy?: { id?: number, }, createdByEchelon?: bool, dateCreated?: 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?: { images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', 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', 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, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }