Nest Changelog

1.1.54

6/30/2022

1.1.55

7/7/2022

18 changed endpoints

POST /users

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

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

POST /users

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,
+ captcha: {
+   token?: string,
+ },
  dealer: {
    id?: number,
  },
  email?: string,
  firstName: string,
  forcePasswordChange: bool,
  gender: {
    value?: 'm' | 'f' | 'o',
  },
  height: {
    units?: 'in' | 'cm',
    value?: number,
  },
  image: {
    colors?: {
      background?: {
        hex?: string,
      },
      foreground?: {
        hex?: string,
      },
    },
    default: string,
    initials?: string,
    isPlaceholder?: bool,
    large: string,
    medium: string,
    small: string,
    url?: string,
  },
  lastName: string,
  mongoId: string,
  nickname: string,
  parent: {
    id?: number,
    mongoId?: string,
  },
  password?: string,
  phoneNumber: string,
  purchaseHistory: List<{
    datePurchased?: number,
    name?: string,
    retailer?: {
      id?: number,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,
  tagline: string,
  weight: {
    units?: 'lb' | 'kg',
    value?: number,
  },
}

POST /users/{userId}/family

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

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

POST /users/{userId}/family

Request Body
{
  billingAddress: {
    city: string,
    country: {
      code?: string,
    },
    postalCode: string,
    region: {
      code?: string,
    },
    streetLine1: string,
    streetLine2: string,
  },
  birthdate: string,
+ captcha: {
+   token?: string,
+ },
  dealer: {
    id?: number,
  },
  email?: string,
  firstName: string,
  forcePasswordChange: bool,
  gender: {
    value?: 'm' | 'f' | 'o',
  },
  height: {
    units?: 'in' | 'cm',
    value?: number,
  },
  image: {
    colors?: {
      background?: {
        hex?: string,
      },
      foreground?: {
        hex?: string,
      },
    },
    default: string,
    initials?: string,
    isPlaceholder?: bool,
    large: string,
    medium: string,
    small: string,
    url?: string,
  },
  lastName: string,
  mongoId: string,
  nickname: string,
  parent: {
    id?: number,
    mongoId?: string,
  },
  password?: string,
  phoneNumber: string,
  purchaseHistory: List<{
    datePurchased?: number,
    name?: string,
    retailer?: {
      id?: number,
    },
    serialNumber?: string,
  }>,
  roles: List<string>,
  tagline: string,
  weight: {
    units?: 'lb' | 'kg',
    value?: number,
  },
}

GET /subscriptions/{id}

Get a subscription

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, }, provisional?: { isProvisioned?: bool, }, 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 /subscriptions/{id}

Get a subscription

Response Body
{
  data: {
    activation?: {
      isActivated?: bool,
    },
    billingProvider?: {
      accountId?: string,
      customerId?: string,
      name?: 'stripe' | 'ios' | 'android' | 'amazon',
      orderId?: string,
    },
    cancellation?: {
      dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }

POST /subscriptions/{id}/activate

create a new subscription in stripe from shopify order, optionally applies a redemption code

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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }

POST /subscriptions/{id}/activate

create a new subscription in stripe from shopify order, optionally applies a redemption code

Response Body
{
  data: {
    activation?: {
      isActivated?: bool,
    },
    billingProvider?: {
      accountId?: string,
      customerId?: string,
      name?: 'stripe' | 'ios' | 'android' | 'amazon',
      orderId?: string,
    },
    cancellation?: {
      dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }

POST /subscriptions

create a blank subscription for testing purposes

Response Body
{
  data: {
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

}, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, provisional?: { isProvisioned?: bool, }, 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, }, }, tokenId?: string, }, }

POST /subscriptions

create a blank subscription for testing purposes

Response Body
{
  data: {
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, 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, }, }, tokenId?: string, }, }

GET /users/{userId}/account

Return the current state of the user’s account with payment status

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

}, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, provisional?: { isProvisioned?: bool, }, 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}/account

Return the current state of the user’s account with payment status

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }

POST /users/{userId}/account/quote

Response Body
{
  data: {
    charges?: {

billedToday?: { discount?: number, subtotal?: number, total?: number, }, - credit?: { - currentCredit?: number, - futureCredit?: number, - }, recurring?: { dateStart?: number, frequencyDays?: number, price?: number, }, }, currency?: { code?: string, scale?: number, symbol?: string, }, plan?: { 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 /users/{userId}/account/quote

Response Body
{
  data: {
    charges?: {
+     balance?: {
+       currentBalance?: number,
+       futureCredit?: number,
+     },
      billedToday?: {
        discount?: number,
        subtotal?: number,
        total?: number,
      },

recurring?: { dateStart?: number, frequencyDays?: number, price?: number, }, }, currency?: { code?: string, scale?: number, symbol?: string, }, plan?: { 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 /users/{userId}/account/cancel

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

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

POST /users/{userId}/account/cancel

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }

POST /users/{userId}/account/uncancel

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

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

POST /users/{userId}/account/uncancel

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }

POST /users/{userId}/account/pause

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

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

POST /users/{userId}/account/pause

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }

POST /users/{userId}/account/unpause

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

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

POST /users/{userId}/account/unpause

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }

POST /users/{userId}/account/terminate

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
-       feedback?: string,
-       reason?: string,

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

POST /users/{userId}/account/terminate

Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, 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 /content/schedule

Get list of scheduled content.

Guard: none

GET /content/schedule

Get list of scheduled content.

Guard: admin

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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }

GET /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,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }

GET /users/{userId}/subscriptions/{id}

Get a specific subscription.

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, }, provisional?: { isProvisioned?: bool, }, 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/{id}

Get a specific subscription.

Response Body
{
  data: {
    activation?: {
      isActivated?: bool,
    },
    billingProvider?: {
      accountId?: string,
      customerId?: string,
      name?: 'stripe' | 'ios' | 'android' | 'amazon',
      orderId?: string,
    },
    cancellation?: {
      dateCancelled?: number,

+ reason?: { + code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', + message?: 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, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }

POST /collections

Create a new Collection

Guard: producer

Request Body
{
  available?: {
    end?: number,
    start?: number,
  },
  badge?: {
    guid?: string,
  },
  cardImage: {
    data?: string,
    filename?: string,
  },
  coverImage: {
    data?: string,
    filename?: string,
  },
  description?: string,
  durationDays?: number,
  episodeWord?: string,
  name?: string,
  schedule: List<{
    guid?: string,
-   sortOrder?: number,

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

totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'trash', }, }

POST /collections

Create a new Collection

Guard: loggedIn

Request Body
{
  available?: {
    end?: number,
    start?: number,
  },
  badge?: {
    guid?: string,
  },
  cardImage: {
    data?: string,
    filename?: string,
  },
  coverImage: {
    data?: string,
    filename?: string,
  },
  description?: string,
  durationDays?: number,
  episodeWord?: string,
  name?: string,
  schedule: List<{
    guid?: string,

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

GET /collections/{guid}

Get a collection by guid

Guard: producer

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

totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'trash', }, }

GET /collections/{guid}

Get a collection by guid

Guard: loggedIn

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

PATCH /collections/{guid}

Update a Collection

Guard: producer

Request Body
{
  available: {
    end?: number,
    start?: number,
  },
  badge: {
    guid?: string,
  },
  cardImage: {
    data?: string,
    filename?: string,
  },
  coverImage: {
    data?: string,
    filename?: string,
  },
  description: string,
  durationDays: number,
  episodeWord: string,
  name: string,
  schedule: List<{
    guid?: string,
-   sortOrder?: number,

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

totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'trash', }, }

PATCH /collections/{guid}

Update a Collection

Guard: loggedIn

Request Body
{
  available: {
    end?: number,
    start?: number,
  },
  badge: {
    guid?: string,
  },
  cardImage: {
    data?: string,
    filename?: string,
  },
  coverImage: {
    data?: string,
    filename?: string,
  },
  description: string,
  durationDays: number,
  episodeWord: string,
  name: string,
  schedule: List<{
    guid?: string,

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

POST /webhooks/invoice-upcoming

Request Body
{
  amountDue?: number,
  amountPaid?: number,
  amountTotal?: number,
  attemptCount?: number,
  attempted?: bool,
  billingProviderId?: string,
  billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual',
  currencyCode?: string,
  dateCreated?: number,
  dateNextAttempt?: number,
  datePeriodEnd?: number,
  datePeriodStart?: number,
  initiatedBy?: {
    id?: number,
  },
  internalNote?: string,
  isAutomaticCollection?: bool,
  isManualPayment?: bool,
  isPaid?: bool,
  publicNote?: string,
  reason?: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
  status?: string,
}

POST /webhooks/invoice-paid

Request Body
{
  amountDue?: number,
  amountPaid?: number,
  amountTotal?: number,
  attemptCount?: number,
  attempted?: bool,
  billingProviderId?: string,
  billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual',
  currencyCode?: string,
  dateCreated?: number,
  dateNextAttempt?: number,
  datePeriodEnd?: number,
  datePeriodStart?: number,
  initiatedBy?: {
    id?: number,
  },
  internalNote?: string,
  isAutomaticCollection?: bool,
  isManualPayment?: bool,
  isPaid?: bool,
  publicNote?: string,
  reason?: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
  status?: string,
}

POST /webhooks/payment-failure

Request Body
{
  amountDue?: number,
  amountPaid?: number,
  amountTotal?: number,
  attemptCount?: number,
  attempted?: bool,
  billingProviderId?: string,
  billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual',
  currencyCode?: string,
  dateCreated?: number,
  dateNextAttempt?: number,
  datePeriodEnd?: number,
  datePeriodStart?: number,
  initiatedBy?: {
    id?: number,
  },
  internalNote?: string,
  isAutomaticCollection?: bool,
  isManualPayment?: bool,
  isPaid?: bool,
  publicNote?: string,
  reason?: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
  status?: string,
}

POST /users/{userId}/account/change

Guard: selfOrAdmin

Request Body
{
  addOns: List<number>,
  internalNote: string,
  planId?: number,
  publicNote: string,
}
Response Body
{
  data: {
    charges?: {
      balance?: {
        currentBalance?: number,
        futureCredit?: number,
      },
      billedToday?: {
        discount?: number,
        subtotal?: number,
        total?: number,
      },
      recurring?: {
        dateStart?: number,
        frequencyDays?: number,
        price?: number,
      },
    },
    currency?: {
      code?: string,
      scale?: number,
      symbol?: string,
    },
    plan?: {
      basePrice?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      benefits?: List<{
        text?: string,
      }>,
      billingProviders?: List<{
        accountId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        priceId?: string,
        productId?: string,
      }>,
      country?: {
        code?: string,
        id?: number,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      defaultTrial?: {
        units?: 'day',
        value?: number,
      },
      delayBillingDays?: number,
      description?: string,
      family?: {
        brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
        code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
        type?: 'connected' | 'disconnected',
      },
      frequency?: {
        units?: 'month',
        value?: number,
      },
      frequencyDays?: number,
      id?: number,
      image?: {
        default: string,
        large: string,
        medium: string,
        small: string,
        url?: string,
      },
      musicRights?: {
        productId?: string,
        vendor?: 'audibleMagic',
      },
      name?: string,
      sku?: string,
      sortOrder?: number,
      sources?: List<{
        accountId?: string,
        name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
        productId?: string,
      }>,
      tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
      updatedBy?: {
        id?: number,
      },
    },
  },
}

GET /collections

List collections

Guard: loggedIn

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

DELETE /collections/{guid}

Delete a Collection

Guard: loggedIn

DELETE /collections/{guid}/schedule/{scheduleGuid}

Delete a schedule item from a collection

Guard: loggedIn

PUT /collections/{guid}/schedule/{scheduleGuid}

Add a schedule item to a collection

Guard: loggedIn

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

GET /equipment/plans

Get a list of all equipment tags available to a specific plan tag

Guard: loggedIn

Response Body
{
  data: {
    equipment?: List<string>,
  },
}

POST /users/{userId}/account/extend

Guard: selfOrAdmin

Request Body
{
  durationDays?: number,
  internalNote: string,
  publicNote: string,
  reason: {
    code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
    message?: string,
  },
}
Response Body
{
  data: {
    dateCancelled?: number,
    dateExpires?: number,
    datePausedUntil?: number,
    nextInvoice?: {
      amount?: number,
      currency?: {
        code?: string,
        scale?: number,
        symbol?: string,
      },
      dateScheduled?: number,
    },
    status?: {
      status?: 'accepted' | 'blocked' | 'requested',
    },
    subscription?: {
      activation?: {
        isActivated?: bool,
      },
      billingProvider?: {
        accountId?: string,
        customerId?: string,
        name?: 'stripe' | 'ios' | 'android' | 'amazon',
        orderId?: string,
      },
      cancellation?: {
        dateCancelled?: number,
        feedback?: string,
        reason?: string,
      },
      createdBy?: {
        id?: number,
      },
      dateCreated?: number,
      dateUpdated?: number,
      id?: number,
      pause?: {
        dateEnd?: number,
        dateStart?: number,
        reason?: string,
      },
      plan?: {
        id?: number,
      },
      price?: {
        currency?: {
          code?: string,
          scale?: number,
          symbol?: string,
        },
        value?: number,
      },
      promotion?: {
        id?: number,
      },
      provisional?: {
        isProvisioned?: bool,
      },
      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,
      },
    },
  },
}
Deleted endpoints
WORK IN PROGRESS