Nest Changelog

1.44.27

10/23/2023

1.45.0 PRE

10/16/2023

38 changed endpoints

PATCH /strength-routine/items/{guid}

Edit a strength routine.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

PATCH /strength-routine/items/{guid}

Edit a strength routine.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

POST /strength-routine/movement/items

Producer and above only. Create a new strength routine movement.

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' | 'ellipse' | 'lift',

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.

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' | 'ellipse' | 'lift' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /strength-routine/movement/items

List strength routine movements. Translated. Paginated.

Response Body
{
  data: List<{
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateModified?: number,
    description?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    name?: string,
    playback?: {
      type?: 'hls' | 'dash',
      url?: string,
    },
    status?: 'draft' | 'published',
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /strength-routine/movement/items

List strength routine movements. Translated. Paginated.

Response Body
{
  data: List<{
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateModified?: number,
    description?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    name?: string,
    playback?: {
      type?: 'hls' | 'dash',
      url?: string,
    },
    status?: 'draft' | 'published',
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

PATCH /strength-routine/movement/items/{guid}

Admin only. Edit a specific strength routine movement

Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateModified?: number,
    description?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    name?: string,
    playback?: {
      type?: 'hls' | 'dash',
      url?: string,
    },
    status?: 'draft' | 'published',
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, 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', }, }

PATCH /strength-routine/movement/items/{guid}

Admin only. Edit a specific strength routine movement

Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateModified?: number,
    description?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    name?: string,
    playback?: {
      type?: 'hls' | 'dash',
      url?: string,
    },
    status?: 'draft' | 'published',
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /strength-routine/movement/items/{guid}

Return a single strength routine movement.

Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateModified?: number,
    description?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    name?: string,
    playback?: {
      type?: 'hls' | 'dash',
      url?: string,
    },
    status?: 'draft' | 'published',
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /strength-routine/movement/items/{guid}

Return a single strength routine movement.

Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateModified?: number,
    description?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    name?: string,
    playback?: {
      type?: 'hls' | 'dash',
      url?: string,
    },
    status?: 'draft' | 'published',
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /strength-routine/admin/items/{guid}

Load an individual strength routine by guid.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

GET /strength-routine/admin/items/{guid}

Load an individual strength routine by guid.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

GET /strength-routine/admin/library

Producer and above only. Search the library with elevated access.

Response Body
{
  data: List<{
    circuit?: bool,
    createdByEchelon?: bool,
    dateCreated?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, movements?: List<string>, name?: string, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, visibility?: 'public' | 'private', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /strength-routine/admin/library

Producer and above only. Search the library with elevated access.

Response Body
{
  data: List<{
    circuit?: bool,
    createdByEchelon?: bool,
    dateCreated?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, movements?: List<string>, name?: string, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, visibility?: 'public' | 'private', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /content/library

Search for content in the Library.

Response Body
{
  data: List<{
    catalog?: {
-     audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

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?: { 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', 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?: { 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' | 'radio',

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?: { 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?: { 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' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, 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?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', 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' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, description?: string, featuredRow?: string, feedFM: { normalStation: string, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, musicSource: 'playlist' | 'feedFM' | 'none', name?: string, 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' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, 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: { normalStation: string, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, instructors?: List<{ id?: number, precedence?: number, }>, medium?: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, musicSource: 'playlist' | 'feedFM' | 'none', name?: string, 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?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', 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' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /content/items/{guid}

Get a specific content item.

Response Body
{
  data: {
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

PATCH /content/items/{guid}

Update a content item

Request Body
{
  catalog: {
-   code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries: List<{ code?: string, }>, description: string, featuredRow: string, feedFM: { normalStation: string, stationType?: 'firstplay' | 'replay' | 'normal', }, format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, musicSource: 'playlist' | 'feedFM' | 'none', name: string, 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' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, 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: { normalStation: string, stationType?: 'firstplay' | 'replay' | 'normal', }, format: { code?: string, }, instructors: List<{ id?: number, precedence?: number, }>, medium: 'reflect' | 'standard' | 'strength', mediumLinked: { guid?: string, }, musicSource: 'playlist' | 'feedFM' | 'none', name: string, 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?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', 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}/schedule/{scheduleGuid}

This is a convenience endpoint, that loads content information with a specific schedule, rather than all schedules, included.

Response Body
{
  data: {
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: { available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /content/items/{guid}/schedule/{scheduleGuid}

This is a convenience endpoint, that loads content information with a specific schedule, rather than all schedules, included.

Response Body
{
  data: {
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: { available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, userData?: { favorite?: { content?: bool, }, workout?: { status?: 'finished' | 'DNF', }, }, videoLength?: { id?: number, name?: string, value?: number, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, }

GET /content/tags

List of tags.

Response Body
{
  data: List<{
    description?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
-   modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /content/tags

List of tags.

Response Body
{
  data: List<{
    description?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /content/tags/{value}

Get one content tag by value.

Response Body
{
  data: {
    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, }, }

GET /content/tags/{value}

Get one content tag by value.

Response Body
{
  data: {
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, }

PUT /content/tags/{value}

Create a New Tag

Request Body
{
- modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', }
Response Body
{
  data: {
    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, }, }

PUT /content/tags/{value}

Create a New Tag

Request Body
{

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', }
Response Body
{
  data: {
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, }

PATCH /content/tags/{value}

Edit a tag

Request Body
{
- modality: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

translations: record, type: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', }
Response Body
{
  data: {
    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, }, }

PATCH /content/tags/{value}

Edit a tag

Request Body
{

+ modality: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', translations: record, type: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', }
Response Body
{
  data: {
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, }

POST /collections/items

Create a new Collection

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      eventCode?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard' | 'strength',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

POST /collections/items

Create a new Collection

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      eventCode?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard' | 'strength',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

GET /collections/items/{guid}

Get a collection by guid. Cached every 10 minutes.

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      eventCode?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard' | 'strength',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

GET /collections/items/{guid}

Get a collection by guid. Cached every 10 minutes.

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      eventCode?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard' | 'strength',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

PATCH /collections/items/{guid}

Update a Collection

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      eventCode?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard' | 'strength',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

PATCH /collections/items/{guid}

Update a Collection

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      eventCode?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard' | 'strength',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

GET /playlists

Get a list of playlists

Response Body
{
  data: List<{
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, trackCount?: number, videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /playlists

Get a list of playlists

Response Body
{
  data: List<{
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, trackCount?: number, videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

POST /playlists

Create a new playlist

Response Body
{
  data: {
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, videoLength?: { id?: number, name?: string, }, }, }

POST /playlists

Create a new playlist

Response Body
{
  data: {
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, videoLength?: { id?: number, name?: string, }, }, }

GET /playlists/{playlist}

Get a single playlist by ID

Response Body
{
  data: {
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright?: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights?: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags?: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }

GET /playlists/{playlist}

Get a single playlist by ID

Response Body
{
  data: {
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright?: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights?: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags?: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }

PATCH /playlists/{id}

Update an existing playlist

Request Body
{
  catalog: {
-   code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries: List<{ code?: string, }>, createdBy: { id?: number, name?: string, }, dateCreated: number, dateUpdated: number, id: number, instructors: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged: bool, legacyContentExplicit: bool, name: string, schedule: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, videoLength: { id?: number, name?: string, }, }
Response Body
{
  data: {
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright?: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights?: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags?: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }

PATCH /playlists/{id}

Update an existing playlist

Request Body
{
  catalog: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries: List<{ code?: string, }>, createdBy: { id?: number, name?: string, }, dateCreated: number, dateUpdated: number, id: number, instructors: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged: bool, legacyContentExplicit: bool, name: string, schedule: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, videoLength: { id?: number, name?: string, }, }
Response Body
{
  data: {
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright?: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights?: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags?: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }

POST /playlists/{playlist}/import

Import all songs from a playlist to another playlist

Response Body
{
  data: {
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright?: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights?: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags?: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }

POST /playlists/{playlist}/import

Import all songs from a playlist to another playlist

Response Body
{
  data: {
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright?: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights?: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags?: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }

GET /content/catalogs

Get all catalogs

Response Body
{
  data: List<{
-   audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }>, }

GET /content/catalogs

Get all catalogs

Response Body
{
  data: List<{

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }>, }

POST /content/catalogs

Create a new catalog

Request Body
{
- audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, name?: string, }
Response Body
{
  data: {
-   audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

POST /content/catalogs

Create a new catalog

Request Body
{

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, name?: string, }
Response Body
{
  data: {

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

GET /content/catalogs/{code}

Get a specific catalog

Response Body
{
  data: {
-   audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

GET /content/catalogs/{code}

Get a specific catalog

Response Body
{
  data: {

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

PATCH /content/catalogs/{code}

Edit a catalog (overlay)

Request Body
{
- audio: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code: string, equipment: List<'connected' | 'disconnected' | 'offModality'>, name: string, }
Response Body
{
  data: {
-   audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

PATCH /content/catalogs/{code}

Edit a catalog (overlay)

Request Body
{

+ audio: 'labelMusic' | 'royaltyFree' | 'userProvided', code: string, equipment: List<'connected' | 'disconnected' | 'offModality'>, name: string, }
Response Body
{
  data: {

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

PUT /content/catalogs/{code}

Edit a catalog (replace)

Request Body
{
- audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, name?: string, }
Response Body
{
  data: {
-   audio?: 'labelMusic' | 'royaltyFree' | 'userProvided' | 'radio',

code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

PUT /content/catalogs/{code}

Edit a catalog (replace)

Request Body
{

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, name?: string, }
Response Body
{
  data: {

+ audio?: 'labelMusic' | 'royaltyFree' | 'userProvided', code?: string, equipment?: List<'connected' | 'disconnected' | 'offModality'>, hasMusic?: bool, isWorldWide?: bool, name?: string, planFamilies?: List<{ code?: string, }>, }, }

GET /songs/{id}/playlists

Get all playlists that contain this song

Response Body
{
  data: List<{
    catalog?: {
-     code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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, }>, videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /songs/{id}/playlists

Get all playlists that contain this song

Response Body
{
  data: List<{
    catalog?: {

+ code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free', }, countries?: List<{ code?: string, }>, createdBy?: { id?: number, name?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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' | 'climb', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /favorites/{userId}/items

List users favorite content items.

Response Body
{
  data: List<{
    content?: {
      format?: {
        code?: string,
      },
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      instructors?: List<{
        bio?: string,
        createdBy?: {
          id?: number,
        },
        dateCreated?: number,
        dateUpdated?: number,
        flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>,
        id?: number,
        images?: {
          default?: string,
          hd?: string,
          portrait?: string,
          sd?: string,
          square?: string,
        },
        name?: string,
        status?: 'active' | 'inactive',
        studio?: {
          id?: number,
        },
        updatedBy?: {
          id?: number,
        },
        user?: {
          id?: number,
        },
      }>,
      medium?: 'reflect' | 'standard' | 'strength',
      name?: string,
      scheduleGuid?: string,
      status?: 'draft' | 'published' | 'trash',
      tags?: List<{
        description?: string,
        images?: {
          default?: string,
          hd?: string,
          portrait?: string,
          sd?: string,
          square?: string,
        },
-       modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, }, dateCreated?: number, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /favorites/{userId}/items

List users favorite content items.

Response Body
{
  data: List<{
    content?: {
      format?: {
        code?: string,
      },
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      instructors?: List<{
        bio?: string,
        createdBy?: {
          id?: number,
        },
        dateCreated?: number,
        dateUpdated?: number,
        flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>,
        id?: number,
        images?: {
          default?: string,
          hd?: string,
          portrait?: string,
          sd?: string,
          square?: string,
        },
        name?: string,
        status?: 'active' | 'inactive',
        studio?: {
          id?: number,
        },
        updatedBy?: {
          id?: number,
        },
        user?: {
          id?: number,
        },
      }>,
      medium?: 'reflect' | 'standard' | 'strength',
      name?: string,
      scheduleGuid?: string,
      status?: 'draft' | 'published' | 'trash',
      tags?: List<{
        description?: string,
        images?: {
          default?: string,
          hd?: string,
          portrait?: string,
          sd?: string,
          square?: string,
        },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, }, dateCreated?: number, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

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' | 'FitPassRadio' | 'ConnectedRadio' | 'FlexRadio',

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, featuredRow?: string, feedFM?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, updatedBy?: { id?: number, }, 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?: { firstplayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, normalStation?: { guid?: string, }, playbackStation?: { guid?: string, type?: 'firstplay' | 'replay' | 'normal', }, replayStation?: { guid?: string, status?: 'notRequested' | 'requested' | 'testRequested' | 'cancelled' | 'active' | 'testActive', }, stationType?: 'firstplay' | 'replay' | 'normal', }, format?: { code?: string, }, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, keywords?: string, medium?: 'reflect' | 'standard' | 'strength', mediumLinked?: { guid?: string, }, musicSource?: 'playlist' | 'feedFM' | 'none', name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, controlStation?: { guid?: string, }, guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sortOrder?: number, sourceUrl?: string, sourceVideo?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, tags?: List<{ images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', 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}/strength-routines/import

Copy a strength routine.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

POST /users/{userId}/strength-routines/import

Copy a strength routine.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

POST /users/{userId}/strength-routines/items

Create a new strength routine.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

POST /users/{userId}/strength-routines/items

Create a new strength routine.

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, visibility?: 'public' | 'private', }, }

GET /users/{userId}/strength-routines/items/{guid}

Get strength routine for a user, comes with workout data for this routine

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, userData?: { workouts?: { history?: List<{ date?: number, guid?: string, isPersonalBest?: bool, status?: 'incomplete' | 'complete', }>, personalBest?: { guid?: string, totalVolume?: number, }, }, }, visibility?: 'public' | 'private', }, }

GET /users/{userId}/strength-routines/items/{guid}

Get strength routine for a user, comes with workout data for this routine

Response Body
{
  data: {
    circuit?: bool,
    createdBy?: {
      id?: number,
    },
    createdByEchelon?: bool,
    dateCreated?: number,
    dateDeleted?: number,
    dateModified?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: 'en' | 'fr' | 'es' | 'de' | 'ko' | 'tr',
    level?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, modifiedBy?: number, name?: string, routineMovements?: List<{ duration?: number, mode?: 'standard' | 'interval', movement?: { createdBy?: { id?: number, }, dateCreated?: number, dateModified?: number, description?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, name?: string, playback?: { type?: 'hls' | 'dash', url?: string, }, status?: 'draft' | 'published', tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, translations?: record, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed', }, restAfter?: number, restBetweenSets?: number, sets?: List<{ description?: string, interval?: { duration?: number, weight?: number, }, reps?: List<{ description?: string, restAfter?: number, weight?: number, }>, }>, }>, userData?: { workouts?: { history?: List<{ date?: number, guid?: string, isPersonalBest?: bool, status?: 'incomplete' | 'complete', }>, personalBest?: { guid?: string, totalVolume?: number, }, }, }, visibility?: 'public' | 'private', }, }

GET /users/{userId}/strength-routines/library

Search the library of routines available to the user.

Response Body
{
  data: List<{
    circuit?: bool,
    createdByEchelon?: bool,
    dateCreated?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
-     modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, level?: { description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, movements?: List<string>, name?: string, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, - modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, }>, embedded: { aggregations?: { tags?: List<{ buckets?: List<{ count?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, text?: string, value?: string, }>, value?: string, }>, }, }, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /users/{userId}/strength-routines/library

Search the library of routines available to the user.

Response Body
{
  data: List<{
    circuit?: bool,
    createdByEchelon?: bool,
    dateCreated?: number,
    description?: string,
    duration?: number,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    language?: {
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, level?: { description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }, movements?: List<string>, name?: string, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, },

+ modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift' | 'climb', text?: string, translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup', value?: string, }>, }>, embedded: { aggregations?: { tags?: List<{ buckets?: List<{ count?: number, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, text?: string, value?: string, }>, value?: string, }>, }, }, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
Added endpoints

DELETE /content/tags/{value}

Remove a New Tag

Guard: admin

2 deleted endpoints

GET /secret

Hello World

Response Body
{
  data: string,
}

POST /subscriptions/twoYearTrialFix

Deleted endpoints
WORK IN PROGRESS