Nest Changelog

1.42.9 PRE

9/22/2023

1.42.10 PRE

9/25/2023

16 changed endpoints

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

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

POST /content/items

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

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

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

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

PATCH /content/items/{guid}

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

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

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',
      },
    },
    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 /content/schedule

Get list of scheduled content.

Response Body
{
  data: List<{
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      description?: 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,
        },
      }>,
      name?: string,
      studios?: List<{
        code?: string,
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        name?: string,
        streetAddress?: {
          city?: string,
          country?: {
            code?: string,
            name?: string,
          },
          postalCode?: string,
          region?: {
            code?: string,
            name?: string,
          },
          streetLine1?: string,
          streetLine2?: string,
        },
        updatedBy?: {
          id?: number,
        },
      }>,
    },

guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /content/schedule

Get list of scheduled content.

Response Body
{
  data: List<{
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      description?: 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,
        },
      }>,
      name?: string,
      studios?: List<{
        code?: string,
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        name?: string,
        streetAddress?: {
          city?: string,
          country?: {
            code?: string,
            name?: string,
          },
          postalCode?: string,
          region?: {
            code?: string,
            name?: string,
          },
          streetLine1?: string,
          streetLine2?: string,
        },
        updatedBy?: {
          id?: number,
        },
      }>,
    },
+   controlStation?: {
+     guid?: string,
+   },
    guid?: string,
    legacy?: {
      id?: number,
      type?: 'reflect' | 'connect',
    },
    playback?: List<{
      type?: 'hls' | 'dash',
      url?: string,
    }>,
    type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total?: {
      pages?: number,
      rows?: number,
    },
  },
}

POST /content/schedule

Create a new schedule entry for a piece of content

Request Body
{
  available?: {
    end?: number,
    live?: number,
    start?: number,
  },
  content?: {
    guid?: string,
  },

legacy: { id?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }
Response Body
{
  data: {
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      guid?: string,
    },

guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }, }

POST /content/schedule

Create a new schedule entry for a piece of content

Request Body
{
  available?: {
    end?: number,
    live?: number,
    start?: number,
  },
  content?: {
    guid?: string,
  },
+ controlStation: {
+   guid?: string,
+ },
  legacy: {
    id?: number,
    type?: 'reflect' | 'connect',
  },
  type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}
Response Body
{
  data: {
    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',
  },
}

GET /content/schedule/{scheduleId}

Get a piece of scheduled content by its guid (not its content guid!)

Response Body
{
  data: {
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      guid?: string,
    },

guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }, }

GET /content/schedule/{scheduleId}

Get a piece of scheduled content by its guid (not its content guid!)

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

PATCH /content/schedule/{guid}

Edit a schedule entry for a piece of content

Request Body
{
  available: {
    end?: number,
    live?: number,
    start?: number,
  },

legacy: { id?: number, type?: 'reflect' | 'connect', }, }
Response Body
{
  data: {
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      guid?: string,
    },

guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }, }

PATCH /content/schedule/{guid}

Edit a schedule entry for a piece of content

Request Body
{
  available: {
    end?: number,
    live?: number,
    start?: number,
  },
+ controlStation: {
+   guid?: string,
+ },
  legacy: {
    id?: number,
    type?: 'reflect' | 'connect',
  },
}
Response Body
{
  data: {
    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',
  },
}

GET /collections/items/{guid}/schedule

Get schedules inside of a Collection

Response Body
{
  data: List<{
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      description?: 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,
        },
      }>,
      name?: string,
      studios?: List<{
        code?: string,
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        name?: string,
        streetAddress?: {
          city?: string,
          country?: {
            code?: string,
            name?: string,
          },
          postalCode?: string,
          region?: {
            code?: string,
            name?: string,
          },
          streetLine1?: string,
          streetLine2?: string,
        },
        updatedBy?: {
          id?: number,
        },
      }>,
    },

guid?: string, legacy?: { id?: number, type?: 'reflect' | 'connect', }, playback?: List<{ type?: 'hls' | 'dash', url?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /collections/items/{guid}/schedule

Get schedules inside of a Collection

Response Body
{
  data: List<{
    available?: {
      end?: number,
      live?: number,
      start?: number,
    },
    content?: {
      description?: 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,
        },
      }>,
      name?: string,
      studios?: List<{
        code?: string,
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        name?: string,
        streetAddress?: {
          city?: string,
          country?: {
            code?: string,
            name?: string,
          },
          postalCode?: string,
          region?: {
            code?: string,
            name?: string,
          },
          streetLine1?: string,
          streetLine2?: string,
        },
        updatedBy?: {
          id?: number,
        },
      }>,
    },
+   controlStation?: {
+     guid?: string,
+   },
    guid?: string,
    legacy?: {
      id?: number,
      type?: 'reflect' | 'connect',
    },
    playback?: List<{
      type?: 'hls' | 'dash',
      url?: string,
    }>,
    type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
  }>,
  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,
      },

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

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

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

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

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

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

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

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

GET /control-stations

Get all control stations

Guard: producer

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

POST /control-stations

Create a new control station

Guard: producer

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,
    },
  },
}
WORK IN PROGRESS