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