Nest Changelog

1.1.9

2/22/2022

1.1.10

3/14/2022

10 changed endpoints

POST /users/{userId}/family

Guard: family

POST /users/{userId}/family

Guard: familyOrAdmin

GET /songs/{id}/playlists

Get all playlists that contain this song

Response Body
{
  data: List<{
    content?: {
-     countries?: List<{

code?: string, }>, - createdBy?: {

id?: number, }, - dateCreated?: number, - dateUpdated?: number, - description?: string, - guid?: string, - image?: {

default: string, large: string, medium: string, small: string, url?: string, }, - instructors?: List<{

id?: number, name?: string, }>, - keywords?: List<string>, - name?: string, - playlist?: {

id?: number, name?: string, }, - schedule?: List<{

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

type?: 'live' | 'vod' | 'encore', }>, - status?: 'draft' | 'published', - studios?: List<{

id?: number, name?: string, }>, - tags?: List<{

image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, - updatedBy?: {

id?: number, }, - videoLength?: {

id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number,

name?: string, }>, }

GET /songs/{id}/playlists

Get all playlists that contain this song

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

+ countries: List<{ code?: string, }>,

+ createdBy: { id?: number, },

+ dateCreated: number, + dateUpdated: number, + description: string, + guid: string, + image: { default: string, large: string, medium: string, small: string, url?: string, },

+ instructors: List<{ id?: number, name?: string, }>,

+ keywords: List<string>, + name: string, + playlist: { id?: number, name?: string, },

+ schedule: List<{ available?: { end?: number, live?: number, start?: number, }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, type?: 'live' | 'vod' | 'encore', }>,

+ status: 'draft' | 'published', + studios: List<{ id?: number, name?: string, }>,

+ tags: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>,

+ updatedBy: { id?: number, },

+ videoLength: { id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, + isFlagged?: bool, name?: string, }>, }

GET /playlists

Get a list of playlists

Response Body
{
  data: List<{
    content?: {
-     countries?: List<{

code?: string, }>, - createdBy?: {

id?: number, }, - dateCreated?: number, - dateUpdated?: number, - description?: string, - guid?: string, - image?: {

default: string, large: string, medium: string, small: string, url?: string, }, - instructors?: List<{

id?: number, name?: string, }>, - keywords?: List<string>, - name?: string, - playlist?: {

id?: number, name?: string, }, - schedule?: List<{

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

type?: 'live' | 'vod' | 'encore', }>, - status?: 'draft' | 'published', - studios?: List<{

id?: number, name?: string, }>, - tags?: List<{

image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, - updatedBy?: {

id?: number, }, - videoLength?: {

id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number,

name?: string, }>, }

GET /playlists

Get a list of playlists

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

+ countries: List<{ code?: string, }>,

+ createdBy: { id?: number, },

+ dateCreated: number, + dateUpdated: number, + description: string, + guid: string, + image: { default: string, large: string, medium: string, small: string, url?: string, },

+ instructors: List<{ id?: number, name?: string, }>,

+ keywords: List<string>, + name: string, + playlist: { id?: number, name?: string, },

+ schedule: List<{ available?: { end?: number, live?: number, start?: number, }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, type?: 'live' | 'vod' | 'encore', }>,

+ status: 'draft' | 'published', + studios: List<{ id?: number, name?: string, }>,

+ tags: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>,

+ updatedBy: { id?: number, },

+ videoLength: { id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, + isFlagged?: bool, name?: string, }>, }

POST /playlists

Create a new playlist

Response Body
{
  data: {
    content?: {
-     countries?: List<{

code?: string, }>, - createdBy?: {

id?: number, }, - dateCreated?: number, - dateUpdated?: number, - description?: string, - guid?: string, - image?: {

default: string, large: string, medium: string, small: string, url?: string, }, - instructors?: List<{

id?: number, name?: string, }>, - keywords?: List<string>, - name?: string, - playlist?: {

id?: number, name?: string, }, - schedule?: List<{

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

type?: 'live' | 'vod' | 'encore', }>, - status?: 'draft' | 'published', - studios?: List<{

id?: number, name?: string, }>, - tags?: List<{

image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, - updatedBy?: {

id?: number, }, - videoLength?: {

id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number,

name?: string, }, }

POST /playlists

Create a new playlist

Response Body
{
  data: {
    content?: {

+ countries: List<{ code?: string, }>,

+ createdBy: { id?: number, },

+ dateCreated: number, + dateUpdated: number, + description: string, + guid: string, + image: { default: string, large: string, medium: string, small: string, url?: string, },

+ instructors: List<{ id?: number, name?: string, }>,

+ keywords: List<string>, + name: string, + playlist: { id?: number, name?: string, },

+ schedule: List<{ available?: { end?: number, live?: number, start?: number, }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, type?: 'live' | 'vod' | 'encore', }>,

+ status: 'draft' | 'published', + studios: List<{ id?: number, name?: string, }>,

+ tags: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>,

+ updatedBy: { id?: number, },

+ videoLength: { id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, + isFlagged?: bool, name?: string, }, }

PATCH /playlists/{id}

Update an existing playlist

Request Body
{
- name?: string,

}
Response Body
{
  data: {
    content?: {
-     countries?: List<{

code?: string, }>, - createdBy?: {

id?: number, }, - dateCreated?: number, - dateUpdated?: number, - description?: string, - guid?: string, - image?: {

default: string, large: string, medium: string, small: string, url?: string, }, - instructors?: List<{

id?: number, name?: string, }>, - keywords?: List<string>, - name?: string, - playlist?: {

id?: number, name?: string, }, - schedule?: List<{

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

type?: 'live' | 'vod' | 'encore', }>, - status?: 'draft' | 'published', - studios?: List<{

id?: number, name?: string, }>, - tags?: List<{

image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, - updatedBy?: {

id?: number, }, - videoLength?: {

id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number,

name?: string, }, }

PATCH /playlists/{id}

Update an existing playlist

Request Body
{

+ content: { + countries: List<{ + code?: string, + }>, + createdBy: { + id?: number, + }, + dateCreated: number, + dateUpdated: number, + description: string, + guid: string, + image: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + instructors: List<{ + id?: number, + name?: string, + }>, + keywords: List<string>, + name: string, + playlist: { + id?: number, + name?: string, + }, + schedule: List<{ + available?: { + end?: number, + live?: number, + start?: number, + }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, + type?: 'live' | 'vod' | 'encore', + }>, + status: 'draft' | 'published', + studios: List<{ + id?: number, + name?: string, + }>, + tags: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, + updatedBy: { + id?: number, + }, + videoLength: { + id?: number, + name?: string, + }, + }, + createdBy: { + id?: number, + }, + dateCreated: number, + dateUpdated: number, + id: number, + isFlagged: bool, + name: string, }
Response Body
{
  data: {
    content?: {

+ countries: List<{ code?: string, }>,

+ createdBy: { id?: number, },

+ dateCreated: number, + dateUpdated: number, + description: string, + guid: string, + image: { default: string, large: string, medium: string, small: string, url?: string, },

+ instructors: List<{ id?: number, name?: string, }>,

+ keywords: List<string>, + name: string, + playlist: { id?: number, name?: string, },

+ schedule: List<{ available?: { end?: number, live?: number, start?: number, }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, type?: 'live' | 'vod' | 'encore', }>,

+ status: 'draft' | 'published', + studios: List<{ id?: number, name?: string, }>,

+ tags: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>,

+ updatedBy: { id?: number, },

+ videoLength: { id?: number, name?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, + isFlagged?: bool, name?: string, }, }

GET /content/items

Get list of content items

Response Body
{
  data: List<{
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },

type?: 'live' | 'vod' | 'encore', }>, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, }, }>, }

GET /content/items

Get list of content items

Response Body
{
  data: List<{
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
+     contentGuid?: string,
+     duration: number,
+     guid?: string,
+     legacy: {
+       hlsUrl?: string,
+       id?: number,
+       liveStreamId?: number,
+       type?: 'reflect' | 'connect',
+     },
      type?: 'live' | 'vod' | 'encore',
    }>,
    status?: 'draft' | 'published',
    studios?: List<{
      id?: number,
      name?: string,
    }>,
    tags?: List<{
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      text?: string,
      translations: record,
      type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
      value?: string,
    }>,
    updatedBy?: {
      id?: number,
    },
    videoLength?: {
      id?: number,
      name?: string,
    },
  }>,
}

GET /content/items/{guid}

Get a specific content item

Response Body
{
  data: List<{
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },

type?: 'live' | 'vod' | 'encore', }>, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, }, }>, }

GET /content/items/{guid}

Get a specific content item

Response Body
{
  data: List<{
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
+     contentGuid?: string,
+     duration: number,
+     guid?: string,
+     legacy: {
+       hlsUrl?: string,
+       id?: number,
+       liveStreamId?: number,
+       type?: 'reflect' | 'connect',
+     },
      type?: 'live' | 'vod' | 'encore',
    }>,
    status?: 'draft' | 'published',
    studios?: List<{
      id?: number,
      name?: string,
    }>,
    tags?: List<{
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      text?: string,
      translations: record,
      type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
      value?: string,
    }>,
    updatedBy?: {
      id?: number,
    },
    videoLength?: {
      id?: number,
      name?: string,
    },
  }>,
}

GET /content/recommendations

Get content recommended for this user.

Response Body
{
  data: List<{
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },

type?: 'live' | 'vod' | 'encore', }>, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, }>, tags?: List<{ image?: { default: string, large: string, medium: string, small: string, url?: string, }, text?: string, translations: record, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, updatedBy?: { id?: number, }, videoLength?: { id?: number, name?: string, }, }>, }

GET /content/recommendations

Get content recommended for this user.

Response Body
{
  data: List<{
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
+     contentGuid?: string,
+     duration: number,
+     guid?: string,
+     legacy: {
+       hlsUrl?: string,
+       id?: number,
+       liveStreamId?: number,
+       type?: 'reflect' | 'connect',
+     },
      type?: 'live' | 'vod' | 'encore',
    }>,
    status?: 'draft' | 'published',
    studios?: List<{
      id?: number,
      name?: string,
    }>,
    tags?: List<{
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      text?: string,
      translations: record,
      type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
      value?: string,
    }>,
    updatedBy?: {
      id?: number,
    },
    videoLength?: {
      id?: number,
      name?: string,
    },
  }>,
}

GET /equipment/models

Get a list of all available Equipment

Response Body
{
  data: List<{
    category: {
      guid?: string,
      name?: string,
    },
    dateAvailable?: number,

id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, - pdf?: string,

plans?: List<{ id?: number, }>, - video?: string,

}>, }

GET /equipment/models

Get a list of all available Equipment

Response Body
{
  data: List<{
    category: {
      guid?: string,
      name?: string,
    },
    dateAvailable?: number,
+   dateCreated?: number,
+   dateUpdated?: number,
    id?: number,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    name?: string,

+ pdf?: { + url?: string, + }, plans?: List<{ id?: number, }>,

+ video?: { + url?: string, + }, }>, }

GET /equipment/models/{id}

Get a specific model of equipment

Response Body
{
  data: {
    category: {
      guid?: string,
      name?: string,
    },
    dateAvailable?: number,

id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, - pdf?: string,

plans?: List<{ id?: number, }>, - video?: string,

}, }

GET /equipment/models/{id}

Get a specific model of equipment

Response Body
{
  data: {
    category: {
      guid?: string,
      name?: string,
    },
    dateAvailable?: number,
+   dateCreated?: number,
+   dateUpdated?: number,
    id?: number,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    name?: string,

+ pdf?: { + url?: string, + }, plans?: List<{ id?: number, }>,

+ video?: { + url?: string, + }, }, }
15 added endpoints
Added endpoints

GET /playlists/{playlist}

Get a single playlist by ID

Guard: loggedIn

Response Body
{
  data: {
    content?: {
      countries: List<{
        code?: string,
      }>,
      createdBy: {
        id?: number,
      },
      dateCreated: number,
      dateUpdated: number,
      description: string,
      guid: string,
      image: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      instructors: List<{
        id?: number,
        name?: string,
      }>,
      keywords: List<string>,
      name: string,
      playlist: {
        id?: number,
        name?: string,
      },
      schedule: List<{
        available?: {
          end?: number,
          live?: number,
          start?: number,
        },
        contentGuid?: string,
        duration: number,
        guid?: string,
        legacy: {
          hlsUrl?: string,
          id?: number,
          liveStreamId?: number,
          type?: 'reflect' | 'connect',
        },
        type?: 'live' | 'vod' | 'encore',
      }>,
      status: 'draft' | 'published',
      studios: List<{
        id?: number,
        name?: string,
      }>,
      tags: List<{
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        text?: string,
        translations: record,
        type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
        value?: string,
      }>,
      updatedBy: {
        id?: number,
      },
      videoLength: {
        id?: number,
        name?: string,
      },
    },
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    isFlagged?: bool,
    name?: string,
    tracks?: List<{
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      flag?: string,
      playlist?: {
        id?: number,
      },
      song?: {
        id?: number,
      },
      trackOrder?: number,
    }>,
  },
}

GET /playlists/{playlist}/tracks/{song}

Get song from a playlist

Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    flag?: string,
    playlist?: {
      id?: number,
    },
    song?: {
      id?: number,
    },
    trackOrder?: number,
  },
}

DELETE /playlists/{playlist}/tracks/{song}

Remove song from a playlist

PUT /playlists/{playlist}/tracks/{song}

Request Body
{
  flag?: string,
  trackOrder?: number,
}
Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    flag?: string,
    playlist?: {
      id?: number,
    },
    song?: {
      id?: number,
    },
    trackOrder?: number,
  },
}

PATCH /playlists/{playlist}/tracks/{song}

Request Body
{
  flag: string,
  trackOrder: number,
}
Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    flag?: string,
    playlist?: {
      id?: number,
    },
    song?: {
      id?: number,
    },
    trackOrder?: number,
  },
}

POST /content/items

Create a content item

Guard: producer

Request Body
{
  countries?: List<string>,
  description?: string,
  image: string,
  instructors?: List<{
    id?: number,
    precedence?: number,
  }>,
  keywords?: List<string>,
  name?: string,
  playlist?: {
    id?: number,
  },
  status?: 'draft' | 'published',
  studios?: List<{
    id?: number,
    precedence?: number,
  }>,
  tags?: List<{
    value?: string,
  }>,
  videoLength?: {
    id?: number,
  },
}
Response Body
{
  data: {
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      contentGuid?: string,
      duration: number,
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore',
    }>,
    status?: 'draft' | 'published',
    studios?: List<{
      id?: number,
      name?: string,
    }>,
    tags?: List<{
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      text?: string,
      translations: record,
      type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
      value?: string,
    }>,
    updatedBy?: {
      id?: number,
    },
    videoLength?: {
      id?: number,
      name?: string,
    },
  },
}

PATCH /content/items/{guid}

Update a content item

Guard: producer

Request Body
{
  countries: List<string>,
  description: string,
  image: string,
  instructors: List<{
    id?: number,
    precedence?: number,
  }>,
  keywords: List<string>,
  name: string,
  playlist: {
    id?: number,
  },
  status: 'draft' | 'published',
  studios: List<{
    id?: number,
    precedence?: number,
  }>,
  tags: List<{
    value?: string,
  }>,
  videoLength: {
    id?: number,
  },
}
Response Body
{
  data: {
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    guid?: string,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    instructors?: List<{
      id?: number,
      name?: string,
    }>,
    keywords?: List<string>,
    name?: string,
    playlist?: {
      id?: number,
      name?: string,
    },
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      contentGuid?: string,
      duration: number,
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore',
    }>,
    status?: 'draft' | 'published',
    studios?: List<{
      id?: number,
      name?: string,
    }>,
    tags?: List<{
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      text?: string,
      translations: record,
      type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
      value?: string,
    }>,
    updatedBy?: {
      id?: number,
    },
    videoLength?: {
      id?: number,
      name?: string,
    },
  },
}

DELETE /content/items/{guid}

Delete a specific content item

Guard: admin

POST /equipment/models

Create a new equipment model

Guard: admin

Request Body
{
  dateAvailable?: number,
  image?: {
    data?: string,
    filename?: string,
  },
  name?: string,
  pdf: {
    data?: string,
    filename?: string,
  },
  plans?: List<{
    id?: number,
  }>,
  video?: {
    url?: string,
  },
}
Response Body
{
  data: {
    category: {
      guid?: string,
      name?: string,
    },
    dateAvailable?: number,
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    name?: string,
    pdf?: {
      url?: string,
    },
    plans?: List<{
      id?: number,
    }>,
    video?: {
      url?: string,
    },
  },
}

PATCH /equipment/models/{id}

Update an existing equipment model.

Guard: admin

Request Body
{
  dateAvailable: number,
  image: {
    data?: string,
    filename?: string,
  },
  name: string,
  pdf: {
    data?: string,
    filename?: string,
  },
  plans: List<{
    id?: number,
  }>,
  video: {
    url?: string,
  },
}
Response Body
{
  data: {
    category: {
      guid?: string,
      name?: string,
    },
    dateAvailable?: number,
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    image?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    name?: string,
    pdf?: {
      url?: string,
    },
    plans?: List<{
      id?: number,
    }>,
    video?: {
      url?: string,
    },
  },
}

POST /campaigns

Create a new campaign

Guard: admin

Request Body
{
  dateExpires?: number,
  name?: string,
  partner?: {
    id?: number,
  },
  utmCampaign?: string,
  utmSource?: string,
}
Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateExpires?: number,
    guid?: string,
    name?: string,
    partner?: {
      id?: number,
    },
    utmCampaign?: string,
    utmSource?: string,
  },
}

GET /campaigns

Get all campaigns

Response Body
{
  data: List<{
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateExpires?: number,
    guid?: string,
    name?: string,
    partner?: {
      id?: number,
    },
    utmCampaign?: string,
    utmSource?: string,
  }>,
}

GET /campaigns/{guid}

Get a specific campaign

Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateExpires?: number,
    guid?: string,
    name?: string,
    partner?: {
      id?: number,
    },
    utmCampaign?: string,
    utmSource?: string,
  },
}

PATCH /campaigns/{guid}

Edit a campaign (overlay)

Guard: admin

Request Body
{
  dateExpires: number,
  name: string,
  partner: {
    id?: number,
  },
  utmCampaign: string,
  utmSource: string,
}
Response Body
{
  data: {
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateExpires?: number,
    guid?: string,
    name?: string,
    partner?: {
      id?: number,
    },
    utmCampaign?: string,
    utmSource?: string,
  },
}

DELETE /campaigns/{guid}

Delete a campaign

Guard: admin

3 deleted endpoints

GET /playlists/{id}

Get a single playlist by ID

Guard: loggedIn

Response Body
{
  data: {
    content?: {
      countries?: List<{
        code?: string,
      }>,
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      description?: string,
      guid?: string,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      instructors?: List<{
        id?: number,
        name?: string,
      }>,
      keywords?: List<string>,
      name?: string,
      playlist?: {
        id?: number,
        name?: string,
      },
      schedule?: List<{
        available?: {
          end?: number,
          live?: number,
          start?: number,
        },
        type?: 'live' | 'vod' | 'encore',
      }>,
      status?: 'draft' | 'published',
      studios?: List<{
        id?: number,
        name?: string,
      }>,
      tags?: List<{
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        text?: string,
        translations: record,
        type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
        value?: string,
      }>,
      updatedBy?: {
        id?: number,
      },
      videoLength?: {
        id?: number,
        name?: string,
      },
    },
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    name?: string,
    tracks?: List<{
      dateCreated?: number,
      song?: {
        album?: {
          id?: number,
          name?: string,
        },
        artist?: List<{
          id?: number,
          name?: string,
        }>,
        coverArt?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        duration?: {
          seconds: number,
          text: string,
        },
        genres?: List<{
          id?: number,
          name?: string,
        }>,
        id?: number,
        isExplicit?: bool,
        isrcCode?: string,
        label?: {
          id?: number,
          name?: string,
        },
        labelOwner?: {
          id?: number,
          name?: string,
        },
        licenseDetails?: {
          label: record,
          publisher: record,
        },
        licensedIn?: List<string>,
        name?: string,
        yearPublished?: number,
      },
      trackOrder?: number,
    }>,
  },
}

DELETE /playlists/{playlistId}/tracks/{songId}

Remove song from a playlist

Guard: instructor

PUT /playlists/{playlistId}/tracks/{songId}

Guard: instructor

Request Body
{
  trackOrder: number,
}
Response Body
{
  data: {
    dateCreated?: number,
    song?: {
      album?: {
        id?: number,
        name?: string,
      },
      artist?: List<{
        id?: number,
        name?: string,
      }>,
      coverArt?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      duration?: {
        seconds: number,
        text: string,
      },
      genres?: List<{
        id?: number,
        name?: string,
      }>,
      id?: number,
      isExplicit?: bool,
      isrcCode?: string,
      label?: {
        id?: number,
        name?: string,
      },
      labelOwner?: {
        id?: number,
        name?: string,
      },
      licenseDetails?: {
        label: record,
        publisher: record,
      },
      licensedIn?: List<string>,
      name?: string,
      yearPublished?: number,
    },
    trackOrder?: number,
  },
}
Deleted endpoints
WORK IN PROGRESS