Nest Changelog

1.1.51

6/13/2022

1.1.52

6/27/2022

42 changed endpoints

GET /users

Get all users

Response Body
{
- data: {

billingAddress?: { city?: string, country?: { code?: string, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, birthdate: string, createdBy?: { id?: number, }, dateActivated?: number, dateCreated?: number, dateUpdated?: number,

email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, },

}, }

GET /users

Get all users

Response Body
{

+ data: List<{ billingAddress?: { city?: string, country?: { code?: string, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, birthdate: string, createdBy?: { id?: number, }, dateActivated?: number, dateCreated?: number, dateUpdated?: number, + dealer?: { + id?: number, + }, email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

POST /users

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,

email?: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, password?: string, phoneNumber: string, purchaseHistory: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, }, serialNumber?: string, }>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,

email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, }, }

POST /users

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,
+ dealer: {
+   id?: number,
+ },
  email?: string,
  firstName: string,
  forcePasswordChange: bool,
  gender: {
    value?: 'm' | 'f' | 'o',
  },
  height: {
    units?: 'in' | 'cm',
    value?: number,
  },
  image: {
    colors?: {
      background?: {
        hex?: string,
      },
      foreground?: {
        hex?: string,
      },
    },
    default: string,
    initials?: string,
    isPlaceholder?: bool,
    large: string,
    medium: string,
    small: string,
    url?: string,
  },
  lastName: string,
  mongoId: string,
  nickname: string,
  parent: {
    id?: number,
    mongoId?: string,
  },
  password?: string,
  phoneNumber: string,
  purchaseHistory: List<{
    datePurchased?: number,
    name?: string,
    retailer?: {
      id?: number,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,
  tagline: string,
  weight: {
    units?: 'lb' | 'kg',
    value?: number,
  },
}
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,
+   dealer?: {
+     id?: number,
+   },
    email?: string,
    firstName?: string,
    forcePasswordChange?: bool,
    gender?: {
      text: string,
      value?: 'm' | 'f' | 'o',
    },
    height?: {
      text?: string,
      units?: 'in' | 'cm',
      value?: number,
    },
    id?: number,
    image?: {
      colors?: {
        background?: {
          hex?: string,
        },
        foreground?: {
          hex?: string,
        },
      },
      default: string,
      initials?: string,
      isPlaceholder?: bool,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    lastName?: string,
    mongoId?: string,
    nickname?: string,
    parent?: {
      id?: number,
      mongoId?: string,
    },
    phoneNumber?: string,
    purchaseHistory?: List<{
      datePurchased?: number,
      name?: string,
      retailer?: {
        id?: number,
        name?: string,
      },
      serialNumber?: string,
    }>,
    roles?: List<string>,
    stripe?: {
      customerId?: string,
    },
    tagline?: string,
    updatedBy?: {
      id?: number,
    },
    weight?: {
      text?: string,
      units?: 'lb' | 'kg',
      value?: number,
    },
  },
}

GET /users/{userId}

Get a specific user by id

Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,

email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, }, }

GET /users/{userId}

Get a specific user by id

Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,
+   dealer?: {
+     id?: number,
+   },
    email?: string,
    firstName?: string,
    forcePasswordChange?: bool,
    gender?: {
      text: string,
      value?: 'm' | 'f' | 'o',
    },
    height?: {
      text?: string,
      units?: 'in' | 'cm',
      value?: number,
    },
    id?: number,
    image?: {
      colors?: {
        background?: {
          hex?: string,
        },
        foreground?: {
          hex?: string,
        },
      },
      default: string,
      initials?: string,
      isPlaceholder?: bool,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    lastName?: string,
    mongoId?: string,
    nickname?: string,
    parent?: {
      id?: number,
      mongoId?: string,
    },
    phoneNumber?: string,
    purchaseHistory?: List<{
      datePurchased?: number,
      name?: string,
      retailer?: {
        id?: number,
        name?: string,
      },
      serialNumber?: string,
    }>,
    roles?: List<string>,
    stripe?: {
      customerId?: string,
    },
    tagline?: string,
    updatedBy?: {
      id?: number,
    },
    weight?: {
      text?: string,
      units?: 'lb' | 'kg',
      value?: number,
    },
  },
}

PATCH /users/{userId}

Edit this user

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,

email: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, phoneNumber: string, purchaseHistory: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, }, serialNumber?: string, }>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,

email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, }, }

PATCH /users/{userId}

Edit this user

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,
+ dealer: {
+   id?: number,
+ },
  email: string,
  firstName: string,
  forcePasswordChange: bool,
  gender: {
    value?: 'm' | 'f' | 'o',
  },
  height: {
    units?: 'in' | 'cm',
    value?: number,
  },
  image: {
    colors?: {
      background?: {
        hex?: string,
      },
      foreground?: {
        hex?: string,
      },
    },
    default: string,
    initials?: string,
    isPlaceholder?: bool,
    large: string,
    medium: string,
    small: string,
    url?: string,
  },
  lastName: string,
  mongoId: string,
  nickname: string,
  parent: {
    id?: number,
    mongoId?: string,
  },
  phoneNumber: string,
  purchaseHistory: List<{
    datePurchased?: number,
    name?: string,
    retailer?: {
      id?: number,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,
  tagline: string,
  weight: {
    units?: 'lb' | 'kg',
    value?: number,
  },
}
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,
+   dealer?: {
+     id?: number,
+   },
    email?: string,
    firstName?: string,
    forcePasswordChange?: bool,
    gender?: {
      text: string,
      value?: 'm' | 'f' | 'o',
    },
    height?: {
      text?: string,
      units?: 'in' | 'cm',
      value?: number,
    },
    id?: number,
    image?: {
      colors?: {
        background?: {
          hex?: string,
        },
        foreground?: {
          hex?: string,
        },
      },
      default: string,
      initials?: string,
      isPlaceholder?: bool,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    lastName?: string,
    mongoId?: string,
    nickname?: string,
    parent?: {
      id?: number,
      mongoId?: string,
    },
    phoneNumber?: string,
    purchaseHistory?: List<{
      datePurchased?: number,
      name?: string,
      retailer?: {
        id?: number,
        name?: string,
      },
      serialNumber?: string,
    }>,
    roles?: List<string>,
    stripe?: {
      customerId?: string,
    },
    tagline?: string,
    updatedBy?: {
      id?: number,
    },
    weight?: {
      text?: string,
      units?: 'lb' | 'kg',
      value?: number,
    },
  },
}

GET /users/{userId}/family

Get child accounts of this user

Response Body
{
- data: {

billingAddress?: { city?: string, country?: { code?: string, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, birthdate: string, createdBy?: { id?: number, }, dateActivated?: number, dateCreated?: number, dateUpdated?: number,

email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, },

}, }

GET /users/{userId}/family

Get child accounts of this user

Response Body
{

+ data: List<{ billingAddress?: { city?: string, country?: { code?: string, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, birthdate: string, createdBy?: { id?: number, }, dateActivated?: number, dateCreated?: number, dateUpdated?: number, + dealer?: { + id?: number, + }, email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

POST /users/{userId}/family

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,

email?: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, password?: string, phoneNumber: string, purchaseHistory: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, }, serialNumber?: string, }>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,

email?: string, firstName?: string, forcePasswordChange?: bool, gender?: { text: string, value?: 'm' | 'f' | 'o', }, height?: { text?: string, units?: 'in' | 'cm', value?: number, }, id?: number, image?: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName?: string, mongoId?: string, nickname?: string, parent?: { id?: number, mongoId?: string, }, phoneNumber?: string, purchaseHistory?: List<{ datePurchased?: number, name?: string, retailer?: { id?: number, name?: string, }, serialNumber?: string, }>, roles?: List<string>, stripe?: { customerId?: string, }, tagline?: string, updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, }, embedded: { jwt?: string, }, }

POST /users/{userId}/family

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,
+ dealer: {
+   id?: number,
+ },
  email?: string,
  firstName: string,
  forcePasswordChange: bool,
  gender: {
    value?: 'm' | 'f' | 'o',
  },
  height: {
    units?: 'in' | 'cm',
    value?: number,
  },
  image: {
    colors?: {
      background?: {
        hex?: string,
      },
      foreground?: {
        hex?: string,
      },
    },
    default: string,
    initials?: string,
    isPlaceholder?: bool,
    large: string,
    medium: string,
    small: string,
    url?: string,
  },
  lastName: string,
  mongoId: string,
  nickname: string,
  parent: {
    id?: number,
    mongoId?: string,
  },
  password?: string,
  phoneNumber: string,
  purchaseHistory: List<{
    datePurchased?: number,
    name?: string,
    retailer?: {
      id?: number,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,
  tagline: string,
  weight: {
    units?: 'lb' | 'kg',
    value?: number,
  },
}
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        dateCreated?: number,
        dateUpdated?: number,
        id?: number,
        mediaNet?: {
          code?: string,
          territoryId?: number,
        },
        name?: string,
        numberFormat?: {
          decimalSeparator?: '.' | ',' | ' ',
          thousandsSeparator?: '.' | ',' | ' ',
        },
        stripe?: {
          id?: number,
        },
      },
      postalCode?: string,
      region?: {
        code?: string,
        name?: string,
      },
      streetLine1?: string,
      streetLine2?: string,
    },
    birthdate: string,
    createdBy?: {
      id?: number,
    },
    dateActivated?: number,
    dateCreated?: number,
    dateUpdated?: number,
+   dealer?: {
+     id?: number,
+   },
    email?: string,
    firstName?: string,
    forcePasswordChange?: bool,
    gender?: {
      text: string,
      value?: 'm' | 'f' | 'o',
    },
    height?: {
      text?: string,
      units?: 'in' | 'cm',
      value?: number,
    },
    id?: number,
    image?: {
      colors?: {
        background?: {
          hex?: string,
        },
        foreground?: {
          hex?: string,
        },
      },
      default: string,
      initials?: string,
      isPlaceholder?: bool,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    lastName?: string,
    mongoId?: string,
    nickname?: string,
    parent?: {
      id?: number,
      mongoId?: string,
    },
    phoneNumber?: string,
    purchaseHistory?: List<{
      datePurchased?: number,
      name?: string,
      retailer?: {
        id?: number,
        name?: string,
      },
      serialNumber?: string,
    }>,
    roles?: List<string>,
    stripe?: {
      customerId?: string,
    },
    tagline?: string,
    updatedBy?: {
      id?: number,
    },
    weight?: {
      text?: string,
      units?: 'lb' | 'kg',
      value?: number,
    },
  },
  embedded: {
    jwt?: string,
  },
}

GET /plans

Get all Plans

Response Body
{
- data: {

basePrice?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProviders?: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country?: { code?: string, id?: number, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { units?: 'month', value?: number, }, frequencyDays?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, sku?: string, sortOrder?: number, sources?: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy?: { id?: number, },

}, }

GET /plans

Get all Plans

Response Body
{

+ data: List<{ basePrice?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProviders?: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country?: { code?: string, id?: number, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { units?: 'month', value?: number, }, frequencyDays?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, sku?: string, sortOrder?: number, sources?: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /preferences

Get a list of possible preferences

Response Body
{
- data: {

code?: string, defaultValue: record, description?: string, group?: { id?: number, }, id?: number, inputType?: 'string' | 'number' | 'boolean' | 'enum' | 'multiSelect', name?: string, sortOrder?: number, validation?: { isNullable: bool, maxChoices: number, maxLength: number, maxValue: number, minChoices: number, minLength: number, minValue: number, options: List<string>, precision: number, regexPattern: string, },

}, }

GET /preferences

Get a list of possible preferences

Response Body
{

+ data: List<{ code?: string, defaultValue: record, description?: string, group?: { id?: number, }, id?: number, inputType?: 'string' | 'number' | 'boolean' | 'enum' | 'multiSelect', name?: string, sortOrder?: number, validation?: { isNullable: bool, maxChoices: number, maxLength: number, maxValue: number, minChoices: number, minLength: number, minValue: number, options: List<string>, precision: number, regexPattern: string, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /subscriptions/{id}/history

Get a subscription history by subscription ID

Response Body
{
- data: {

action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted', dateOccurred?: number, guid?: string, initiatedBy?: { id?: number, }, payload: record, rawJson: record, reason?: string, source?: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com', subscription?: { id?: number, }, user?: { id?: number, },

}, }

GET /subscriptions/{id}/history

Get a subscription history by subscription ID

Response Body
{

+ data: List<{ action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted', dateOccurred?: number, guid?: string, initiatedBy?: { id?: number, }, payload: record, rawJson: record, reason?: string, source?: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com', subscription?: { id?: number, }, user?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /campaigns

Get all campaigns

Response Body
{
- data: {

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

}, }

GET /campaigns

Get all campaigns

Response Body
{

+ data: List<{ createdBy?: { id?: number, }, dateCreated?: number, dateExpires?: number, delayBillingDays?: number, guid?: string, name?: string, partner?: { id?: number, name?: string, }, utmCampaign?: string, utmSource?: string, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /campaigns/{guid}/offers

Get a list of offers available for this campaign.

Response Body
{
- data: {

createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published',

}, }

GET /campaigns/{guid}/offers

Get a list of offers available for this campaign.

Response Body
{

+ data: List<{ createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /instructors

Get a list of instructors

Response Body
{
- data: {

bio?: string, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, updatedBy?: { id?: number, }, user?: { id?: number, },

}, }

GET /instructors

Get a list of instructors

Response Body
{

+ data: List<{ bio?: string, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, updatedBy?: { id?: number, }, user?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /studios

Get a list of all studios

Response Body
{
- data: {

code?: string, createdBy?: { id?: number, }, 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, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, updatedBy?: { id?: number, },

}, }

GET /studios

Get a list of all studios

Response Body
{

+ data: List<{ code?: string, createdBy?: { id?: number, }, 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, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, updatedBy?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /features

Get a list of all available features

Response Body
{
- data: {

code?: string, defaultValue: record, description?: string, id?: number, inputType?: 'string' | 'number' | 'boolean' | 'enum' | 'multiSelect', name?: string, sortOrder?: number, usedBy?: List<'client' | 'server'>, validation?: { isNullable: bool, maxChoices: number, maxLength: number, maxValue: number, minChoices: number, minLength: number, minValue: number, options: List<string>, precision: number, regexPattern: string, },

}, }

GET /features

Get a list of all available features

Response Body
{

+ data: List<{ code?: string, defaultValue: record, description?: string, id?: number, inputType?: 'string' | 'number' | 'boolean' | 'enum' | 'multiSelect', name?: string, sortOrder?: number, usedBy?: List<'client' | 'server'>, validation?: { isNullable: bool, maxChoices: number, maxLength: number, maxValue: number, minChoices: number, minLength: number, minValue: number, options: List<string>, precision: number, regexPattern: string, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /songs

Get a list of songs

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

GET /songs

Get a list of songs

Response Body
{
  data: {

+ aggregations?: List<{ + buckets?: List<{ + }>, + key?: string, + }>, + count?: number, + pagination?: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, },

+ results?: List<{ + 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, }>,

}, }

GET /songs/genres

Get a list of available song genres.

Response Body
{
- data: string,

}

GET /songs/genres

Get a list of available song genres.

Response Body
{

+ data: List<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: {

countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, videoLength?: { id?: number, name?: string, },

}, }

GET /songs/{id}/playlists

Get all playlists that contain this song

Response Body
{

+ data: List<{ countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: 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: {

countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, videoLength?: { id?: number, name?: string, },

}, }

GET /playlists

Get a list of playlists

Response Body
{

+ data: List<{ countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, videoLength?: { id?: number, name?: string, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /playlists/{playlist}

Get a single playlist by ID

Response Body
{
  data: {
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    instructors?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    isFlagged?: bool,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        guid?: string,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    studios?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    tracks?: List<{

dateCreated?: number, flag?: string,

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: {
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    instructors?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    isFlagged?: bool,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        guid?: string,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    studios?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    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: {
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    instructors?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    isFlagged?: bool,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        guid?: string,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    studios?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    tracks?: List<{

dateCreated?: number, flag?: string,

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: {
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    id?: number,
    instructors?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    isFlagged?: bool,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        guid?: string,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    studios?: List<{
      id?: number,
      name?: string,
      precedence?: number,
    }>,
    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/{playlistId}/tracks

Get tracks from a given playlist

Response Body
{
- data: {

dateCreated?: number, flag?: string,

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,

}, }

GET /playlists/{playlistId}/tracks

Get tracks from a given playlist

Response Body
{

+ data: 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, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

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

Remove song from a playlist

Response Body
{
- data: {

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

}, }

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

Remove song from a playlist

Response Body
{

+ data: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { id?: number, }, trackOrder?: number, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

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

Response Body
{
- data: {

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

}, }

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

Response Body
{

+ data: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { id?: number, }, trackOrder?: number, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /firmware

Get a list of the available firmware updates

Response Body
{
- data: {

appVersions?: { android?: { maxVersion?: string, minVersion?: string, }, ios?: { maxVersion?: string, minVersion?: string, }, screen?: { maxVersion?: string, minVersion?: string, }, }, capabilities?: List<{ data: record, name?: string, }>, dateReleased?: number, dateRequired?: number, id?: number, name?: string, releaseNotes?: string, status?: 'draft' | 'published' | 'trash', supportedModels?: List<string>, type?: 'hardware' | 'tablet' | 'reflect', updateFile?: { url?: string, }, version?: string,

}, }

GET /firmware

Get a list of the available firmware updates

Response Body
{

+ data: List<{ appVersions?: { android?: { maxVersion?: string, minVersion?: string, }, ios?: { maxVersion?: string, minVersion?: string, }, screen?: { maxVersion?: string, minVersion?: string, }, }, capabilities?: List<{ data: record, name?: string, }>, dateReleased?: number, dateRequired?: number, id?: number, name?: string, releaseNotes?: string, status?: 'draft' | 'published' | 'trash', supportedModels?: List<string>, type?: 'hardware' | 'tablet' | 'reflect', updateFile?: { url?: string, }, version?: string, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /content/library

Search for content in the Library

Response Body
{
- data: {

aggregations?: List<{ buckets?: List<{ }>, key?: string, }>, count?: number, pagination?: {

skip?: number, take?: number,

}, results?: List<{ countries?: List<{ code?: string, }>, dateLive?: number, description?: string, guid?: string, image?: string, instructors?: List<string>, length?: number, name?: string, studios?: List<string>, tags?: List<{ text?: string, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>,

}, }

GET /content/library

Search for content in the Library

Response Body
{

+ data: List<{ aggregations?: List<{ buckets?: List<{ }>, key?: string, }>, count?: number, pagination?: { + page?: number, skip?: number, take?: number, + total: { + pages?: number, + rows?: number, + }, }, results?: List<{ countries?: List<{ code?: string, }>, dateLive?: number, description?: string, guid?: string, image?: string, instructors?: List<string>, length?: number, name?: string, studios?: List<string>, tags?: List<{ text?: string, type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /content/items

Get list of content items

Response Body
{
- data: {

countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sourceUrl?: string, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, 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, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',

}, }

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, duration?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sourceUrl?: string, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, 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, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /content/items/{guid}

Get a specific content item

Response Body
{
- data: {

countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sourceUrl?: string, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, 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, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',

}, }

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, duration?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sourceUrl?: string, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, 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, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /content/recommendations

Get content recommended for this user.

Response Body
{
- data: {

countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, duration?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sourceUrl?: string, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, 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, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',

}, }

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, duration?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, name?: string, playlist?: { id?: number, }, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, sourceUrl?: string, status?: 'draft' | 'published', studios?: List<{ id?: number, name?: string, precedence?: number, }>, 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, }, videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /content/tags

Get available content tags.

Response Body
{
- data: {

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,

}, }

GET /content/tags

Get available content tags.

Response Body
{

+ data: 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, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /content/schedule

Get list of scheduled content.

Response Body
{
- data: {

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

}, }

GET /content/schedule

Get list of scheduled content.

Response Body
{

+ data: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

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: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, 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: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /redemption-codes

Get a list of redemption codes

Response Body
{
- data: {

batchGuid?: string, campaignCode?: string, code?: string, createdBy?: { id?: number, }, dateCreated?: number, delayBillingDays?: number, eligibilityRequirements: record, plans?: List<{ id?: number, }>, redeemedBy?: { id?: number, }, referenceNumber?: string, retailer?: { bundleDays: number, id?: number, name: string, }, serialNumber?: string, status?: 'inactive' | 'active' | 'redeemed' | 'deleted', stripeCoupon?: string, subscription?: { id?: number, },

}, }

GET /redemption-codes

Get a list of redemption codes

Response Body
{

+ data: List<{ batchGuid?: string, campaignCode?: string, code?: string, createdBy?: { id?: number, }, dateCreated?: number, delayBillingDays?: number, eligibilityRequirements: record, plans?: List<{ id?: number, }>, redeemedBy?: { id?: number, }, referenceNumber?: string, retailer?: { bundleDays: number, id?: number, name: string, }, serialNumber?: string, status?: 'inactive' | 'active' | 'redeemed' | 'deleted', stripeCoupon?: string, subscription?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /retailers

Get a list of retailers

Response Body
{
- data: {

brand?: { id?: number, name?: string, }, bundleDays?: number, country?: { code?: string, id?: number, }, dateCreated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, isActive?: bool, name?: string,

}, }

GET /retailers

Get a list of retailers

Response Body
{

+ data: List<{ brand?: { id?: number, name?: string, }, bundleDays?: number, country?: { code?: string, id?: number, }, dateCreated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, isActive?: bool, name?: string, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /retailers/{id}/offers

Get a list of offers that this retailer should have.

Response Body
{
- data: {

createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published',

}, }

GET /retailers/{id}/offers

Get a list of offers that this retailer should have.

Response Body
{

+ data: List<{ createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /users/{userId}/relationships

Retrieve valid relationships by userId

Response Body
{
- data: {

type?: 'friends' | 'outgoing-request' | 'incoming-request' | 'blocked', user?: { id?: number, name?: string, },

}, }

GET /users/{userId}/relationships

Retrieve valid relationships by userId

Response Body
{

+ data: List<{ type?: 'friends' | 'outgoing-request' | 'incoming-request' | 'blocked', user?: { id?: number, name?: string, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /equipment/models

Get a list of all available Equipment

Response Body
{
- data: {

brand?: { name?: string, }, 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

Get a list of all available Equipment

Response Body
{

+ data: List<{ brand?: { name?: string, }, 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, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /equipment/categories

Get all equipment categories.

Response Body
{
- data: {

contentTag?: string, dateCreated?: number, dateUpdated?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, isActive?: bool, legacyContentTag?: string, name?: string, sortOrder?: number, updatedBy?: { id?: number, },

}, }

GET /equipment/categories

Get all equipment categories.

Response Body
{

+ data: List<{ contentTag?: string, dateCreated?: number, dateUpdated?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, isActive?: bool, legacyContentTag?: string, name?: string, sortOrder?: number, updatedBy?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /brands

Get all brands

Response Body
{
- data: {

alias?: string, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, isActive?: bool, name?: string, updatedBy?: { id?: number, },

}, }

GET /brands

Get all brands

Response Body
{

+ data: List<{ alias?: string, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, isActive?: bool, name?: string, updatedBy?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /partners

Get a list of partners

Response Body
{
- data: {

brand?: { id?: number, name?: string, }, bundleDays?: number, country?: { code?: string, id?: number, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, type?: 'retailer' | 'dealer' | 'affiliate' | 'employer', updatedBy?: { id?: number, },

}, }

GET /partners

Get a list of partners

Response Body
{

+ data: List<{ brand?: { id?: number, name?: string, }, bundleDays?: number, country?: { code?: string, id?: number, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, type?: 'retailer' | 'dealer' | 'affiliate' | 'employer', updatedBy?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /partners/{id}/offers

Get a list of offers available for this specific partner/retailer

Response Body
{
- data: {

createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published',

}, }

GET /partners/{id}/offers

Get a list of offers available for this specific partner/retailer

Response Body
{

+ data: List<{ createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published', + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /users/{userId}/subscriptions

Get a list of a user's subscriptions.

Response Body
{
- data: {

activation?: { isActivated?: bool, }, billingProvider?: { accountId?: string, customerId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', orderId?: string, }, cancellation?: { dateCancelled?: number, feedback?: string, reason?: string, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, },

}, }

GET /users/{userId}/subscriptions

Get a list of a user's subscriptions.

Response Body
{

+ data: List<{ activation?: { isActivated?: bool, }, billingProvider?: { accountId?: string, customerId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', orderId?: string, }, cancellation?: { dateCancelled?: number, feedback?: string, reason?: string, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }

GET /countries

Get a list of countries

Response Body
{
- data: {

code?: string, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, },

}, }

GET /countries

Get a list of countries

Response Body
{

+ data: List<{ code?: string, currency?: { code?: string, scale?: number, symbol?: string, }, dateCreated?: number, dateUpdated?: number, id?: number, mediaNet?: { code?: string, territoryId?: number, }, name?: string, numberFormat?: { decimalSeparator?: '.' | ',' | ' ', thousandsSeparator?: '.' | ',' | ' ', }, stripe?: { id?: number, }, + }>, + pagination: { + page?: number, + skip?: number, + take?: number, + total: { + pages?: number, + rows?: number, + }, }, }
11 added endpoints
Added endpoints

GET /users/{userId}/account/history

Get the changes that have happened to this account

Guard: selfOrAdmin

Response Body
{
  data: List<{
    action?: 'create' | 'activate' | 'started' | 'ended' | 'pause' | 'unpause' | 'cancel' | 'uncancel' | 'terminate' | 'change' | 'extend' | 'refund' | 'credit' | 'discount' | 'anonymize' | 'ban' | 'join-family' | 'unjoin-family ' | 'memo' | 'upcoming' | 'paid' | 'updated' | 'failed',
    dateOccurred?: number,
    guid?: string,
    initiatedBy?: {
      id?: number,
    },
    internalNote?: string,
    payload: record,
    publicNote?: string,
    reason?: {
      code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
      message?: string,
    },
    source?: 'webhook' | 'cs' | 'member' | 'app' | 'nest',
    subscription?: {
      id?: number,
    },
    user?: {
      id?: number,
    },
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total: {
      pages?: number,
      rows?: number,
    },
  },
}

POST /users/{userId}/account/cancel

Guard: selfOrAdmin

Request Body
{
  internalNote: string,
  publicNote: string,
  reason?: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      renewal?: 'auto' | 'paused' | 'cancelled' | 'failed',
      source?: {
        accountId?: string,
        lineItemId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        orderId?: string,
        productId?: string,
      },
      status?: 'pending' | 'trialing' | 'active' | 'expired',
      term?: {
        dateEnd?: number,
        dateStart?: number,
      },
      token?: string,
      trial?: {
        dateEnd?: number,
        dateStart?: number,
      },
      updatedBy?: {
        id?: number,
      },
      user?: {
        id?: number,
      },
      utm?: {
        campaign?: string,
        content?: string,
        medium?: string,
        source?: string,
      },
    },
  },
}

POST /users/{userId}/account/uncancel

Guard: selfOrAdmin

Request Body
{
  internalNote: string,
  publicNote: string,
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      renewal?: 'auto' | 'paused' | 'cancelled' | 'failed',
      source?: {
        accountId?: string,
        lineItemId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        orderId?: string,
        productId?: string,
      },
      status?: 'pending' | 'trialing' | 'active' | 'expired',
      term?: {
        dateEnd?: number,
        dateStart?: number,
      },
      token?: string,
      trial?: {
        dateEnd?: number,
        dateStart?: number,
      },
      updatedBy?: {
        id?: number,
      },
      user?: {
        id?: number,
      },
      utm?: {
        campaign?: string,
        content?: string,
        medium?: string,
        source?: string,
      },
    },
  },
}

POST /users/{userId}/account/pause

Guard: selfOrAdmin

Request Body
{
  durationDays?: number,
  internalNote: string,
  publicNote: string,
  reason: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      renewal?: 'auto' | 'paused' | 'cancelled' | 'failed',
      source?: {
        accountId?: string,
        lineItemId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        orderId?: string,
        productId?: string,
      },
      status?: 'pending' | 'trialing' | 'active' | 'expired',
      term?: {
        dateEnd?: number,
        dateStart?: number,
      },
      token?: string,
      trial?: {
        dateEnd?: number,
        dateStart?: number,
      },
      updatedBy?: {
        id?: number,
      },
      user?: {
        id?: number,
      },
      utm?: {
        campaign?: string,
        content?: string,
        medium?: string,
        source?: string,
      },
    },
  },
}

POST /users/{userId}/account/unpause

Guard: selfOrAdmin

Request Body
{
  internalNote: string,
  publicNote: string,
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      renewal?: 'auto' | 'paused' | 'cancelled' | 'failed',
      source?: {
        accountId?: string,
        lineItemId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        orderId?: string,
        productId?: string,
      },
      status?: 'pending' | 'trialing' | 'active' | 'expired',
      term?: {
        dateEnd?: number,
        dateStart?: number,
      },
      token?: string,
      trial?: {
        dateEnd?: number,
        dateStart?: number,
      },
      updatedBy?: {
        id?: number,
      },
      user?: {
        id?: number,
      },
      utm?: {
        campaign?: string,
        content?: string,
        medium?: string,
        source?: string,
      },
    },
  },
}

POST /users/{userId}/account/terminate

Guard: admin

Request Body
{
  internalNote: string,
  publicNote: string,
  reason?: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      renewal?: 'auto' | 'paused' | 'cancelled' | 'failed',
      source?: {
        accountId?: string,
        lineItemId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        orderId?: string,
        productId?: string,
      },
      status?: 'pending' | 'trialing' | 'active' | 'expired',
      term?: {
        dateEnd?: number,
        dateStart?: number,
      },
      token?: string,
      trial?: {
        dateEnd?: number,
        dateStart?: number,
      },
      updatedBy?: {
        id?: number,
      },
      user?: {
        id?: number,
      },
      utm?: {
        campaign?: string,
        content?: string,
        medium?: string,
        source?: string,
      },
    },
  },
}

POST /users/{userId}/account/extend

Guard: selfOrAdmin

Request Body
{
  durationDays?: number,
  internalNote: string,
  publicNote: string,
  reason: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      renewal?: 'auto' | 'paused' | 'cancelled' | 'failed',
      source?: {
        accountId?: string,
        lineItemId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        orderId?: string,
        productId?: string,
      },
      status?: 'pending' | 'trialing' | 'active' | 'expired',
      term?: {
        dateEnd?: number,
        dateStart?: number,
      },
      token?: string,
      trial?: {
        dateEnd?: number,
        dateStart?: number,
      },
      updatedBy?: {
        id?: number,
      },
      user?: {
        id?: number,
      },
      utm?: {
        campaign?: string,
        content?: string,
        medium?: string,
        source?: string,
      },
    },
  },
}

DELETE /content/schedule/{guid}

Delete a scheduled entry

Guard: admin

GET /collections/{guid}

Get a collection by guid

Guard: producer

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      guid?: string,
    },
    cardImage?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    coverImage?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        description?: string,
        guid?: string,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        instructors?: List<{
          id?: number,
          name?: string,
        }>,
        name?: string,
        studios?: List<{
          id?: number,
          name?: string,
        }>,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    showcase?: List<{
      collectionGuid?: string,
      country?: {
        code?: string,
      },
      guid?: string,
      sortOrder?: number,
      tagValue?: string,
    }>,
    sortOrder?: number,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'trash',
  },
}

PATCH /collections/{guid}

Update a Collection

Guard: producer

Request Body
{
  available: {
    end?: number,
    start?: number,
  },
  badge: {
    guid?: string,
  },
  cardImage: {
    data?: string,
    filename?: string,
  },
  coverImage: {
    data?: string,
    filename?: string,
  },
  description: string,
  durationDays: number,
  episodeWord: string,
  name: string,
  schedule: List<{
    guid?: string,
    sortOrder?: number,
  }>,
  showcase: List<{
    country?: {
      code?: string,
    },
    sortOrder?: number,
    tagValue?: string,
  }>,
  sortOrder: number,
  totalCount: number,
  type: 'generic' | 'series' | 'challenge' | 'program',
  visibility: 'public' | 'unlisted' | 'private' | 'trash',
}
Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      guid?: string,
    },
    cardImage?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    coverImage?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        description?: string,
        guid?: string,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        instructors?: List<{
          id?: number,
          name?: string,
        }>,
        name?: string,
        studios?: List<{
          id?: number,
          name?: string,
        }>,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    showcase?: List<{
      collectionGuid?: string,
      country?: {
        code?: string,
      },
      guid?: string,
      sortOrder?: number,
      tagValue?: string,
    }>,
    sortOrder?: number,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'trash',
  },
}

POST /collections

Create a new Collection

Guard: producer

Request Body
{
  available?: {
    end?: number,
    start?: number,
  },
  badge?: {
    guid?: string,
  },
  cardImage: {
    data?: string,
    filename?: string,
  },
  coverImage: {
    data?: string,
    filename?: string,
  },
  description?: string,
  durationDays?: number,
  episodeWord?: string,
  name?: string,
  schedule: List<{
    guid?: string,
    sortOrder?: number,
  }>,
  showcase: List<{
    country?: {
      code?: string,
    },
    sortOrder?: number,
    tagValue?: string,
  }>,
  sortOrder?: number,
  totalCount?: number,
  type?: 'generic' | 'series' | 'challenge' | 'program',
  visibility?: 'public' | 'unlisted' | 'private' | 'trash',
}
Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
      guid?: string,
    },
    cardImage?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    coverImage?: {
      default: string,
      large: string,
      medium: string,
      small: string,
      url?: string,
    },
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    name?: string,
    schedule?: List<{
      available?: {
        end?: number,
        live?: number,
        start?: number,
      },
      content?: {
        description?: string,
        guid?: string,
        image?: {
          default: string,
          large: string,
          medium: string,
          small: string,
          url?: string,
        },
        instructors?: List<{
          id?: number,
          name?: string,
        }>,
        name?: string,
        studios?: List<{
          id?: number,
          name?: string,
        }>,
      },
      guid?: string,
      legacy: {
        hlsUrl?: string,
        id?: number,
        liveStreamId?: number,
        type?: 'reflect' | 'connect',
      },
      type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
    }>,
    showcase?: List<{
      collectionGuid?: string,
      country?: {
        code?: string,
      },
      guid?: string,
      sortOrder?: number,
      tagValue?: string,
    }>,
    sortOrder?: number,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'trash',
  },
}
2 deleted endpoints

GET /users/exists/{email}

Check user exists

DELETE /content/{schedule}/{guid}

Delete a scheduled entry

Guard: admin

Deleted endpoints
WORK IN PROGRESS