Nest Changelog

1.1.21

3/31/2022

1.1.22

4/5/2022

7 changed endpoints

GET /plans

Get all Plans

Response Body
{
  data: List<{

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

description?: string,

frequency?: { units?: 'month', value?: number, },

id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, - price?: { - currency?: string, - value?: number, - }, 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: 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, }, }>, }

POST /plans

Create Plan

Request Body
{

billingProviders?: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country?: { code?: string, id?: number, }, - defaultTrial?: {

units?: 'day', value?: number, },

description?: string, - frequency?: {

units?: 'month', value?: number, },

image?: { - default: string, - large: string, - medium: string, - small: string, - url?: string,

}, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, - price?: { - currency?: string, - value?: number, - }, sku?: string, sortOrder?: number, sources?: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags?: List<string>, }
Response Body
{
  data: {

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

description?: string,

frequency?: { units?: 'month', value?: number, },

id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, - price?: { - currency?: string, - value?: number, - }, 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<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

Update plans in bulk.

Request Body
{
  data?: {

billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, defaultTrial: { units?: 'day', value?: number, },

description: string,

frequency: { units?: 'month', value?: number, },

image: { - default: string, - large: string, - medium: string, - small: string, - url?: string,

}, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, - price: { - currency?: string, - value?: number, - }, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<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<string>, }, + 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: {

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

description?: string,

frequency?: { units?: 'month', value?: number, },

id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, - price?: { - currency?: string, - value?: number, - }, 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<string>, updatedBy?: { id?: number, }, }, }

PATCH /plans/{id}

Update Plan

Request Body
{

billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, defaultTrial: { units?: 'day', value?: number, },

description: string,

frequency: { units?: 'month', value?: number, },

image: { - default: string, - large: string, - medium: string, - small: string, - url?: string,

}, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, - price: { - currency?: string, - value?: number, - }, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<string>, }
Response Body
{
  data: {

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

description?: string,

frequency?: { units?: 'month', value?: number, },

id?: number, image?: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights?: { productId?: string, vendor?: 'audibleMagic', }, name?: string, - price?: { - currency?: string, - value?: number, - }, 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<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, }, }, }

GET /subscriptions/{id}

Get a susbcription

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

Get a susbcription

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

POST /subscriptions/{id}/activate

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

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

lastName?: string, phoneNumber?: string, redemptionCode: string, 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

Request Body
{
  billingAddress?: {
    city?: string,
    country?: {
      code?: string,
    },
    postalCode?: string,
    region?: {
      code?: string,
    },
    streetLine1?: string,
    streetLine2?: string,
  },
  cardTokenId?: string,
  email?: string,
  firstName?: string,
+ isFirstPeriodPrepaid: bool,
  lastName?: string,
  phoneNumber?: string,
  redemptionCode: string,
  utm: {
    campaign?: string,
    content?: string,
    medium?: string,
    source?: string,
  },
}
11 added endpoints
Added endpoints

POST /playlists/{playlist}/import

Import all songs from a playlist to another playlist

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

GET /content/library

Search for content in the Library

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

POST /subscriptions/{id}/quote

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

Guard: loggedIn

Request Body
{
  isFirstPeriodPrepaid: bool,
  redemptionCode: string,
  utm: {
    campaign?: string,
    content?: string,
    medium?: string,
    source?: 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',
  }>,
}

POST /offers

Create a new offer

Guard: admin

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

GET /offers

Get all offers

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

GET /offers/{guid}

Get a specific offer

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

PATCH /offers/{guid}

Edit an offer

Guard: admin

Request Body
{
  delayBilling: {
    days?: number,
    text?: string,
    type?: 'trial' | 'bundle',
  },
  image: {
    data?: string,
    filename?: string,
  },
  introductory: {
    days?: number,
    price?: number,
    stripeCouponId?: string,
    text?: string,
  },
  name: string,
  plan: {
    id?: number,
  },
  planNameOverride: string,
  recurring: {
    price?: number,
    stripePriceId?: string,
    text?: string,
  },
  status: 'draft' | 'published',
}
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',
  },
}

DELETE /offers/{guid}

Delete an offer

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