Nest Changelog

1.43.13 PRE

10/9/2023

1.43.14

10/9/2023

18 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,

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,

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',
      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/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,

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

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

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/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,

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,

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',
      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/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,

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,

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',
      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 /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<{

images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all' | 'ellipse' | 'lift',

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

GET /content/items/{guid}

Get a specific content item.

Response Body
{
  data: {
    catalog?: {
      code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    duration?: number,
    featuredRow?: string,
    feedFM?: {
      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/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,

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',
    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,
    },
  },
}

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,

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

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',
  },
}

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,

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',
  },
}

GET /control-stations

Get all control stations

Response Body
{
  data: List<{
    active?: bool,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    guid?: string,
    mux?: {
      latencyMode?: 'standard' | 'reduced' | 'low',
      playbackId?: string,
      policy?: 'public' | 'signed',
      reconnectWindow?: number,
      streamId?: string,
      streamKey?: string,
    },
    name?: string,

studio?: { id?: number, }, updatedBy?: { id?: number, }, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /control-stations

Get all control stations

Response Body
{
  data: List<{
    active?: bool,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    guid?: string,
    mux?: {
      latencyMode?: 'standard' | 'reduced' | 'low',
      playbackId?: string,
      policy?: 'public' | 'signed',
      reconnectWindow?: number,
      streamId?: string,
      streamKey?: string,
    },
    name?: string,
+   rtmpUrl?: {
+     secure?: string,
+     standard?: string,
+   },
    studio?: {
      id?: number,
    },
    updatedBy?: {
      id?: number,
    },
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total?: {
      pages?: number,
      rows?: number,
    },
  },
}

POST /control-stations

Create a new control station

Request Body
{
  active?: bool,
  mux?: {
    latencyMode?: 'standard' | 'reduced' | 'low',
    policy?: 'public' | 'signed',
    reconnectWindow?: number,
  },
  name?: string,

studio?: { id?: number, }, }
Response Body
{
  data: {
    active?: bool,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    guid?: string,
    mux?: {
      latencyMode?: 'standard' | 'reduced' | 'low',
      playbackId?: string,
      policy?: 'public' | 'signed',
      reconnectWindow?: number,
      streamId?: string,
      streamKey?: string,
    },
    name?: string,

studio?: { id?: number, }, updatedBy?: { id?: number, }, }, }

POST /control-stations

Create a new control station

Request Body
{
  active?: bool,
  mux?: {
    latencyMode?: 'standard' | 'reduced' | 'low',
    policy?: 'public' | 'signed',
    reconnectWindow?: number,
  },
  name?: string,
+ rtmpUrl?: {
+   secure?: string,
+   standard?: string,
+ },
  studio?: {
    id?: number,
  },
}
Response Body
{
  data: {
    active?: bool,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    guid?: string,
    mux?: {
      latencyMode?: 'standard' | 'reduced' | 'low',
      playbackId?: string,
      policy?: 'public' | 'signed',
      reconnectWindow?: number,
      streamId?: string,
      streamKey?: string,
    },
    name?: string,
+   rtmpUrl?: {
+     secure?: string,
+     standard?: string,
+   },
    studio?: {
      id?: number,
    },
    updatedBy?: {
      id?: 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,

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',
        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,
    },
  },
}

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,

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,

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

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,

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',
  },
}

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,

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,

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',
      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/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,

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,

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,

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',
      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,
    },
  },
}
3 added endpoints
Added endpoints

POST /webhooks/feedfm

Internal use only. Used by FeedFM to manage radio stations.

Request Body
{
  creator: string,
  event?: 'station_requested' | 'station_published_to_production' | 'station_published_to_development' | 'station_unpublished',
  explicit: bool,
  meta?: string,
  name: string,
  testing: bool,
  uuid?: string,
}

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

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

Guard: loggedIn, service

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',
      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 /legacy/{id}/convert

Convert a legacy ID into a contentGuid and scheduleGuid

Guard: loggedIn

Response Body
{
  data: {
    contentGuid?: string,
    scheduleGuid?: string,
  },
}

POST /webhooks/feedfm/{contentGuid}

Request Body
{
  creator: string,
  event?: 'station_requested' | 'station_published_to_production' | 'station_published_to_development' | 'station_unpublished',
  explicit: bool,
  name: string,
  testing: bool,
  uuid?: string,
}
Deleted endpoints
WORK IN PROGRESS