Nest Changelog

1.1.27

4/11/2022

1.1.28

4/14/2022

38 changed endpoints

GET /users

Get all users

Response Body
{
- data: List<{

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?: { default: string, 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, 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?: { default: string, 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: List<{

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?: { default: string, 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, 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?: { default: string, 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/{userId}/family

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?: {
      default: string,
      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/{userId}/family

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?: {
      default: string,
      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,
+ },
}

GET /plans

Get all Plans

Response Body
{
- data: List<{

basePrice?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProviders?: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country?: { code?: string, id?: number, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass', 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<string>,

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

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

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

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

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

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

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

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

GET /preferences

Get a list of possible preferences

Response Body
{
- data: List<{

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

}

GET /preferences

Get a list of possible preferences

Response Body
{

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

+ }, }

GET /instructors

Get a list of instructors

Response Body
{
- data: List<{

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

}

GET /instructors

Get a list of instructors

Response Body
{

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

+ }, }

GET /studios

Get a list of all studios

Response Body
{
- data: List<{

code?: string, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, streetAddress?: { city?: string, country?: { code?: string, 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, id?: number, name?: string, }, postalCode?: string, region?: { code?: string, name?: string, }, streetLine1?: string, streetLine2?: string, }, updatedBy?: { id?: number, },

+ }, }

GET /features

Get a list of all available features

Response Body
{
- data: List<{

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

}

GET /features

Get a list of all available features

Response Body
{

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

+ }, }

GET /songs

Get a list of songs

Response Body
{
- data: List<{

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

id?: number, name?: string, }>, - coverArt?: { - default: string, - large: string, - medium: string, - small: string, - url?: string, - },

duration?: { seconds: number, text: string, }, - genres?: List<{ - id?: number, - name?: string, - }>,

id?: number, isExplicit?: bool, - isrcCode?: string,

label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, - licenseDetails?: { - label: record, - publisher: record, - }, - licensedIn?: List<string>, name?: string, - yearPublished?: number, - }>,

}

GET /songs

Get a list of songs

Response Body
{

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

GET /songs/{id}

Get a specific song

Guard: none

Response Body
{
  data: {
    album?: {
      id?: number,
      name?: string,
    },
-   artist?: List<{

id?: number, name?: string, }>, - coverArt?: { - default: string, - large: string, - medium: string, - small: string, - url?: string, - },

duration?: { seconds: number, text: string, }, - genres?: List<{ - id?: number, - name?: string, - }>,

id?: number, isExplicit?: bool, - isrcCode?: string,

label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, - licenseDetails?: { - label: record, - publisher: record, - }, - licensedIn?: List<string>, name?: string, - yearPublished?: number,

}, }

GET /songs/{id}

Get a specific song

Guard: instructor

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

GET /songs/{id}/playlists

Get all playlists that contain this song

Guard: none

Response Body
{
- data: List<{

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

}

GET /songs/{id}/playlists

Get all playlists that contain this song

Guard: instructor

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

Get a sample of a song

Guard: none

POST /songs/{id}/sample

Get a sample of a song

Guard: instructor

POST /songs/{id}/playback

Get a link to a song's playback

Guard: none

POST /songs/{id}/playback

Get a link to a song's playback

Guard: instructor

GET /playlists

Get a list of playlists

Response Body
{
- data: List<{

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

}

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

Get a list of the available firmware updates

Response Body
{
- data: List<{

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

}

GET /firmware

Get a list of the available firmware updates

Response Body
{

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

+ }, }

GET /content/library

Search for content in the Library

Guard: none

Response Body
{
- data: List<{

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

}

GET /content/library

Search for content in the Library

Guard: loggedIn

Response Body
{

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

+ }, }

GET /content/items

Get list of content items

Guard: loggedIn

Response Body
{
- data: List<{

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

}

GET /content/items

Get list of content items

Guard: admin

Response Body
{

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

+ }, }

GET /content/items/{guid}

Get a specific content item

Response Body
{
- data: List<{

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

}

GET /content/items/{guid}

Get a specific content item

Response Body
{

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

+ }, }

GET /content/recommendations

Get content recommended for this user.

Response Body
{
- data: List<{

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

}

GET /content/recommendations

Get content recommended for this user.

Response Body
{

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

+ }, }

GET /content/tags

Get available content tags.

Response Body
{
- data: List<{

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

}

GET /content/tags

Get available content tags.

Response Body
{

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

+ }, }

GET /content/schedule

Get list of scheduled content.

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

}

GET /content/schedule

Get list of scheduled content.

Response Body
{

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

+ }, }

GET /content/schedule/{scheduleId}

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

Response Body
{
- data: List<{

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

}

GET /content/schedule/{scheduleId}

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

Response Body
{

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

+ }, }

GET /redemption-codes

Get a list of redemption codes

Response Body
{
- data: List<{

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

}

GET /redemption-codes

Get a list of redemption codes

Response Body
{

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

+ }, }

GET /subscriptions/{id}/history

Get a subscription history by subscription ID

Response Body
{
- data: List<{

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

}

GET /subscriptions/{id}/history

Get a subscription history by subscription ID

Response Body
{

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

+ }, }

GET /campaigns

Get all campaigns

Response Body
{
- data: List<{

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

}

GET /campaigns

Get all campaigns

Response Body
{

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

+ }, }

GET /retailers

Get a list of retailers

Response Body
{
- data: List<{

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

}

GET /retailers

Get a list of retailers

Response Body
{

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

+ }, }

GET /retailers/{id}/offers

Get a list of offers that this retailer should have.

Response Body
{
- data: List<{

createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass', 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 /users/{userId}/relationships

Retrieve valid relationships by userId

Response Body
{
- data: List<{

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

}

GET /users/{userId}/relationships

Retrieve valid relationships by userId

Response Body
{

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

+ }, }

GET /equipment/models

Get a list of all available Equipment

Response Body
{
- data: List<{

brand?: { name?: string, }, category: { guid?: string, name?: string, }, dateAvailable?: number, dateCreated?: number, dateUpdated?: number, id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, name?: string, pdf?: { url?: string, }, plans?: List<{ id?: number, }>, video?: { url?: string, }, - }>,

}

GET /equipment/models

Get a list of all available Equipment

Response Body
{

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

+ }, }

GET /equipment/categories

Get all equipment categories.

Response Body
{
- data: List<{

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

}

GET /equipment/categories

Get all equipment categories.

Response Body
{

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

+ }, }

GET /brands

Get all brands

Response Body
{
- data: List<{

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

}

GET /brands

Get all brands

Response Body
{

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

+ }, }

GET /partners

Get a list of partners

Response Body
{
- data: List<{

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

}

GET /partners

Get a list of partners

Response Body
{

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

+ }, }

GET /partners/{id}/offers

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

Response Body
{
- data: List<{

createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, name?: string, plan?: { currency?: { code?: string, scale?: number, symbol?: string, }, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass', 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 /users/{userId}/subscriptions

Get a list of a user's subscriptions.

Response Body
{
- data: List<{

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

}

GET /users/{userId}/subscriptions

Get a list of a user's subscriptions.

Response Body
{

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

+ }, }
4 added endpoints
Added endpoints

GET /test/toggles

Testing feature toggles.

POST /test/validation

Throw an error for testing purposes.

Request Body
{
  array: List<string>,
  array2: List<'foo' | 'bar'>,
  nested: List<{
    value?: string,
  }>,
}

GET /songs/genres

Get a list of available song genres.

Response Body
{
  data: string,
}

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