Nest Changelog

1.41.6 PRE

9/14/2023

1.42.0 PRE

9/19/2023

10 changed endpoints

GET /users/{userId}/workouts/items

Get workout summaries for user

Response Body
{
  data: List<{

content?: { description?: string, duration?: number, guid?: string, image?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, percentile?: number, ranking?: { place?: number, total?: number, }, stats?: { calories: number, distance: number, heartRate: number, heartRateMax: number, hrPoints: number, incline: number, joules: number, resistance: number, rpm: number, speed: number, spm: number, }, status?: 'incomplete' | 'complete', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /users/{userId}/workouts/items

Get workout summaries for user

Response Body
{
  data: List<{
+   appSource?: 'echelon' | 'worlds' | 'fitos',
    content?: {
      description?: string,
      duration?: number,
      guid?: string,
      image?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      instructors?: List<{
        id?: number,
        name?: string,
      }>,
      legacy?: {
        id?: number,
        type?: 'reflect' | 'connect',
      },
      name?: string,
      type?: 'live' | 'vod' | 'encore' | 'freestyle',
    },
    dateEnd?: number,
    dateStart?: number,
    duration?: {
      percentage?: number,
      text?: string,
      value?: number,
    },
    guid?: string,
    output?: number,
    percentile?: number,
    ranking?: {
      place?: number,
      total?: number,
    },
    stats?: {
      calories: number,
      distance: number,
      heartRate: number,
      heartRateMax: number,
      hrPoints: number,
      incline: number,
      joules: number,
      resistance: number,
      rpm: number,
      speed: number,
      spm: number,
    },
    status?: 'incomplete' | 'complete',
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total?: {
      pages?: number,
      rows?: number,
    },
  },
}

GET /users/{userId}/workouts/aggregations

Get workout aggregations for user

Response Body
{
  data: {
    furthestDistance?: number,
    highestOutput?: number,
    mostRecent?: {

content?: { description?: string, duration?: number, guid?: string, image?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, percentile?: number, ranking?: { place?: number, total?: number, }, stats?: { calories: number, distance: number, heartRate: number, heartRateMax: number, hrPoints: number, incline: number, joules: number, resistance: number, rpm: number, speed: number, spm: number, }, status?: 'incomplete' | 'complete', }, personalBest?: {

content?: { description?: string, duration?: number, guid?: string, image?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, percentile?: number, ranking?: { place?: number, total?: number, }, stats?: { calories: number, distance: number, heartRate: number, heartRateMax: number, hrPoints: number, incline: number, joules: number, resistance: number, rpm: number, speed: number, spm: number, }, status?: 'incomplete' | 'complete', }, totalClasses?: number, totalDistance?: number, totalDuration?: number, }, }

GET /users/{userId}/workouts/aggregations

Get workout aggregations for user

Response Body
{
  data: {
    furthestDistance?: number,
    highestOutput?: number,
    mostRecent?: {
+     appSource?: 'echelon' | 'worlds' | 'fitos',
      content?: {
        description?: string,
        duration?: number,
        guid?: string,
        image?: {
          default?: string,
          hd?: string,
          portrait?: string,
          sd?: string,
          square?: string,
        },
        instructors?: List<{
          id?: number,
          name?: string,
        }>,
        legacy?: {
          id?: number,
          type?: 'reflect' | 'connect',
        },
        name?: string,
        type?: 'live' | 'vod' | 'encore' | 'freestyle',
      },
      dateEnd?: number,
      dateStart?: number,
      duration?: {
        percentage?: number,
        text?: string,
        value?: number,
      },
      guid?: string,
      output?: number,
      percentile?: number,
      ranking?: {
        place?: number,
        total?: number,
      },
      stats?: {
        calories: number,
        distance: number,
        heartRate: number,
        heartRateMax: number,
        hrPoints: number,
        incline: number,
        joules: number,
        resistance: number,
        rpm: number,
        speed: number,
        spm: number,
      },
      status?: 'incomplete' | 'complete',
    },
    personalBest?: {
+     appSource?: 'echelon' | 'worlds' | 'fitos',
      content?: {
        description?: string,
        duration?: number,
        guid?: string,
        image?: {
          default?: string,
          hd?: string,
          portrait?: string,
          sd?: string,
          square?: string,
        },
        instructors?: List<{
          id?: number,
          name?: string,
        }>,
        legacy?: {
          id?: number,
          type?: 'reflect' | 'connect',
        },
        name?: string,
        type?: 'live' | 'vod' | 'encore' | 'freestyle',
      },
      dateEnd?: number,
      dateStart?: number,
      duration?: {
        percentage?: number,
        text?: string,
        value?: number,
      },
      guid?: string,
      output?: number,
      percentile?: number,
      ranking?: {
        place?: number,
        total?: number,
      },
      stats?: {
        calories: number,
        distance: number,
        heartRate: number,
        heartRateMax: number,
        hrPoints: number,
        incline: number,
        joules: number,
        resistance: number,
        rpm: number,
        speed: number,
        spm: number,
      },
      status?: 'incomplete' | 'complete',
    },
    totalClasses?: number,
    totalDistance?: number,
    totalDuration?: number,
  },
}

GET /content/items

Admin only. Get list of content items.

Response Body
{
  data: List<{
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,

}, - stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', - stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /content/items

Admin only. Get list of content items.

Response Body
{
  data: List<{
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,
+       status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+       type?: 'firstplay' | 'replay' | 'normal',
      },

}, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

POST /content/items

Create a content item

Request Body
{
  catalog?: {
    code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
  },
  countries?: List<{
    code?: string,
  }>,
  description?: string,
  featuredRow?: string,
- feedFm?: {
-   backupStation?: string,
-   primaryStation?: string,
-   stationType?: 'firstplay' | 'replay' | 'normal',

}, format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name?: string, sortOrder?: number, status?: 'draft' | 'published', studios?: List<{ id?: number, precedence?: number, }>, tags?: List<{ value?: string, }>, videoLength?: { id?: number, }, }
Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,

}, - stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', - stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

POST /content/items

Create a content item

Request Body
{
  catalog?: {
    code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
  },
  countries?: List<{
    code?: string,
  }>,
  description?: string,
  featuredRow?: string,

+ feedFm: { + backupStation: { + guid?: string, + }, + primaryStation?: { + guid: string, + type?: 'firstplay' | 'replay' | 'normal', + }, }, format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name?: string, sortOrder?: number, status?: 'draft' | 'published', studios?: List<{ id?: number, precedence?: number, }>, tags?: List<{ value?: string, }>, videoLength?: { id?: number, }, }
Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,
+       status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+       type?: 'firstplay' | 'replay' | 'normal',
      },

}, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /content/items/{guid}

Get a specific content item.

Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,

}, - stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', - stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /content/items/{guid}

Get a specific content item.

Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,
+       status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+       type?: 'firstplay' | 'replay' | 'normal',
      },

}, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

PATCH /content/items/{guid}

Update a content item

Request Body
{
  catalog: {
    code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
  },
  countries: List<{
    code?: string,
  }>,
  description: string,
  featuredRow: string,
  feedFm: {
    backupStation?: {
      guid?: string,
    },
    playbackStation?: {
      guid?: string,
      type?: 'firstplay' | 'replay' | 'normal',
    },
    primaryStation?: {
      guid?: string,

}, - stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', - stationType?: 'firstplay' | 'replay' | 'normal', }, format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name: string, playlist: { id?: number, }, sortOrder: number, status: 'draft' | 'published', studios: List<{ id?: number, precedence?: number, }>, tags: List<{ value?: string, }>, videoLength: { id?: number, }, videoStatus: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }
Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,

}, - stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', - stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

PATCH /content/items/{guid}

Update a content item

Request Body
{
  catalog: {
    code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
  },
  countries: List<{
    code?: string,
  }>,
  description: string,
  featuredRow: string,
  feedFm: {
    backupStation?: {
      guid?: string,
    },
    playbackStation?: {
      guid?: string,
      type?: 'firstplay' | 'replay' | 'normal',
    },
    primaryStation?: {
      guid?: string,
+     status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+     type?: 'firstplay' | 'replay' | 'normal',
    },

}, format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, name: string, playlist: { id?: number, }, sortOrder: number, status: 'draft' | 'published', studios: List<{ id?: number, precedence?: number, }>, tags: List<{ value?: string, }>, videoLength: { id?: number, }, videoStatus: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }
Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,
+       status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+       type?: 'firstplay' | 'replay' | 'normal',
      },

}, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

POST /workouts/items

Documentation only - Look at description for the actual endpoints

Request Body
{
  content: {
    guid?: string,
    type?: 'live' | 'vod' | 'encore' | 'freestyle',
  },
  device?: {
    appVersion?: string,
    model?: string,
    os?: string,
    osVersion?: string,
  },
  legacyProduct?: string,
  localTime?: string,
  percentile: number,
  peripherals?: List<{
    firmwareVersion?: string,
    guid?: string,
    hardwareVersion?: string,
    modelId?: string,
    name?: string,
    serialNO?: string,
    type?: 'bike' | 'rower' | 'treadmill' | 'elliptical' | 'reflect',
  }>,
  ranking: {
    place?: number,
    total?: number,
  },

stats?: List<{ classState?: 'warmup' | 'in-session' | 'overflow' | 'ended', dateLoggedMs?: number, output?: { distance: number, incrementalDistance: number, joules: number, RPM: number, strokesPerMinute: number, time500Meters: number, watts: number, }, peripheral: { direction: 'forward' | 'backward', guid: string, incline: number, resistance: number, speed: number, }, physiology?: { calories: number, heartRate: number, hrPoints: number, }, playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering', }>, user?: { id?: number, }, }

POST /workouts/items

Documentation only - Look at description for the actual endpoints

Request Body
{
  content: {
    guid?: string,
    type?: 'live' | 'vod' | 'encore' | 'freestyle',
  },
  device?: {
    appVersion?: string,
    model?: string,
    os?: string,
    osVersion?: string,
  },
  legacyProduct?: string,
  localTime?: string,
  percentile: number,
  peripherals?: List<{
    firmwareVersion?: string,
    guid?: string,
    hardwareVersion?: string,
    modelId?: string,
    name?: string,
    serialNO?: string,
    type?: 'bike' | 'rower' | 'treadmill' | 'elliptical' | 'reflect',
  }>,
  ranking: {
    place?: number,
    total?: number,
  },
+ source: 'echelon' | 'worlds' | 'fitos',
  stats?: List<{
    classState?: 'warmup' | 'in-session' | 'overflow' | 'ended',
    dateLoggedMs?: number,
    output?: {
      distance: number,
      incrementalDistance: number,
      joules: number,
      RPM: number,
      strokesPerMinute: number,
      time500Meters: number,
      watts: number,
    },
    peripheral: {
      direction: 'forward' | 'backward',
      guid: string,
      incline: number,
      resistance: number,
      speed: number,
    },
    physiology?: {
      calories: number,
      heartRate: number,
      hrPoints: number,
    },
    playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering',
  }>,
  user?: {
    id?: number,
  },
}

POST /workouts/process

Process workout - Internal use only

Request Body
{
  rideIndex?: {
    appversion: string,
    avgcadence: number,
    avgresistance: number,
    classimage: string,
    classname: string,
    datecreated: string,
    device: string,
    distancetype?: string,
    dnf: bool,
    finalrank: number,
    incline: number,
    instanceuuid?: string,
    instructorname: string,
    iscomplete: bool,
    osversion: string,
    product?: string,
    rideid: number,
    ridetype?: string,
    source: string,
    totalcalories: number,
    totaldistance: number,
    totalhrpoints: number,
    totaloutput: number,
    totalriders: number,
    totalrpmspm: number,
    userid?: number,
  },
  rideIndexById?: {
    appversion: string,
    avgcadence: number,
    avgheartrate: number,
    avgresistance: number,
    classimage: string,
    classname: string,
    datecreated: string,
    device: string,
    distancetype?: string,
    dnf: bool,
    duration: number,
    encore: bool,
    finalrank: number,
    incline: number,
    instanceuuid?: string,
    instructorname: string,
    iscomplete: bool,
    osversion: string,
    product?: string,
    rideid: number,
    ridetype: string,
    source: string,
    totalcalories: number,
    totaldistance: number,
    totalhrpoints: number,
    totaloutput: number,
    totalriders: number,
    totalrpmspm: number,
    userid: number,
  },
  segment?: {
    activity_type: string,
    bike_statistics: {
      cadence?: number,
      calories?: number,
      distance?: number,
      output?: {
        average?: number,
        best?: number,
        total?: number,
      },
      resistance?: {
        average?: number,
        maximum?: number,
      },
      speed?: number,
    },
    class_length: number,
    class_name: string,
    content_id: string,
    content_type: 'live' | 'vod' | 'encore' | 'freestyle',
    email?: string,
    equipment_type: 'bike' | 'fitpass' | 'reflect' | 'row' | 'stride' | 'ellipse',
    first_name?: string,
    fitpass_statistics: {
      calories?: number,
      heart_rate_points?: number,
    },
    instructor_id: number,
    instructor_name: string,
    last_name?: string,
    metric_preference?: 'imperial' | 'metric',
    music_genre: string,
    place: number,
    platform?: string,
    reflect_statistics: {
      calories?: number,
      heart_rate_points?: number,
    },
    rowing_statistics: {
      calories?: number,
      distance?: number,
      output?: {
        average?: number,
        best?: number,
        total?: number,
      },
      resistance?: {
        average?: number,
        maximum?: number,
      },
      speed?: number,
      stroke?: {
        average?: number,
        maximum?: number,
      },
    },
    stride_statistics: {
      calories?: number,
      distance?: number,
      incline?: {
        average?: number,
        maximum?: number,
      },
      output?: {
        average?: number,
        best?: number,
        total?: number,
      },
      speed?: {
        average?: number,
        maximum?: number,
      },
    },
    user_id?: number,
  },
  workoutEntity?: {

buffering?: number, commercialCode?: string, completion?: number, contentDuration?: number, contentGuid?: string, dateDeleted?: number, dateEnd?: number, dateStart?: number, duration?: number, format?: string, guid?: string, output?: number, percentile?: number, rankingPlace?: number, rankingTotal?: number, stats?: record, timeOffset?: number, type?: 'live' | 'vod' | 'encore' | 'freestyle', userId?: number, }, }

POST /workouts/process

Process workout - Internal use only

Request Body
{
  rideIndex?: {
    appversion: string,
    avgcadence: number,
    avgresistance: number,
    classimage: string,
    classname: string,
    datecreated: string,
    device: string,
    distancetype?: string,
    dnf: bool,
    finalrank: number,
    incline: number,
    instanceuuid?: string,
    instructorname: string,
    iscomplete: bool,
    osversion: string,
    product?: string,
    rideid: number,
    ridetype?: string,
    source: string,
    totalcalories: number,
    totaldistance: number,
    totalhrpoints: number,
    totaloutput: number,
    totalriders: number,
    totalrpmspm: number,
    userid?: number,
  },
  rideIndexById?: {
    appversion: string,
    avgcadence: number,
    avgheartrate: number,
    avgresistance: number,
    classimage: string,
    classname: string,
    datecreated: string,
    device: string,
    distancetype?: string,
    dnf: bool,
    duration: number,
    encore: bool,
    finalrank: number,
    incline: number,
    instanceuuid?: string,
    instructorname: string,
    iscomplete: bool,
    osversion: string,
    product?: string,
    rideid: number,
    ridetype: string,
    source: string,
    totalcalories: number,
    totaldistance: number,
    totalhrpoints: number,
    totaloutput: number,
    totalriders: number,
    totalrpmspm: number,
    userid: number,
  },
  segment?: {
    activity_type: string,
    bike_statistics: {
      cadence?: number,
      calories?: number,
      distance?: number,
      output?: {
        average?: number,
        best?: number,
        total?: number,
      },
      resistance?: {
        average?: number,
        maximum?: number,
      },
      speed?: number,
    },
    class_length: number,
    class_name: string,
    content_id: string,
    content_type: 'live' | 'vod' | 'encore' | 'freestyle',
    email?: string,
    equipment_type: 'bike' | 'fitpass' | 'reflect' | 'row' | 'stride' | 'ellipse',
    first_name?: string,
    fitpass_statistics: {
      calories?: number,
      heart_rate_points?: number,
    },
    instructor_id: number,
    instructor_name: string,
    last_name?: string,
    metric_preference?: 'imperial' | 'metric',
    music_genre: string,
    place: number,
    platform?: string,
    reflect_statistics: {
      calories?: number,
      heart_rate_points?: number,
    },
    rowing_statistics: {
      calories?: number,
      distance?: number,
      output?: {
        average?: number,
        best?: number,
        total?: number,
      },
      resistance?: {
        average?: number,
        maximum?: number,
      },
      speed?: number,
      stroke?: {
        average?: number,
        maximum?: number,
      },
    },
    stride_statistics: {
      calories?: number,
      distance?: number,
      incline?: {
        average?: number,
        maximum?: number,
      },
      output?: {
        average?: number,
        best?: number,
        total?: number,
      },
      speed?: {
        average?: number,
        maximum?: number,
      },
    },
    user_id?: number,
  },
  workoutEntity?: {
+   appSource: 'echelon' | 'worlds' | 'fitos',
    buffering?: number,
    commercialCode?: string,
    completion?: number,
    contentDuration?: number,
    contentGuid?: string,
    dateDeleted?: number,
    dateEnd?: number,
    dateStart?: number,
    duration?: number,
    format?: string,
    guid?: string,
    output?: number,
    percentile?: number,
    rankingPlace?: number,
    rankingTotal?: number,
    stats?: record,
    timeOffset?: number,
    type?: 'live' | 'vod' | 'encore' | 'freestyle',
    userId?: number,
  },
}

GET /workouts/items/{guid}/summary

Get summary view of a workout

Response Body
{
  data: {

content?: { description?: string, duration?: number, guid?: string, image?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, percentile?: number, ranking?: { place?: number, total?: number, }, stats?: { calories: number, distance: number, heartRate: number, heartRateMax: number, hrPoints: number, incline: number, joules: number, resistance: number, rpm: number, speed: number, spm: number, }, status?: 'incomplete' | 'complete', user?: { id?: number, }, }, }

GET /workouts/items/{guid}/summary

Get summary view of a workout

Response Body
{
  data: {
+   appSource?: 'echelon' | 'worlds' | 'fitos',
    content?: {
      description?: string,
      duration?: number,
      guid?: string,
      image?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      instructors?: List<{
        id?: number,
        name?: string,
      }>,
      legacy?: {
        id?: number,
        type?: 'reflect' | 'connect',
      },
      name?: string,
      type?: 'live' | 'vod' | 'encore' | 'freestyle',
    },
    dateEnd?: number,
    dateStart?: number,
    duration?: {
      percentage?: number,
      text?: string,
      value?: number,
    },
    guid?: string,
    output?: number,
    percentile?: number,
    ranking?: {
      place?: number,
      total?: number,
    },
    stats?: {
      calories: number,
      distance: number,
      heartRate: number,
      heartRateMax: number,
      hrPoints: number,
      incline: number,
      joules: number,
      resistance: number,
      rpm: number,
      speed: number,
      spm: number,
    },
    status?: 'incomplete' | 'complete',
    user?: {
      id?: number,
    },
  },
}

GET /legacy/{id}/content

Get content for legacy class

Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,

}, - stationStatus?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', - stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /legacy/{id}/content

Get content for legacy class

Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFm?: {
      backupStation?: {
        guid?: string,
      },
      playbackStation?: {
        guid?: string,
        type?: 'firstplay' | 'replay' | 'normal',
      },
      primaryStation?: {
        guid?: string,
+       status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive',
+       type?: 'firstplay' | 'replay' | 'normal',
      },

}, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }
WORK IN PROGRESS