Nest Changelog
1.1.32
4/22/2022
1.1.33
5/3/2022
39 changed endpoints Collapse changed endpoints
GET /users 
Get all users
Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}GET /users 
Get all users
Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
+ tagline?: string,
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
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,
email?: string,
firstName: string,
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,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}POST /users 
Request Body
{
billingAddress: {
city: string,
country: {
code?: string,
},
postalCode: string,
region: {
code?: string,
},
streetLine1: string,
streetLine2: string,
},
birthdate: string,
email?: string,
firstName: string,
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,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
+ tagline: string,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
+ tagline?: string,
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}GET /users/{userId} 
Get a specific user by id
Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}GET /users/{userId} 
Get a specific user by id
Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
+ tagline?: string,
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}PATCH /users/{userId} 
Edit this user
Request Body
{
billingAddress: {
city: string,
country: {
code?: string,
},
postalCode: string,
region: {
code?: string,
},
streetLine1: string,
streetLine2: string,
},
birthdate: string,
email: string,
firstName: string,
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,
},
phoneNumber: string,
purchaseHistory: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}PATCH /users/{userId} 
Edit this user
Request Body
{
billingAddress: {
city: string,
country: {
code?: string,
},
postalCode: string,
region: {
code?: string,
},
streetLine1: string,
streetLine2: string,
},
birthdate: string,
email: string,
firstName: string,
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,
},
phoneNumber: string,
purchaseHistory: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
+ tagline: string,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
+ tagline?: string,
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}GET /users/{userId}/family 
Get child accounts of this user
Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
}GET /users/{userId}/family 
Get child accounts of this user
Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
+ tagline?: string,
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
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,
email?: string,
firstName: string,
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,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
embedded: {
jwt?: string,
},
}POST /users/{userId}/family 
Request Body
{
billingAddress: {
city: string,
country: {
code?: string,
},
postalCode: string,
region: {
code?: string,
},
streetLine1: string,
streetLine2: string,
},
birthdate: string,
email?: string,
firstName: string,
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,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
+ tagline: string,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}Response Body
{
data: {
billingAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
birthdate: string,
createdBy?: {
id?: number,
},
dateActivated?: number,
dateCreated?: number,
dateUpdated?: number,
email?: string,
firstName?: string,
gender?: {
text: string,
value?: 'm' | 'f' | 'o',
},
height?: {
text?: string,
units?: 'in' | 'cm',
value?: number,
},
id?: number,
image?: {
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,
},
phoneNumber?: string,
purchaseHistory?: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles?: List<string>,
stripe?: {
customerId?: string,
},
+ tagline?: string,
updatedBy?: {
id?: number,
},
weight?: {
text?: string,
units?: 'lb' | 'kg',
value?: number,
},
},
embedded: {
jwt?: string,
},
}GET /plans 
Get all Plans
Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProviders?: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}GET /plans 
Get all Plans
Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProviders?: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | '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,
}>,
billingProviders?: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country?: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image?: {
data?: string,
filename?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
}Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProviders?: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}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,
},
},
}PATCH /plans 
Update plans in bulk.
Request Body
{
data?: {
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
billingProviders: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays: number,
description: string,
family: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image: {
data?: string,
filename?: string,
},
musicRights: {
productId?: string,
vendor?: 'audibleMagic',
},
name: string,
sku: string,
sortOrder: number,
sources: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
},
image: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
where?: {
countryCode: string,
ids: List<number>,
},
}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>,
},
}GET /plans/{id} 
Get Plan by id
Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProviders?: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}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,
},
},
}PATCH /plans/{id} 
Update Plan
Request Body
{
basePrice: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits: List<{
text?: string,
}>,
billingProviders: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country: {
code?: string,
id?: number,
},
defaultTrial: {
units?: 'day',
value?: number,
},
delayBillingDays: number,
description: string,
family: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency: {
units?: 'month',
value?: number,
},
frequencyDays: number,
image: {
data?: string,
filename?: string,
},
musicRights: {
productId?: string,
vendor?: 'audibleMagic',
},
name: string,
sku: string,
sortOrder: number,
sources: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
}Response Body
{
data: {
basePrice?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
value?: number,
},
benefits?: List<{
text?: string,
}>,
billingProviders?: List<{
accountId?: string,
name?: 'stripe' | 'ios' | 'android' | 'amazon',
priceId?: string,
productId?: string,
}>,
country?: {
code?: string,
id?: number,
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
defaultTrial?: {
units?: 'day',
value?: number,
},
delayBillingDays?: number,
description?: string,
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
units?: 'month',
value?: number,
},
frequencyDays?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
musicRights?: {
productId?: string,
vendor?: 'audibleMagic',
},
name?: string,
sku?: string,
sortOrder?: number,
sources?: List<{
accountId?: string,
name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
productId?: string,
}>,
tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>,
updatedBy?: {
id?: number,
},
},
}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,
},
},
}POST /auth 
Sign in with email address and password
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?: {
features?: record,
id?: number,
name?: string,
},
userId?: number,
},
}POST /auth 
Sign in with email address and password
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,
},
}GET /auth/{sessionGuid} 
Refresh the token
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?: {
features?: record,
id?: number,
name?: string,
},
userId?: number,
},
}GET /auth/{sessionGuid} 
Refresh the token
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 /auth/upgrade 
Trade in your token from the legacy token for a session
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?: {
features?: record,
id?: number,
name?: string,
},
userId?: number,
},
}POST /auth/upgrade 
Trade in your token from the legacy token for a session
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 /auth/commercial 
Authenticate a single commercial piece of equipment
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?: {
features?: record,
id?: number,
name?: string,
},
userId?: number,
},
}POST /auth/commercial 
Authenticate a single commercial piece of equipment
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,
},
}GET /studios 
Get a list of all studios
Response Body
{
data: {
code?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
id?: number,
name?: string,
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}GET /studios 
Get a list of all studios
Response Body
{
data: {
code?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
streetAddress?: {
city?: string,
country?: {
code?: string,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}POST /studios 
Create new 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,
},
},
}POST /studios 
Create new 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,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
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,
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,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}PATCH /studios/{id} 
Edit 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,
},
},
}PATCH /studios/{id} 
Edit 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,
+ currency?: {
+ code?: string,
+ scale?: number,
+ symbol?: string,
+ },
+ dateCreated?: number,
+ dateUpdated?: number,
id?: number,
+ mediaNet?: {
+ code?: string,
+ territoryId?: number,
+ },
name?: string,
+ numberFormat?: {
+ decimalSeparator?: '.' | ',' | ' ',
+ thousandsSeparator?: '.' | ',' | ' ',
+ },
+ stripe?: {
+ id?: number,
+ },
},
postalCode?: string,
region?: {
code?: string,
name?: string,
},
streetLine1?: string,
streetLine2?: string,
},
updatedBy?: {
id?: number,
},
},
}GET /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: {
- content?: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
isFlagged?: bool,
name?: string,
},
}GET /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: {
+ countries?: List<{
+ code?: string,
+ }>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged?: bool,
name?: string,
+ schedule?: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
+ id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
+ },
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
},
}GET /playlists 
Get a list of playlists
Response Body
{
data: {
- content?: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
isFlagged?: bool,
name?: string,
},
}GET /playlists 
Get a list of playlists
Response Body
{
data: {
+ countries?: List<{
+ code?: string,
+ }>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged?: bool,
name?: string,
+ schedule?: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
+ id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
+ },
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
},
}POST /playlists 
Create a new playlist
Request Body
{
name?: string,
}Response Body
{
data: {
- content?: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
isFlagged?: bool,
name?: string,
},
}POST /playlists 
Create a new playlist
Request Body
{
+ countries?: List<{
+ code?: string,
+ }>,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
name?: string,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
}Response Body
{
data: {
+ countries?: List<{
+ code?: string,
+ }>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged?: bool,
name?: string,
+ schedule?: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
+ id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
+ },
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
},
}GET /playlists/{playlist} 
Get a single playlist by ID
Response Body
{
data: {
- content?: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
isFlagged?: bool,
name?: string,
- tracks?: List<{
- createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
- playlist?: {
- id?: number,
- },
song?: {
id?: number,
},
trackOrder?: number,
}>,
},
}GET /playlists/{playlist} 
Get a single playlist by ID
Response Body
{
data: {
+ countries?: List<{
+ code?: string,
+ }>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged?: bool,
name?: string,
+ schedule?: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
},
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ tracks?: List<{
dateCreated?: number,
flag?: string,
song?: {
+ album?: {
+ id?: number,
+ name?: string,
+ },
+ artists?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ coverArtUrl?: string,
+ duration?: {
+ seconds: number,
+ text: string,
+ },
+ genres?: List<string>,
id?: number,
+ isExplicit?: bool,
+ isrc?: string,
+ label?: {
+ id?: number,
+ name?: string,
+ },
+ labelOwner?: {
+ id?: number,
+ name?: string,
+ },
+ name?: string,
+ publisherRights?: List<string>,
+ releaseDate?: number,
},
trackOrder?: number,
}>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
},
}PATCH /playlists/{id} 
Update an existing playlist
Request Body
{
- content: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy: {
id?: number,
},
dateCreated: number,
dateUpdated: number,
id: number,
isFlagged: bool,
name: string,
}Response Body
{
data: {
- content?: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
isFlagged?: bool,
name?: string,
},
}PATCH /playlists/{id} 
Update an existing playlist
Request Body
{
+ countries: List<{
+ code?: string,
+ }>,
createdBy: {
id?: number,
},
dateCreated: number,
dateUpdated: number,
id: number,
+ instructors: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged: bool,
name: string,
+ schedule: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
+ id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
+ },
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios: List<{
+ id?: number,
+ name?: string,
+ }>,
+ videoLength: {
+ id?: number,
+ name?: string,
+ },
}Response Body
{
data: {
+ countries?: List<{
+ code?: string,
+ }>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged?: bool,
name?: string,
+ schedule?: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
+ id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
+ },
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
},
}POST /playlists/{playlist}/import 
Import all songs from a playlist to another playlist
Response Body
{
data: {
- content?: {
- countries: List<{
- code?: string,
- }>,
- createdBy: {
- id?: number,
- },
- dateCreated: number,
- dateUpdated: number,
- description: string,
- guid: string,
- image: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- instructors: List<{
- id?: number,
- name?: string,
- }>,
- keywords: List<string>,
- name: string,
- playlist: {
- id?: number,
- name?: string,
- },
- schedule: List<{
- available?: {
- end?: number,
- live?: number,
- start?: number,
- },
- contentGuid?: string,
- duration: number,
- guid?: string,
- legacy: {
- hlsUrl?: string,
- id?: number,
- liveStreamId?: number,
- type?: 'reflect' | 'connect',
- },
- type?: 'live' | 'vod' | 'encore',
- }>,
- status: 'draft' | 'published',
- studios: List<{
- id?: number,
- name?: string,
- }>,
- tags: List<{
- image?: {
- default: string,
- large: string,
- medium: string,
- small: string,
- url?: string,
- },
- text?: string,
- translations: record,
- type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level',
- value?: string,
- }>,
- updatedBy: {
- id?: number,
- },
- videoLength: {
- id?: number,
- name?: string,
- },
- },
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
isFlagged?: bool,
name?: string,
- tracks?: List<{
- createdBy?: {
id?: number,
},
dateCreated?: number,
flag?: string,
- playlist?: {
- id?: number,
- },
song?: {
id?: number,
},
trackOrder?: number,
}>,
},
}POST /playlists/{playlist}/import 
Import all songs from a playlist to another playlist
Response Body
{
data: {
+ countries?: List<{
+ code?: string,
+ }>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
+ instructors?: List<{
+ id?: number,
+ name?: string,
+ }>,
isFlagged?: bool,
name?: string,
+ schedule?: List<{
+ available?: {
+ end?: number,
+ live?: number,
+ start?: number,
+ },
+ contentGuid?: string,
+ duration: number,
+ guid?: string,
+ legacy: {
+ hlsUrl?: string,
id?: number,
+ liveStreamId?: number,
+ type?: 'reflect' | 'connect',
},
+ type?: 'live' | 'vod' | 'encore',
+ }>,
+ studios?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ tracks?: List<{
dateCreated?: number,
flag?: string,
song?: {
+ album?: {
+ id?: number,
+ name?: string,
+ },
+ artists?: List<{
+ id?: number,
+ name?: string,
+ }>,
+ coverArtUrl?: string,
+ duration?: {
+ seconds: number,
+ text: string,
+ },
+ genres?: List<string>,
id?: number,
+ isExplicit?: bool,
+ isrc?: string,
+ label?: {
+ id?: number,
+ name?: string,
+ },
+ labelOwner?: {
+ id?: number,
+ name?: string,
+ },
+ name?: string,
+ publisherRights?: List<string>,
+ releaseDate?: number,
},
trackOrder?: number,
}>,
+ videoLength?: {
+ id?: number,
+ name?: string,
+ },
},
}PUT /workouts/{workoutGuid} 
Updates a user workout
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: record,
}>,
id?: string,
metadata?: {
desc?: string,
id?: number,
instructor?: string,
playlist_id?: number,
promo?: bool,
title?: string,
},
product_name?: string,
start_date?: number,
},
}PUT /workouts/{workoutGuid} 
Updates a user workout
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 /campaigns/{guid}/offers 
Get a list of offers available for this campaign.
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /campaigns/{guid}/offers 
Get a list of offers available for this campaign.
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /retailers/{id}/offers 
Get a list of offers that this retailer should have.
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /retailers/{id}/offers 
Get a list of offers that this retailer should have.
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}POST /offers 
Create a new offer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}POST /offers 
Create a new offer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /offers 
Get all offers
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /offers 
Get all offers
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /offers/{guid} 
Get a specific offer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /offers/{guid} 
Get a specific offer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}PATCH /offers/{guid} 
Edit an offer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}PATCH /offers/{guid} 
Edit an offer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /partners/{id}/offers 
Get a list of offers available for this specific partner/retailer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
- code?: 'premier' | 'select' | 'flex' | 'fitpass',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}GET /partners/{id}/offers 
Get a list of offers available for this specific partner/retailer
Response Body
{
data: {
createdBy?: {
id?: number,
},
dateCreated?: number,
delayBilling?: {
days?: number,
text?: string,
type?: 'trial' | 'bundle',
},
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
introductory?: {
days?: number,
price?: number,
stripeCouponId?: string,
text?: string,
},
name?: string,
plan?: {
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
family?: {
brands?: List<'echelon' | 'fitnation' | 'fitquest'>,
+ code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free',
type?: 'connected' | 'disconnected',
},
frequency?: {
days?: number,
},
id?: number,
lineItems: List<{
text?: string,
}>,
name: string,
},
recurring?: {
price?: number,
stripePriceId?: string,
text?: string,
},
status?: 'draft' | 'published',
},
}6 added endpoints Collapse added endpoints
GET /countries 
Get a list of countries
Response Body
{
data: {
code?: string,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
mediaNet?: {
code?: string,
territoryId?: number,
},
name?: string,
numberFormat?: {
decimalSeparator?: '.' | ',' | ' ',
thousandsSeparator?: '.' | ',' | ' ',
},
stripe?: {
id?: number,
},
},
}POST /countries 
Create a new country
Guard: admin
Request Body
{
code?: string,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
mediaNet?: {
code?: string,
territoryId?: number,
},
name?: string,
numberFormat?: {
decimalSeparator?: '.' | ',' | ' ',
thousandsSeparator?: '.' | ',' | ' ',
},
stripe?: {
id?: number,
},
}Response Body
{
data: {
code?: string,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
mediaNet?: {
code?: string,
territoryId?: number,
},
name?: string,
numberFormat?: {
decimalSeparator?: '.' | ',' | ' ',
thousandsSeparator?: '.' | ',' | ' ',
},
stripe?: {
id?: number,
},
},
}GET /countries/{id} 
Get a single country by ID
Response Body
{
data: {
code?: string,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
mediaNet?: {
code?: string,
territoryId?: number,
},
name?: string,
numberFormat?: {
decimalSeparator?: '.' | ',' | ' ',
thousandsSeparator?: '.' | ',' | ' ',
},
stripe?: {
id?: number,
},
},
}PATCH /countries/{id} 
Edit a country
Guard: admin
Request Body
{
code: string,
currency: {
code?: string,
scale?: number,
symbol?: string,
},
mediaNet: {
code?: string,
territoryId?: number,
},
name: string,
numberFormat: {
decimalSeparator?: '.' | ',' | ' ',
thousandsSeparator?: '.' | ',' | ' ',
},
stripe: {
id?: number,
},
}Response Body
{
data: {
code?: string,
currency?: {
code?: string,
scale?: number,
symbol?: string,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
mediaNet?: {
code?: string,
territoryId?: number,
},
name?: string,
numberFormat?: {
decimalSeparator?: '.' | ',' | ' ',
thousandsSeparator?: '.' | ',' | ' ',
},
stripe?: {
id?: number,
},
},
}