Nest Changelog

1.1.32

4/22/2022

1.1.33

5/3/2022

39 changed endpoints

GET /users

Get all users

Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,

id?: number,

name?: string,

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

updatedBy?: { id?: number, }, weight?: { text?: string, units?: 'lb' | 'kg', value?: number, }, }, }

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,
    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,
  email?: string,
  firstName: string,
  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,
      name?: string,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,

weight: { units?: 'lb' | 'kg', value?: number, }, }
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,

id?: number,

name?: string,

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

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,
  email?: string,
  firstName: string,
  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,
      name?: string,
    },
    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,
    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,

id?: number,

name?: string,

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

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,
    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,
  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,
      name?: string,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,

weight: { units?: 'lb' | 'kg', value?: number, }, }
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,

id?: number,

name?: string,

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

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

id?: number,

name?: string,

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

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,
    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/{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,
  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,
      name?: string,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,

weight: { units?: 'lb' | 'kg', value?: number, }, }
Response Body
{
  data: {
    billingAddress?: {
      city?: string,
      country?: {
        code?: string,

id?: number,

name?: string,

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

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,
  email?: string,
  firstName: string,
  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,
      name?: string,
    },
    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,
    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',

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

POST /plans

Create Plan

Request Body
{
  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,
  },
  defaultTrial: {
    units?: 'day',
    value?: number,
  },
  delayBillingDays?: number,
  description?: string,
  family?: {
    brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
-   code?: 'premier' | 'select' | 'flex' | 'fitpass',

type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, image?: { data?: string, filename?: 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'>, }
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',

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

POST /plans

Create Plan

Request Body
{
  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,
  },
  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, image?: { data?: string, filename?: 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'>, }
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, }, }, }

PATCH /plans

Update plans in bulk.

Request 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,
    },
    defaultTrial: {
      units?: 'day',
      value?: number,
    },
    delayBillingDays: number,
    description: string,
    family: {
      brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
-     code?: 'premier' | 'select' | 'flex' | 'fitpass',

type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, image: { data?: string, filename?: 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'>, }, image: { default: string, large: string, medium: string, small: string, url?: string, }, where?: { countryCode: string, ids: List<number>, }, }

PATCH /plans

Update plans in bulk.

Request 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,
    },
    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, image: { data?: string, filename?: 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'>, }, image: { default: string, large: string, medium: string, small: string, url?: string, }, where?: { countryCode: string, ids: List<number>, }, }

GET /plans/{id}

Get Plan by id

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

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/{id}

Get Plan by id

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

PATCH /plans/{id}

Update Plan

Request Body
{
  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,
  },
  defaultTrial: {
    units?: 'day',
    value?: number,
  },
  delayBillingDays: number,
  description: string,
  family: {
    brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
-   code?: 'premier' | 'select' | 'flex' | 'fitpass',

type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, image: { data?: string, filename?: 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'>, }
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',

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

PATCH /plans/{id}

Update Plan

Request Body
{
  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,
  },
  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, image: { data?: string, filename?: 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'>, }
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, }, }, }

POST /auth

Sign in with email address and password

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {

features?: record, id?: number, name?: string,

}, userId?: number, }, }

POST /auth

Sign in with email address and password

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {
+     expires?: number,
      features?: record,
      id?: number,
      name?: string,
+     planFamily?: {
+       code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
+     },
    },
    userId?: number,
  },
}

GET /auth/{sessionGuid}

Refresh the token

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {

features?: record, id?: number, name?: string,

}, userId?: number, }, }

GET /auth/{sessionGuid}

Refresh the token

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {
+     expires?: number,
      features?: record,
      id?: number,
      name?: string,
+     planFamily?: {
+       code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
+     },
    },
    userId?: number,
  },
}

POST /auth/upgrade

Trade in your token from the legacy token for a session

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {

features?: record, id?: number, name?: string,

}, userId?: number, }, }

POST /auth/upgrade

Trade in your token from the legacy token for a session

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {
+     expires?: number,
      features?: record,
      id?: number,
      name?: string,
+     planFamily?: {
+       code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
+     },
    },
    userId?: number,
  },
}

POST /auth/commercial

Authenticate a single commercial piece of equipment

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {

features?: record, id?: number, name?: string,

}, userId?: number, }, }

POST /auth/commercial

Authenticate a single commercial piece of equipment

Response Body
{
  data: {
    family?: List<{
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      nickname?: string,
    }>,
    guid?: string,
    jwt?: string,
    mongoId?: string,
    plan?: {
+     expires?: number,
      features?: record,
      id?: number,
      name?: string,
+     planFamily?: {
+       code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
+     },
    },
    userId?: 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,

id?: number,

name?: string,

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

POST /studios

Create new studio

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,

id?: number,

name?: string,

}, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, updatedBy?: { id?: number, }, }, }

POST /studios

Create new studio

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/{id}

Get this specific studio

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,

id?: number,

name?: string,

}, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, updatedBy?: { id?: number, }, }, }

GET /studios/{id}

Get this specific studio

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

PATCH /studios/{id}

Edit studio

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,

id?: number,

name?: string,

}, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, updatedBy?: { id?: number, }, }, }

PATCH /studios/{id}

Edit studio

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

Get a list of songs

Guard: none

GET /songs

Get a list of songs

Guard: instructor

GET /songs/genres

Get a list of available song genres.

Guard: none

GET /songs/genres

Get a list of available song genres.

Guard: instructor

GET /songs/{id}/playlists

Get all playlists that contain this song

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

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

isFlagged?: bool, name?: string,

}, }

GET /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, + }>, isFlagged?: bool, name?: string, + schedule?: List<{ + available?: { + end?: number, + live?: number, + start?: number, + }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, + type?: 'live' | 'vod' | 'encore', + }>, + studios?: List<{ + id?: number, + name?: string, + }>, + videoLength?: { + id?: number, + name?: string, + }, }, }

GET /playlists

Get a list of playlists

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

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

isFlagged?: bool, name?: string,

}, }

GET /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, + }>, isFlagged?: bool, name?: string, + schedule?: List<{ + available?: { + end?: number, + live?: number, + start?: number, + }, + contentGuid?: string, + duration: number, + guid?: string, + legacy: { + hlsUrl?: string, + id?: number, + liveStreamId?: number, + type?: 'reflect' | 'connect', + }, + type?: 'live' | 'vod' | 'encore', + }>, + studios?: List<{ + id?: number, + name?: string, + }>, + videoLength?: { + id?: number, + name?: string, + }, }, }

POST /playlists

Create a new playlist

Request Body
{

name?: string,

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

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

isFlagged?: bool, name?: string,

}, }

POST /playlists

Create a new playlist

Request Body
{
+ countries?: List<{
+   code?: string,
+ }>,
+ instructors?: List<{
+   id?: number,
+   name?: string,
+ }>,
  name?: string,
+ studios?: List<{
+   id?: number,
+   name?: string,
+ }>,
+ videoLength?: {
+   id?: number,
+   name?: string,
+ },
}
Response Body
{
  data: {

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

GET /playlists/{playlist}

Get a single playlist by ID

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

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

isFlagged?: bool, name?: string, - tracks?: List<{ - createdBy?: {

id?: number,

},

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

id?: number,

}, trackOrder?: number, }>,

}, }

GET /playlists/{playlist}

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, + }>, isFlagged?: bool, name?: string,

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

song?: { + album?: { + id?: number, + name?: string, + }, + artists?: List<{ + id?: number, + name?: string, + }>, + 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, + }, + name?: string, + publisherRights?: List<string>, + releaseDate?: number, }, trackOrder?: number, }>, + videoLength?: { + id?: number, + name?: string, + }, }, }

PATCH /playlists/{id}

Update an existing playlist

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

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

isFlagged: bool, name: string,

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

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

isFlagged?: bool, name?: string,

}, }

PATCH /playlists/{id}

Update an existing playlist

Request Body
{

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

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

POST /playlists/{playlist}/import

Import all songs from a playlist to another playlist

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

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

isFlagged?: bool, name?: string, - tracks?: List<{ - createdBy?: {

id?: number,

},

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

id?: number,

}, trackOrder?: number, }>,

}, }

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, + }>, isFlagged?: bool, name?: string,

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

song?: { + album?: { + id?: number, + name?: string, + }, + artists?: List<{ + id?: number, + name?: string, + }>, + 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, + }, + name?: string, + publisherRights?: List<string>, + releaseDate?: number, }, trackOrder?: number, }>, + videoLength?: { + id?: number, + name?: string, + }, }, }

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

Get song from a playlist

Guard: none

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

Get song from a playlist

Guard: instructor

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

Remove song from a playlist

Guard: none

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

Remove song from a playlist

Guard: instructor

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

Guard: none

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

Guard: instructor

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

Guard: none

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

Guard: instructor

PUT /workouts/{workoutGuid}

Updates a user workout

Request Body
{
  device?: {
    app_version?: string,
    model?: string,
    os?: string,
    os_version?: string,
  },
  peripheral?: List<{
    data_points?: List<unknown>,
    events?: List<{
      timestamp?: number,
      type?: 'resistance' | 'speed' | 'incline' | 'pause' | 'connection',
      value?: number,
    }>,
    info?: {
      firmware_version?: string,
      hardware_version?: string,
      model_id?: string,
    },
    metrics?: List<unknown>,
    name?: string,
    type?: 'bike' | 'rower' | 'treadmill' | 'hrm',
    uuid?: string,
  }>,
  user?: {
    id: number,
    subscription_active?: bool,
    weight?: number,
  },
  workout?: {
    class_library?: string,
    end_date?: number,
-   events?: List<{

msg: string, timestamp?: number, type?: 'started' | 'paused' | 'completed' | 'social', - user: record,

}>, id?: string, metadata?: { desc?: string, id?: number, instructor?: string, playlist_id?: number, promo?: bool, title?: string, }, product_name?: string, start_date?: number, }, }

PUT /workouts/{workoutGuid}

Updates a user workout

Request Body
{
  device?: {
    app_version?: string,
    model?: string,
    os?: string,
    os_version?: string,
  },
  peripheral?: List<{
    data_points?: List<unknown>,
    events?: List<{
      timestamp?: number,
      type?: 'resistance' | 'speed' | 'incline' | 'pause' | 'connection',
      value?: number,
    }>,
    info?: {
      firmware_version?: string,
      hardware_version?: string,
      model_id?: string,
    },
    metrics?: List<unknown>,
    name?: string,
    type?: 'bike' | 'rower' | 'treadmill' | 'hrm',
    uuid?: string,
  }>,
  user?: {
    id: number,
    subscription_active?: bool,
    weight?: number,
  },
  workout?: {
    class_library?: string,
    end_date?: number,

+ events: List<{ msg: string, timestamp?: number, type?: 'started' | 'paused' | 'completed' | 'social',

+ user: number, }>, id?: string, metadata?: { desc?: string, id?: number, instructor?: string, playlist_id?: number, promo?: bool, title?: string, }, product_name?: string, start_date?: 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',

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

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

POST /offers

Create a new offer

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

type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published', }, }

POST /offers

Create a new offer

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

Get all offers

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

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

Get all offers

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 /offers/{guid}

Get a specific offer

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

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 /offers/{guid}

Get a specific offer

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

PATCH /offers/{guid}

Edit an offer

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

type?: 'connected' | 'disconnected', }, frequency?: { days?: number, }, id?: number, lineItems: List<{ text?: string, }>, name: string, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published', }, }

PATCH /offers/{guid}

Edit an offer

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

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: {
    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', }, }
6 added endpoints
Added endpoints

DELETE /playlists/{playlist}/tracks

Remove all songs from this playlist

Guard: instructor

GET /workouts/summaries

Get all workouts

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

POST /countries

Create a new country

Guard: admin

Request Body
{
  code?: string,
  currency?: {
    code?: string,
    scale?: number,
    symbol?: string,
  },
  mediaNet?: {
    code?: string,
    territoryId?: number,
  },
  name?: string,
  numberFormat?: {
    decimalSeparator?: '.' | ',' | ' ',
    thousandsSeparator?: '.' | ',' | ' ',
  },
  stripe?: {
    id?: number,
  },
}
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/{id}

Get a single country by ID

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

PATCH /countries/{id}

Edit a country

Guard: admin

Request Body
{
  code: string,
  currency: {
    code?: string,
    scale?: number,
    symbol?: string,
  },
  mediaNet: {
    code?: string,
    territoryId?: number,
  },
  name: string,
  numberFormat: {
    decimalSeparator?: '.' | ',' | ' ',
    thousandsSeparator?: '.' | ',' | ' ',
  },
  stripe: {
    id?: number,
  },
}
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,
    },
  },
}
WORK IN PROGRESS