Nest Changelog
1.4.5
9/14/2022
1.5.0
9/22/2022
59 changed endpoints Collapse changed endpoints
POST /webhooks/invoice-upcoming 
Request Body
{
amountDue?: number,
amountPaid?: number,
amountTotal?: number,
attemptCount?: number,
attempted?: bool,
billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming',
currencyCode?: string,
dateCreated?: number,
dateNextAttempt?: number,
datePeriodEnd?: number,
datePeriodStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
isAutomaticCollection?: bool,
isManualPayment?: bool,
isPaid?: bool,
- orderId?: string,
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
- sourceId?: string,
- sourceName?: 'stripe' | 'ios' | 'android' | 'amazon',
- sourceUserId?: string,
status?: string,
}POST /webhooks/invoice-upcoming 
Request Body
{
amountDue?: number,
amountPaid?: number,
amountTotal?: number,
attemptCount?: number,
attempted?: bool,
billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming',
currencyCode?: string,
dateCreated?: number,
dateNextAttempt?: number,
datePeriodEnd?: number,
datePeriodStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
isAutomaticCollection?: bool,
isManualPayment?: bool,
isPaid?: bool,
+ orderCode?: string,
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
+ sourceCode?: string,
+ sourceName?: 'stripe' | 'apple' | 'google' | 'amazon',
+ sourceUserCode?: string,
status?: string,
}POST /webhooks/invoice-paid 
Request Body
{
amountDue?: number,
amountPaid?: number,
amountTotal?: number,
attemptCount?: number,
attempted?: bool,
billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming',
currencyCode?: string,
dateCreated?: number,
dateNextAttempt?: number,
datePeriodEnd?: number,
datePeriodStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
isAutomaticCollection?: bool,
isManualPayment?: bool,
isPaid?: bool,
- orderId?: string,
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
- sourceId?: string,
- sourceName?: 'stripe' | 'ios' | 'android' | 'amazon',
- sourceUserId?: string,
status?: string,
}POST /webhooks/invoice-paid 
Request Body
{
amountDue?: number,
amountPaid?: number,
amountTotal?: number,
attemptCount?: number,
attempted?: bool,
billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming',
currencyCode?: string,
dateCreated?: number,
dateNextAttempt?: number,
datePeriodEnd?: number,
datePeriodStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
isAutomaticCollection?: bool,
isManualPayment?: bool,
isPaid?: bool,
+ orderCode?: string,
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
+ sourceCode?: string,
+ sourceName?: 'stripe' | 'apple' | 'google' | 'amazon',
+ sourceUserCode?: string,
status?: string,
}POST /webhooks/payment-failure 
Request Body
{
amountDue?: number,
amountPaid?: number,
amountTotal?: number,
attemptCount?: number,
attempted?: bool,
billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming',
currencyCode?: string,
dateCreated?: number,
dateNextAttempt?: number,
datePeriodEnd?: number,
datePeriodStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
isAutomaticCollection?: bool,
isManualPayment?: bool,
isPaid?: bool,
- orderId?: string,
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
- sourceId?: string,
- sourceName?: 'stripe' | 'ios' | 'android' | 'amazon',
- sourceUserId?: string,
status?: string,
}POST /webhooks/payment-failure 
Request Body
{
amountDue?: number,
amountPaid?: number,
amountTotal?: number,
attemptCount?: number,
attempted?: bool,
billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming',
currencyCode?: string,
dateCreated?: number,
dateNextAttempt?: number,
datePeriodEnd?: number,
datePeriodStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
isAutomaticCollection?: bool,
isManualPayment?: bool,
isPaid?: bool,
+ orderCode?: string,
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
+ sourceCode?: string,
+ sourceName?: 'stripe' | 'apple' | 'google' | 'amazon',
+ sourceUserCode?: string,
status?: string,
}POST /webhooks/subscription-created 
Request Body
{
billingCycleAnchor?: number,
createdAt?: number,
dateCancelled?: number,
dateExpire?: number,
datePausedUntil?: number,
dateStart?: number,
dateTrialEnd?: number,
dateTrialStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
- orderId?: 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,
},
},
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
renewedAt?: number,
- shopifyCustomerId: string,
- sourceId?: string,
- sourceName?: 'stripe' | 'ios' | 'android' | 'amazon',
- sourceUserId?: string,
status?: string,
}POST /webhooks/subscription-created 
Request Body
{
billingCycleAnchor?: number,
createdAt?: number,
dateCancelled?: number,
dateExpire?: number,
datePausedUntil?: number,
dateStart?: number,
dateTrialEnd?: number,
dateTrialStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
+ orderCode?: string,
plan?: {
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
+ billingProvider: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy: {
id?: number,
},
},
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
renewedAt?: number,
+ shopifyCustomerCode: string,
+ sourceCode?: string,
+ sourceType?: 'stripe' | 'apple' | 'google' | 'amazon',
+ sourceUserCode?: string,
status?: string,
}POST /webhooks/subscription-deleted 
Request Body
{
billingCycleAnchor?: number,
createdAt?: number,
dateCancelled?: number,
dateExpire?: number,
datePausedUntil?: number,
dateStart?: number,
dateTrialEnd?: number,
dateTrialStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
- orderId?: 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,
},
},
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
renewedAt?: number,
- shopifyCustomerId: string,
- sourceId?: string,
- sourceName?: 'stripe' | 'ios' | 'android' | 'amazon',
- sourceUserId?: string,
status?: string,
}POST /webhooks/subscription-deleted 
Request Body
{
billingCycleAnchor?: number,
createdAt?: number,
dateCancelled?: number,
dateExpire?: number,
datePausedUntil?: number,
dateStart?: number,
dateTrialEnd?: number,
dateTrialStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
+ orderCode?: string,
plan?: {
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
+ billingProvider: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy: {
id?: number,
},
},
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
renewedAt?: number,
+ shopifyCustomerCode: string,
+ sourceCode?: string,
+ sourceType?: 'stripe' | 'apple' | 'google' | 'amazon',
+ sourceUserCode?: string,
status?: string,
}POST /webhooks/subscription-updated 
Request Body
{
billingCycleAnchor?: number,
createdAt?: number,
dateCancelled?: number,
dateExpire?: number,
datePausedUntil?: number,
dateStart?: number,
dateTrialEnd?: number,
dateTrialStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
- orderId?: 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,
},
},
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
renewedAt?: number,
- shopifyCustomerId: string,
- sourceId?: string,
- sourceName?: 'stripe' | 'ios' | 'android' | 'amazon',
- sourceUserId?: string,
status?: string,
}POST /webhooks/subscription-updated 
Request Body
{
billingCycleAnchor?: number,
createdAt?: number,
dateCancelled?: number,
dateExpire?: number,
datePausedUntil?: number,
dateStart?: number,
dateTrialEnd?: number,
dateTrialStart?: number,
initiatedBy: {
id?: number,
},
internalNote: string,
+ orderCode?: string,
plan?: {
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
+ billingProvider: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy: {
id?: number,
},
},
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
renewedAt?: number,
+ shopifyCustomerCode: string,
+ sourceCode?: string,
+ sourceType?: 'stripe' | 'apple' | 'google' | 'amazon',
+ sourceUserCode?: string,
status?: string,
}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 
Request Body
{
billingAddress: {
city: string,
country: {
code?: string,
},
postalCode: string,
region: {
code?: string,
},
streetLine1: string,
streetLine2: string,
},
birthdate: string,
captcha: {
token?: string,
},
+ commercial: {
+ code?: 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,
},
}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,
},
+ commercial: {
+ code?: 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 /plans 
Get all Plans
Response Body
{
data: List<{
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
- billingProviders?: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
- sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /plans 
Get all Plans
Response Body
{
data: List<{
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /plans 
Create Plan
Request Body
{
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
- billingProviders?: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country?: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image?: {
data?: string,
filename?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
- sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
}Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
- billingProviders?: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
- sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}POST /plans 
Create Plan
Request Body
{
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
country?: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image?: {
data?: string,
filename?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
+ source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
}Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}PATCH /plans 
Update plans in bulk.
Request Body
{
data?: {
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
- billingProviders: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays: number,
description: string,
family: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image: {
data?: string,
filename?: string,
},
musicRights: {
productId?: string,
vendor?: 'audibleMagic',
},
name: string,
sku: string,
sortOrder: number,
- sources: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
},
image: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
where?: {
countryCode: string,
ids: List<number>,
},
}PATCH /plans 
Update plans in bulk.
Request Body
{
data?: {
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
+ billingProvider: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
country: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays: number,
description: string,
family: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image: {
data?: string,
filename?: string,
},
musicRights: {
productId?: string,
vendor?: 'audibleMagic',
},
name: string,
sku: string,
sortOrder: number,
+ source: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
},
image: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
where?: {
countryCode: string,
ids: List<number>,
},
}GET /plans/{id} 
Get Plan by id
Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
- billingProviders?: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
- sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}GET /plans/{id} 
Get Plan by id
Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}PATCH /plans/{id} 
Update Plan
Request Body
{
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
- billingProviders: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays: number,
description: string,
family: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image: {
data?: string,
filename?: string,
},
musicRights: {
productId?: string,
vendor?: 'audibleMagic',
},
name: string,
sku: string,
sortOrder: number,
- sources: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
}Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
- billingProviders?: List<{
- accountId?: string,
- name?: 'stripe' | 'ios' | 'android' | 'amazon',
- priceId?: string,
- productId?: string,
- }>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
- sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
- }>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}PATCH /plans/{id} 
Update Plan
Request Body
{
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
+ billingProvider: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
country: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays: number,
description: string,
family: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image: {
data?: string,
filename?: string,
},
musicRights: {
productId?: string,
vendor?: 'audibleMagic',
},
name: string,
sku: string,
sortOrder: number,
+ source: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
}Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source?: {
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 /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,
},
},
}GET /subscriptions/{id} 
Get a subscription
Response Body
{
data: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
}POST /subscriptions/{id}/quote 
create a new subscription in stripe from shopify order, optionally applies a redemption code
Request Body
{
isFirstPeriodPrepaid: bool,
redemptionCode: string,
utm: {
- campaign?: string,
- content?: string,
- medium?: string,
- source?: string,
},
}Response Body
{
data: {
campaign?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateExpires?: number,
delayBillingDays?: number,
guid?: string,
name?: string,
partner?: {
id?: number,
name?: string,
},
utmCampaign?: string,
utmSource?: string,
},
dateFirstBilling?: number,
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,
},
},
redemptionCode?: {
batchGuid?: string,
campaignCode?: string,
code?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBillingDays?: number,
eligibilityRequirements?: record,
plans?: List<{
id?: number,
}>,
redeemedBy?: {
id?: number,
},
referenceNumber?: string,
retailer?: {
bundleDays: number,
id?: number,
name: string,
},
serialNumber?: string,
status?: 'inactive' | 'active' | 'redeemed' | 'deleted',
stripeCoupon?: string,
subscription?: {
id?: number,
},
},
},
}POST /subscriptions/{id}/quote 
create a new subscription in stripe from shopify order, optionally applies a redemption code
Request Body
{
isFirstPeriodPrepaid: bool,
redemptionCode: string,
utm: {
+ campaign: string,
+ content: string,
+ medium: string,
+ source: string,
+ term: string,
},
}Response Body
{
data: {
campaign?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateExpires?: number,
delayBillingDays?: number,
guid?: string,
name?: string,
partner?: {
id?: number,
name?: string,
},
utmCampaign?: string,
utmSource?: string,
},
dateFirstBilling?: number,
plan?: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
+ },
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
redemptionCode?: {
batchGuid?: string,
campaignCode?: string,
code?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBillingDays?: number,
eligibilityRequirements?: record,
plans?: List<{
id?: number,
}>,
redeemedBy?: {
id?: number,
},
referenceNumber?: string,
retailer?: {
bundleDays: number,
id?: number,
name: string,
},
serialNumber?: string,
status?: 'inactive' | 'active' | 'redeemed' | 'deleted',
stripeCoupon?: string,
subscription?: {
id?: number,
},
},
},
}POST /redemption-codes/{code}/redemption 
Redeem a single 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 /redemption-codes/{code}/redemption 
Redeem a single code
Response Body
{
data: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
}GET /users/{userId}/account 
Return the current state of the user’s account with payment status
Guard: selfOrAdmin
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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 /users/{userId}/account 
Return the user's account with the payment status and last/current paid subscription
Guard: none
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}GET /users/{userId}/account/history 
Get the changes that have happened to this account
Guard: selfOrAdmin
Response Body
{
data: List<{
action?: 'create' | 'activate' | 'started' | 'ended' | 'pause' | 'unpause' | 'cancel' | 'uncancel' | 'terminate' | 'change' | 'extend' | 'refund' | 'credit' | 'discount' | 'anonymize' | 'ban' | 'join-family' | 'unjoin-family' | 'memo' | 'upcoming' | 'paid' | 'updated' | 'failed',
dateOccurred?: number,
guid?: string,
initiatedBy?: {
id?: number,
},
internalNote?: string,
payload?: record,
publicNote?: string,
reason?: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
source?: 'webhook' | 'cs' | 'member' | 'app' | 'nest',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/account/history 
Get the changes that have happened to this account
Guard: none
Response Body
{
data: List<{
action?: 'create' | 'activate' | 'started' | 'ended' | 'pause' | 'unpause' | 'cancel' | 'uncancel' | 'terminate' | 'change' | 'extend' | 'refund' | 'credit' | 'discount' | 'anonymize' | 'ban' | 'join-family' | 'unjoin-family' | 'memo' | 'upcoming' | 'paid' | 'updated' | 'failed',
dateOccurred?: number,
guid?: string,
initiatedBy?: {
id?: number,
},
internalNote?: string,
payload?: record,
publicNote?: string,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
source?: 'webhook' | 'cs' | 'member' | 'app' | 'nest',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /users/{userId}/account/quote 
Guard: selfOrAdmin
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/quote 
Guard: none
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,
}>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
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,
+ source?: {
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/change 
Guard: selfOrAdmin
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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/change 
Guard: none
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/cancel 
Guard: selfOrAdmin
Request Body
{
internalNote: string,
publicNote: string,
reason?: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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/cancel 
Guard: none
Request Body
{
internalNote: string,
publicNote: string,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/uncancel 
Guard: selfOrAdmin
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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 
Guard: none
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/pause 
Guard: selfOrAdmin
Request Body
{
durationDays?: number,
internalNote: string,
publicNote: string,
reason: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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 
Guard: none
Request Body
{
durationDays?: number,
internalNote: string,
publicNote: string,
reason: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/unpause 
Guard: selfOrAdmin
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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 
Guard: none
Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/terminate 
Request Body
{
internalNote: string,
publicNote: string,
reason?: {
- code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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 
Request Body
{
internalNote: string,
publicNote: string,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/credit 
Request Body
{
durationDays?: number,
initiatedBy?: {
id?: 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?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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/credit 
Request Body
{
durationDays?: number,
initiatedBy?: {
id?: number,
},
internalNote?: string,
publicNote?: string,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}POST /users/{userId}/account/activate 
create a new subscription in stripe from shopify order, optionally applies a redemption code
Guard: loggedIn
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,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
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/activate 
create a new subscription in stripe from shopify order, optionally applies a redemption code
Guard: none
Request Body
{
+ applyBillingDelay: bool,
+ billingAddress: {
city?: string,
country?: {
code?: string,
},
postalCode?: string,
region?: {
code?: string,
},
streetLine1?: string,
streetLine2?: string,
},
cardTokenId?: string,
+ firstName: string,
+ isFirstPeriodPrepaid: bool,
+ lastName: string,
+ phoneNumber: string,
redemptionCode: string,
utm: {
+ campaign: string,
+ content: string,
+ medium: string,
+ source: string,
+ term: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
},
}GET /studios 
Get a list of all studios
Response Body
{
data: List<{
code?: string,
- createdBy?: {
- id?: number,
- },
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /studios 
Get a list of all studios
Response Body
{
data: List<{
code?: string,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /studios 
Create new studio
Request Body
{
code?: string,
- createdBy?: {
- id?: number,
},
- dateCreated?: number,
- dateUpdated?: number,
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
},
postalCode?: string,
region?: {
code?: string,
},
streetLine1?: string,
streetLine2?: string,
},
- updatedBy?: {
- id?: number,
- },
}Response Body
{
data: {
code?: string,
- createdBy?: {
- id?: number,
- },
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}POST /studios 
Create new studio
Request Body
{
code?: string,
+ image: {
+ data?: string,
+ filename?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
},
postalCode?: string,
region?: {
code?: string,
},
streetLine1?: string,
streetLine2?: string,
},
}Response Body
{
data: {
code?: string,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}GET /studios/{id} 
Get this specific studio
Response Body
{
data: {
code?: string,
- createdBy?: {
- id?: number,
- },
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}GET /studios/{id} 
Get this specific studio
Response Body
{
data: {
code?: string,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}PATCH /studios/{id} 
Edit studio
Request Body
{
- code?: string,
- createdBy?: {
- id?: number,
},
- dateCreated?: number,
- dateUpdated?: number,
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- name?: string,
- streetAddress?: {
- city?: string,
- country?: {
code?: string,
},
- postalCode?: string,
- region?: {
code?: string,
},
- streetLine1?: string,
- streetLine2?: string,
},
- updatedBy?: {
- id?: number,
- },
}Response Body
{
data: {
code?: string,
- createdBy?: {
- id?: number,
- },
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}PATCH /studios/{id} 
Edit studio
Request Body
{
+ code: string,
+ image: {
+ data?: string,
+ filename?: string,
},
+ name: string,
+ streetAddress: {
+ city: string,
+ country: {
code?: string,
},
+ postalCode: string,
+ region: {
code?: string,
},
+ streetLine1: string,
+ streetLine2: string,
},
}Response Body
{
data: {
code?: string,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}GET /songs 
Get a list of songs
Response Body
{
data: {
aggregations?: List<{
buckets?: List<{
}>,
key?: string,
}>,
count?: number,
pagination?: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
results?: List<{
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
}>,
},
}GET /songs 
Get a list of songs
Response Body
{
data: {
aggregations?: List<{
buckets?: List<{
+ count?: number,
+ image?: {
+ default: string,
+ large: string,
+ medium: string,
+ small: string,
+ url?: string,
+ },
+ key?: string,
+ text?: string,
}>,
key?: string,
}>,
count?: number,
pagination?: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
results?: List<{
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
}>,
},
}GET /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
videoLength?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
videoLength?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /playlists 
Get a list of playlists
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
trackCount?: number,
videoLength?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /playlists 
Get a list of playlists
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
trackCount?: number,
videoLength?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /playlists 
Create a new playlist
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}POST /playlists 
Create a new playlist
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}GET /playlists/{playlist} 
Get a single playlist by ID
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}GET /playlists/{playlist} 
Get a single playlist by ID
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}PATCH /playlists/{id} 
Update an existing playlist
Request Body
{
countries: List<{
code?: string,
}>,
createdBy: {
id?: number,
name?: string,
},
dateCreated: number,
dateUpdated: number,
id: number,
instructors: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged: bool,
legacyContentExplicit: bool,
name: string,
schedule: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
videoLength: {
id?: number,
name?: string,
},
}Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}PATCH /playlists/{id} 
Update an existing playlist
Request Body
{
countries: List<{
code?: string,
}>,
createdBy: {
id?: number,
name?: string,
},
dateCreated: number,
dateUpdated: number,
id: number,
instructors: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged: bool,
legacyContentExplicit: bool,
name: string,
schedule: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
videoLength: {
id?: number,
name?: string,
},
}Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}POST /playlists/{playlist}/import 
Import all songs from a playlist to another playlist
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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,
}>,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}POST /playlists/{playlist}/import 
Import all songs from a playlist to another playlist
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
isFlagged?: bool,
legacyContentExplicit?: bool,
name?: string,
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
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' | 'format',
value?: string,
}>,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}GET /content/library 
Search for content in the Library
Response Body
{
- data: {
- aggregations?: List<{
- buckets?: List<{
- }>,
- key?: string,
}>,
- count?: number,
- pagination?: {
- page?: number,
- skip?: number,
- take?: number,
- total: {
- pages?: number,
- rows?: number,
},
},
- results?: List<{
- countries?: List<{
- code?: string,
}>,
- dateLive?: number,
- description?: string,
- guid?: string,
- image?: string,
- instructors?: List<string>,
- length?: number,
- name?: string,
- studios?: List<string>,
tags?: List<{
- text?: string,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
}>,
- type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
- }>,
},
}GET /content/library 
Search for content in the Library
Response Body
{
+ data: List<{
+ contentGuid?: string,
+ countries?: List<{
+ code?: string,
}>,
+ dateLive?: number,
+ description?: string,
+ image?: {
+ default: string,
+ large: string,
+ medium: string,
+ small: string,
+ url?: string,
+ },
+ instructors?: List<{
+ id?: number,
+ image?: {
+ default: string,
+ large: string,
+ medium: string,
+ small: string,
+ url?: string,
},
+ name?: string,
+ }>,
+ length?: number,
+ name?: string,
+ playback?: {
+ type?: 'hls' | 'dash',
+ url?: string,
},
+ playlistId?: number,
+ scheduleGuid?: string,
+ status?: 'draft' | 'published' | 'trash',
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ tags?: List<{
+ text?: string,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
+ value?: string,
+ }>,
+ type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
+ }>,
+ embedded: {
+ aggregations?: {
+ durations?: List<{
}>,
+ instructors?: List<{
+ id?: number,
+ image?: {
+ default: string,
+ large: string,
+ medium: string,
+ small: string,
+ url?: string,
+ },
+ name?: string,
+ }>,
tags?: List<{
+ buckets?: List<{
+ count?: number,
+ image?: {
+ default: string,
+ large: string,
+ medium: string,
+ small: string,
+ url?: string,
+ },
+ text?: string,
+ value?: string,
+ }>,
value?: string,
}>,
+ },
},
+ pagination: {
+ page?: number,
+ skip?: number,
+ take?: number,
+ total: {
+ pages?: number,
+ rows?: number,
+ },
+ },
}GET /content/items 
Get list of content items
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/items 
Get list of content items
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
+ isWorldWide?: bool,
+ keywords?: string,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /content/items 
Create a content item
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
},
}POST /content/items 
Create a content item
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
+ isWorldWide?: bool,
+ keywords?: string,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
},
}GET /content/items/{guid} 
Get a specific content item
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
},
}GET /content/items/{guid} 
Get a specific content item
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
+ isWorldWide?: bool,
+ keywords?: string,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
},
}PATCH /content/items/{guid} 
Update a content item
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
},
}PATCH /content/items/{guid} 
Update a content item
Response Body
{
data: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
+ isWorldWide?: bool,
+ keywords?: string,
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy: {
hlsUrl?: string,
id?: number,
liveStreamId?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sourceUrl?: string,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted',
},
}GET /content/recommendations 
Get content recommended for this user.
Response Body
{
data: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
description?: string,
- guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
- instructors?: List<string>,
name?: string,
score?: number,
- studios?: List<string>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/recommendations 
Get content recommended for this user.
Response Body
{
data: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
+ contentGuid?: string,
+ countries?: List<{
+ code?: string,
+ }>,
+ dateLive?: number,
description?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
+ instructors?: List<{
+ id?: number,
+ image?: {
+ default: string,
+ large: string,
+ medium: string,
+ small: string,
+ url?: string,
+ },
+ name?: string,
+ }>,
+ length?: number,
name?: string,
+ playback?: {
+ type?: 'hls' | 'dash',
+ url?: string,
+ },
+ playlistId?: number,
+ scheduleGuid?: string,
score?: number,
+ status?: 'draft' | 'published' | 'trash',
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ tags?: List<{
+ text?: string,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
+ value?: string,
+ }>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/tags 
Get available content tags.
Response Body
{
data: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/tags 
list ALL possible content tags. No filter / pagination / sort.
Response Body
{
data: List<{
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/tags/{value} 
Get one content tag by value.
Response Body
{
data: {
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
},
}GET /content/tags/{value} 
Get one content tag by value.
Response Body
{
data: {
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
},
}PUT /content/tags/{value} 
Create a New Tag
Request Body
{
image: {
url?: string,
},
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
}Response Body
{
data: {
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
},
}PUT /content/tags/{value} 
Create a New Tag
Request Body
{
image: {
url?: string,
},
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
}Response Body
{
data: {
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
},
}PATCH /content/tags/{value} 
Edit a tag
Request Body
{
image: {
url?: string,
},
translations: record,
- type: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
}Response Body
{
data: {
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
value?: string,
},
}PATCH /content/tags/{value} 
Edit a tag
Request Body
{
image: {
url?: string,
},
translations: record,
+ type: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
}Response Body
{
data: {
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
text?: string,
translations: record,
+ type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'format',
value?: string,
},
}GET /equipment/models 
Get a list of all available Equipment
Response Body
{
data: List<{
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /equipment/models 
Get a list of all available Equipment
Response Body
{
data: List<{
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
+ equipmentTag?: string,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /equipment/models 
Create a new equipment model
Request Body
{
brand?: {
name?: string,
},
dateAvailable?: number,
- image?: {
data?: string,
filename?: string,
},
name?: string,
pdf: {
data?: string,
filename?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
}Response Body
{
data: {
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
},
}POST /equipment/models 
Create a new equipment model
Request Body
{
brand?: {
name?: string,
},
dateAvailable?: number,
+ equipmentTag?: string,
+ image: {
data?: string,
filename?: string,
},
name?: string,
pdf: {
data?: string,
filename?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
}Response Body
{
data: {
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
+ equipmentTag?: string,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
},
}GET /equipment/models/{id} 
Get a specific model of equipment
Response Body
{
data: {
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
},
}GET /equipment/models/{id} 
Get a specific model of equipment
Response Body
{
data: {
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
+ equipmentTag?: string,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
},
}PATCH /equipment/models/{id} 
Update an existing equipment model.
Request Body
{
brand: {
name?: string,
},
dateAvailable: number,
image: {
data?: string,
filename?: string,
},
name: string,
pdf: {
data?: string,
filename?: string,
},
plans: List<{
id?: number,
}>,
video: {
url?: string,
},
}Response Body
{
data: {
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
},
}PATCH /equipment/models/{id} 
Update an existing equipment model.
Request Body
{
brand: {
name?: string,
},
dateAvailable: number,
+ equipmentTag: string,
image: {
data?: string,
filename?: string,
},
name: string,
pdf: {
data?: string,
filename?: string,
},
plans: List<{
id?: number,
}>,
video: {
url?: string,
},
}Response Body
{
data: {
brand?: {
name?: string,
},
category: {
guid?: string,
name?: string,
},
dateAvailable?: number,
dateCreated?: number,
dateUpdated?: number,
+ equipmentTag?: string,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
pdf?: {
url?: string,
},
plans?: List<{
id?: number,
}>,
video?: {
url?: string,
},
},
}GET /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 
Get a list of a user's subscriptions.
Response Body
{
data: List<{
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: 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,
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 /users/{userId}/subscriptions/{id} 
Get a specific subscription.
Response Body
{
data: {
activation?: {
isActivated?: bool,
+ isFirstPeriodPrepaid?: bool,
},
+ billing?: {
+ customerCode?: string,
+ orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
+ code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ offer?: {
+ guid?: string,
+ },
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
+ basePrice?: {
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ value?: number,
+ },
+ benefits?: List<{
+ text?: string,
+ }>,
+ billingProvider?: {
+ credentialsKey?: string,
+ id?: number,
+ name?: string,
+ organizationCode?: string,
+ priceCode?: string,
+ productCode?: string,
+ type?: 'stripe' | 'apple' | 'google' | 'amazon',
+ },
+ 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,
+ source?: {
+ accountId?: string,
+ name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
+ productId?: string,
+ },
+ tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
+ updatedBy?: {
+ 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,
+ term: string,
},
},
}GET /collections 
List collections
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,
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,
},
},
}GET /collections 
List collections
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,
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' | 'format',
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,
},
},
}POST /collections 
Create a new Collection
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,
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',
},
}POST /collections 
Create a new Collection
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,
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' | 'format',
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
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,
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
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,
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' | 'format',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'trash',
},
}PATCH /collections/{guid} 
Update a Collection
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,
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
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,
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' | 'format',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'trash',
},
}PUT /collections/{guid}/schedule/{scheduleGuid} 
Add a schedule item to a collection
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,
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',
},
}PUT /collections/{guid}/schedule/{scheduleGuid} 
Add a schedule item to a collection
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,
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' | 'format',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'trash',
},
}40 added endpoints Collapse added endpoints
POST /auth/one-time-token 
Trade in your login token from a magic link for a session
Request Body
{
guid?: string,
}Response Body
{
data: {
family?: List<{
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
nickname?: string,
}>,
guid?: string,
jwt?: string,
mongoId?: string,
plan?: {
expires?: number,
features?: record,
id?: number,
name?: string,
planFamily?: {
code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
},
},
userId?: number,
},
}POST /users/{userId}/login-tokens 
Request Body
{
expirationSeconds?: number,
}Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateExpires?: number,
dateRedeemed?: number,
guid?: string,
user?: {
id?: number,
},
},
}POST /commercial/codes 
Create a new commercial code
Guard: admin
Request Body
{
dateCreated?: number,
dateRedeemed?: number,
location?: {
id?: number,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
}Response Body
{
data: {
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
},
}GET /commercial/codes 
Get a list of commercial codes
Guard: admin
Response Body
{
data: List<{
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /commercial/codes/{code} 
Get a specific commercial code
Guard: admin
Response Body
{
data: {
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
},
}POST /commercial/codes/{code}/redeem 
Redeem a comercial code
Request Body
{
serialNumber?: string,
}Response Body
{
data: {
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
},
}POST /commercial/codes/{code}/validate 
Verify that a code is still valid and can be used.
Request Body
{
serialNumber?: string,
}Response Body
{
data: {
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
},
}POST /commercial/codes/{code}/reset 
Reset a code to an unused state.
Guard: admin
Response Body
{
data: {
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
},
}POST /commercial/codes/{code}/suspend 
Suspend this code.
Guard: admin
Response Body
{
data: {
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
},
}POST /commercial/locations 
Create a commercial location
Guard: admin
Request Body
{
accessPin?: number,
address1?: string,
address2?: string,
city?: string,
commercialUser?: {
id?: number,
},
company?: {
id?: number,
},
countryCode?: string,
dateNextBilling?: number,
name?: string,
phone?: string,
postalCode?: string,
state?: string,
subscription?: {
id?: number,
},
}Response Body
{
data: {
accessPin?: number,
address1?: string,
address2?: string,
city?: string,
commercialUser?: {
email?: string,
id?: number,
},
company?: {
id?: number,
name?: string,
},
countryCode?: string,
dateCreated?: number,
dateNextBilling?: number,
dateUpdated?: number,
id?: number,
name?: string,
phone?: string,
postalCode?: string,
state?: string,
subscription?: {
id?: number,
name?: string,
},
user?: {
id?: number,
},
},
}GET /commercial/locations 
Get a list of commercial locations
Guard: admin
Response Body
{
data: List<{
accessPin?: number,
address1?: string,
address2?: string,
city?: string,
commercialUser?: {
email?: string,
id?: number,
},
company?: {
id?: number,
name?: string,
},
countryCode?: string,
dateCreated?: number,
dateNextBilling?: number,
dateUpdated?: number,
id?: number,
name?: string,
phone?: string,
postalCode?: string,
state?: string,
subscription?: {
id?: number,
name?: string,
},
user?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /commercial/locations/{id} 
Get a specific commercial location
Guard: loggedIn
Response Body
{
data: {
accessPin?: number,
address1?: string,
address2?: string,
city?: string,
commercialUser?: {
email?: string,
id?: number,
},
company?: {
id?: number,
name?: string,
},
countryCode?: string,
dateCreated?: number,
dateNextBilling?: number,
dateUpdated?: number,
id?: number,
name?: string,
phone?: string,
postalCode?: string,
state?: string,
subscription?: {
id?: number,
name?: string,
},
user?: {
id?: number,
},
},
}PATCH /commercial/locations/{id} 
Update a commercial location
Guard: admin
Request Body
{
accessPin: number,
address1: string,
address2: string,
city: string,
commercialUser: {
id?: number,
},
company: {
id?: number,
},
countryCode: string,
dateNextBilling: number,
name: string,
phone: string,
postalCode: string,
state: string,
subscription: {
id?: number,
},
}Response Body
{
data: {
accessPin?: number,
address1?: string,
address2?: string,
city?: string,
commercialUser?: {
email?: string,
id?: number,
},
company?: {
id?: number,
name?: string,
},
countryCode?: string,
dateCreated?: number,
dateNextBilling?: number,
dateUpdated?: number,
id?: number,
name?: string,
phone?: string,
postalCode?: string,
state?: string,
subscription?: {
id?: number,
name?: string,
},
user?: {
id?: number,
},
},
}GET /commercial/locations/{id}/codes 
Get a specific commercial location
Guard: loggedIn
Response Body
{
data: List<{
code?: string,
company?: {
id?: number,
name?: string,
},
dateCreated?: number,
dateRedeemed?: number,
location?: {
accessPin?: number,
city?: string,
id?: number,
name?: string,
},
serialNumber?: string,
status?: 'pending' | 'active' | 'expired',
subscription?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/account/subscriptions 
Returns all of the accounts subscriptions
Response Body
{
data: List<{
activation?: {
isActivated?: bool,
isFirstPeriodPrepaid?: bool,
},
billing?: {
customerCode?: string,
orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
offer?: {
guid?: string,
},
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProvider?: {
credentialsKey?: string,
id?: number,
name?: string,
organizationCode?: string,
priceCode?: string,
productCode?: string,
type?: 'stripe' | 'apple' | 'google' | 'amazon',
},
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,
source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
},
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
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,
term: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /users/{userId}/account/payment 
Update the account payment method on a Stripe subscription
Request Body
{
billingAddress: {
city?: string,
country?: {
code?: string,
},
postalCode?: string,
region?: {
code?: string,
},
streetLine1?: string,
streetLine2?: string,
},
cardTokenId?: string,
firstName: string,
lastName: string,
phoneNumber: string,
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
isFirstPeriodPrepaid?: bool,
},
billing?: {
customerCode?: string,
orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
offer?: {
guid?: string,
},
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProvider?: {
credentialsKey?: string,
id?: number,
name?: string,
organizationCode?: string,
priceCode?: string,
productCode?: string,
type?: 'stripe' | 'apple' | 'google' | 'amazon',
},
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,
source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
},
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
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,
term: string,
},
},
},
}POST /users/{userId}/account/subscribe 
Create a new subscription in stripe
Guard: loggedIn
Request Body
{
applyBillingDelay: bool,
billingAddress: {
city?: string,
country?: {
code?: string,
},
postalCode?: string,
region?: {
code?: string,
},
streetLine1?: string,
streetLine2?: string,
},
cardTokenId?: string,
firstName: string,
isFirstPeriodPrepaid: bool,
lastName: string,
phoneNumber: string,
planId?: number,
redemptionCode: string,
utm: {
campaign: string,
content: string,
medium: string,
source: string,
term: string,
},
}Response Body
{
data: {
dateCancelled?: number,
dateExpires?: number,
datePausedUntil?: number,
nextInvoice?: {
amount?: number,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateScheduled?: number,
},
status?: {
code?: 'childProfile' | 'neverSubscribed' | 'notActivated' | 'onTrialCancelled' | 'onTrialPaused' | 'onTrial' | 'activeCancelled' | 'activePaused' | 'active' | 'expiredPaused' | 'expiredVoluntary' | 'expiredInvoluntary',
text?: string,
},
subscription?: {
activation?: {
isActivated?: bool,
isFirstPeriodPrepaid?: bool,
},
billing?: {
customerCode?: string,
orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
offer?: {
guid?: string,
},
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProvider?: {
credentialsKey?: string,
id?: number,
name?: string,
organizationCode?: string,
priceCode?: string,
productCode?: string,
type?: 'stripe' | 'apple' | 'google' | 'amazon',
},
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,
source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
},
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
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,
term: string,
},
},
},
}POST /users/{userId}/account/test-subscription 
create a blank subscription for testing purposes
Guard: admin
Response Body
{
data: {
subscription?: {
activation?: {
isActivated?: bool,
isFirstPeriodPrepaid?: bool,
},
billing?: {
customerCode?: string,
orderCode?: string,
},
cancellation?: {
dateCancelled?: number,
reason?: {
code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
offer?: {
guid?: string,
},
pause?: {
dateEnd?: number,
dateStart?: number,
reason?: string,
},
plan?: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProvider?: {
credentialsKey?: string,
id?: number,
name?: string,
organizationCode?: string,
priceCode?: string,
productCode?: string,
type?: 'stripe' | 'apple' | 'google' | 'amazon',
},
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,
source?: {
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
},
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
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,
term: string,
},
},
tokenId?: string,
},
}POST /users/{userId}/account/test-token 
Generate a test token for stripe
Guard: admin
Response Body
{
data: string,
}POST /playlists/{id}/playback-dryrun 
Track the playback for media rights purposes.
Guard: loggedIn
Request Body
{
countryCode: string,
duration?: number,
start: number,
}Response Body
{
data: {
cacheKey?: string,
countryCode?: string,
plan?: {
},
retailerCode?: string,
trackCount?: number,
tracks?: List<{
createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
playlist?: {
id?: number,
},
song?: {
album?: {
id?: number,
name?: string,
},
artists?: List<{
id?: number,
name?: string,
}>,
copyright?: record,
coverArtUrl?: string,
duration?: {
seconds: number,
text: string,
},
genres?: List<string>,
id?: number,
isExplicit?: bool,
isrc?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
labelRights?: record,
name?: string,
publisherRights?: List<string>,
releaseDate?: number,
searchFlags?: record,
},
trackOrder?: number,
}>,
userCode?: string,
},
}GET /content/searches 
Gets a list of most popular searches
Guard: loggedIn
Response Body
{
data: List<string>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/searches/autocomplete 
Gets a list of auto complete searches
Guard: loggedIn
Response Body
{
data: List<string>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/durations 
Get list of available durations.
Guard: loggedIn
Response Body
{
data: List<{
id?: number,
name?: string,
value?: number,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /content/tag-groups 
Create a tag group
Guard: admin
Request Body
{
group?: string,
level?: 'primary',
translations: record,
values?: List<string>,
}Response Body
{
data: {
group?: string,
level?: 'primary',
translations: record,
values?: List<string>,
},
}GET /content/languages 
Get available content languages.
Guard: loggedIn
Response Body
{
data: List<{
key?: string,
name?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}GET /content/countries 
List of all possible countries to which a producer can assign content.
Guard: loggedIn
Response Body
{
data: List<{
code?: string,
name?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /users/{userId}/devices 
Request Body
{
environment: 'standard' | 'debug',
model: string,
osVersion: string,
pushToken: string,
type?: 'ios' | 'android',
}Response Body
{
data: {
dateCreated?: number,
deviceGuid?: string,
environment?: 'standard' | 'debug',
model?: string,
osVersion?: string,
pushToken?: string,
type?: 'ios' | 'android',
user?: {
id?: number,
},
},
}GET /users/{userId}/devices 
Response Body
{
data: List<{
dateCreated?: number,
deviceGuid?: string,
environment?: 'standard' | 'debug',
model?: string,
osVersion?: string,
pushToken?: string,
type?: 'ios' | 'android',
user?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}PATCH /users/{userId}/devices/{deviceGuid} 
Request Body
{
environment: 'standard' | 'debug',
model: string,
osVersion: string,
pushToken: string,
type: 'ios' | 'android',
}Response Body
{
data: {
dateCreated?: number,
deviceGuid?: string,
environment?: 'standard' | 'debug',
model?: string,
osVersion?: string,
pushToken?: string,
type?: 'ios' | 'android',
user?: {
id?: number,
},
},
}GET /users/{userId}/devices/{deviceGuid} 
Response Body
{
data: {
dateCreated?: number,
deviceGuid?: string,
environment?: 'standard' | 'debug',
model?: string,
osVersion?: string,
pushToken?: string,
type?: 'ios' | 'android',
user?: {
id?: number,
},
},
}PUT /workouts/{guid} 
Post a Workout
Guard: loggedIn
Request Body
{
classLibrary: string,
content?: {
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
device?: {
appVersion?: string,
model?: string,
os?: string,
osVersion?: string,
},
events: List<string>,
peripherals?: List<{
firmwareVersion?: string,
guid?: string,
hardwareVersion?: string,
modelId?: string,
name?: string,
serialNO?: string,
type?: 'bike' | 'rower' | 'treadmill',
}>,
productName: string,
ranking: {
place?: number,
total?: number,
},
stats?: List<{
classState?: 'warmup' | 'in-session' | 'overflow' | 'ended',
dateLoggedMs?: number,
output?: {
distance: number,
incrementalDistance: number,
joules: number,
RPM: number,
strokesPerMinute: number,
time500Meters: number,
watts: number,
},
peripheral?: {
guid: string,
incline: number,
resistance: number,
speed: number,
},
physiology?: {
calories: number,
heartRate: number,
hrPoints: number,
},
playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering',
}>,
user?: {
id?: number,
},
}GET /workouts/{guid} 
Get detailed view of workout
Guard: loggedIn
Response Body
{
data: {
data?: record,
},
}GET /workouts 
Get a list of workout summaries
Guard: admin, self
Response Body
{
data: List<{
content?: {
description?: string,
duration?: number,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
name?: string,
type?: 'live' | 'vod' | 'encore' | 'freestyle',
},
dateEnd?: number,
dateStart?: number,
duration?: {
percentage?: number,
text?: string,
value?: number,
},
guid?: string,
ranking?: {
place?: number,
total?: number,
},
stats?: record,
status?: 'new' | 'incomplete' | 'complete',
user?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}5 deleted endpoints Collapse deleted endpoints
GET /subscriptions/{id}/history 
Get a subscription history by subscription ID
Guard: admin
Response Body
{
data: List<{
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
dateOccurred?: number,
guid?: string,
initiatedBy?: {
id?: number,
},
payload?: record,
rawJson?: record,
reason?: string,
source?: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}POST /subscriptions/{id}/history 
Create Subscription History
Request Body
{
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
initiatedBy?: {
id?: number,
},
payload: record,
rawJson: record,
reason: string,
source: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}Response Body
{
data: {
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
dateOccurred?: number,
guid?: string,
initiatedBy?: {
id?: number,
},
payload?: record,
rawJson?: record,
reason?: string,
source?: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
},
}POST /subscriptions 
create a blank subscription for testing purposes
Guard: admin
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,
},
}PUT /workouts/{workoutGuid} 
Updates a user workout
Guard: admin
Request Body
{
device?: {
app_version?: string,
model?: string,
os?: string,
os_version?: string,
},
peripheral?: List<{
data_points?: List<unknown>,
events?: List<{
timestamp?: number,
type?: 'resistance' | 'speed' | 'incline' | 'pause' | 'connection',
value?: number,
}>,
info?: {
firmware_version?: string,
hardware_version?: string,
model_id?: string,
},
metrics?: List<unknown>,
name?: string,
type?: 'bike' | 'rower' | 'treadmill' | 'hrm',
uuid?: string,
}>,
user?: {
id?: number,
subscription_active?: bool,
weight?: number,
},
workout?: {
class_library?: string,
end_date?: number,
events: List<{
msg: string,
timestamp?: number,
type?: 'started' | 'paused' | 'completed' | 'social',
user: number,
}>,
id?: string,
metadata?: {
desc?: string,
id?: number,
instructor?: string,
playlist_id?: number,
promo?: bool,
title?: string,
},
product_name?: string,
start_date?: number,
},
}GET /workouts/summaries 
Get all workouts
Response Body
{
data: List<{
classInformation?: {
desc?: string,
id?: number,
instructor?: string,
playlist_id?: number,
promo?: bool,
title?: string,
},
classLibrary?: string,
dateEnd?: number,
dateStart?: number,
productName?: string,
userId?: number,
workoutGuid?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total: {
pages?: number,
rows?: number,
},
},
}