Nest Changelog
1.32.3 PRE
7/6/2023
1.33.0 PRE
7/6/2023
31 changed endpoints Collapse changed endpoints
POST /webhooks/orders 
Request Body
{
customer?: {
email?: string,
firstName?: string,
lastName?: string,
},
initiatedBy: {
id?: number,
},
internalNote: string,
isFirstPeriodPrepaid?: bool,
offerGuid: string,
publicNote: string,
reason: {
code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
retailer?: {
orderCode?: string,
partner?: {
id?: number,
},
storeCode: string,
},
sourceName?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
utm: {
campaign: string,
content: string,
medium: string,
source: string,
term: string,
},
}POST /webhooks/orders 
Request Body
{
customer?: {
email?: string,
firstName?: string,
lastName?: string,
},
initiatedBy: {
id?: number,
},
internalNote: string,
isFirstPeriodPrepaid?: bool,
offerGuid: string,
publicNote: string,
reason: {
code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange',
message?: string,
},
retailer?: {
orderCode?: string,
partner?: {
id?: number,
},
storeCode: string,
},
+ shopifyPlanId: string,
sourceName?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free',
utm: {
campaign: string,
content: string,
medium: string,
source: string,
term: string,
},
}GET /users/{userId}/tabs 
Gets the tabs for a user based on their equipment
Response Body
{
data: List<{
code?: string,
description?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
text?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /users/{userId}/tabs 
Gets the tabs for a user based on their equipment
Response Body
{
data: List<{
code?: string,
description?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
text?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /shops 
Get a list of shops
Response Body
{
data: List<{
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
baseUrl?: string,
type?: 'shopify',
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /shops 
Get a list of shops
Response Body
{
data: List<{
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
+ accountCountry?: string,
baseUrl?: string,
type?: 'shopify',
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /shops 
Create a new shop
Request Body
{
country?: {
code?: string,
},
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
baseUrl?: string,
type?: 'shopify',
},
}Response Body
{
data: {
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
baseUrl?: string,
type?: 'shopify',
},
},
}POST /shops 
Create a new shop
Request Body
{
country?: {
code?: string,
},
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
+ accountCountry?: string,
baseUrl?: string,
type?: 'shopify',
},
}Response Body
{
data: {
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
+ accountCountry?: string,
baseUrl?: string,
type?: 'shopify',
},
},
}GET /shops/{id} 
Get a single shop by ID
Response Body
{
data: {
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
baseUrl?: string,
type?: 'shopify',
},
},
}GET /shops/{id} 
Get a single shop by ID
Response Body
{
data: {
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
+ accountCountry?: string,
baseUrl?: string,
type?: 'shopify',
},
},
}PATCH /shops/{id} 
Edit a shop
Request Body
{
country: {
code?: string,
},
name: string,
- vendor: {
- accessToken?: string,
- accountCode?: string,
- baseUrl?: string,
- type?: 'shopify',
},
}Response Body
{
data: {
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
baseUrl?: string,
type?: 'shopify',
},
},
}PATCH /shops/{id} 
Edit a shop
Request Body
{
country: {
code?: string,
},
name: string,
+ vendor?: {
+ accessToken: string,
+ accountCode: string,
+ accountCountry: string,
+ baseUrl: string,
+ type: 'shopify',
},
}Response Body
{
data: {
country?: {
code?: string,
currency?: {
code?: 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STD' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYI' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XOF' | 'XPF' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL',
scale?: number,
},
name?: string,
},
id?: number,
name?: string,
vendor?: {
accessToken?: string,
accountCode?: string,
+ accountCountry?: string,
baseUrl?: string,
type?: 'shopify',
},
},
}POST /collections/items 
Create a new Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}POST /collections/items 
Create a new Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}GET /collections/items/{guid} 
Get a collection by guid. Cached every 10 minutes.
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}GET /collections/items/{guid} 
Get a collection by guid. Cached every 10 minutes.
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}PATCH /collections/items/{guid} 
Update a Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}PATCH /collections/items/{guid} 
Update a Collection
Response Body
{
data: {
available?: {
end?: number,
start?: number,
},
badge?: {
eventCode?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
translations?: record,
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
durationDays?: number,
episodeWord?: string,
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
medium?: 'reflect' | 'standard',
name?: string,
planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
schedule?: List<{
contentGuid?: string,
guid?: string,
sortOrder?: number,
}>,
sortOrder?: number,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
totalCount?: number,
type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
updatedBy?: {
id?: number,
},
visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
},
}GET /content/library 
Search for content in the Library. Cache Policy: No cache.
Response Body
{
data: List<{
catalog?: {
audio?: 'labelMusic' | 'royaltyFree' | 'userProvided',
code?: string,
hasMusic?: bool,
},
contentGuid?: string,
countries?: List<{
code?: string,
}>,
dateLive?: number,
description?: string,
format?: {
code?: string,
},
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
legacy?: {
id?: number,
},
length?: number,
medium?: 'reflect' | 'standard',
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
playlistId?: number,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
userData?: {
favorite?: {
content?: bool,
},
workout?: {
status?: 'finished' | 'DNF',
},
},
}>,
embedded: {
aggregations?: {
durations?: List<{
count?: number,
text?: string,
value?: number,
}>,
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
tags?: List<{
buckets?: List<{
count?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
value?: string,
}>,
value?: string,
}>,
},
},
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/library 
Search for content in the Library. Cache Policy: No cache.
Response Body
{
data: List<{
catalog?: {
audio?: 'labelMusic' | 'royaltyFree' | 'userProvided',
code?: string,
hasMusic?: bool,
},
contentGuid?: string,
countries?: List<{
code?: string,
}>,
dateLive?: number,
description?: string,
format?: {
code?: string,
},
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
legacy?: {
id?: number,
},
length?: number,
medium?: 'reflect' | 'standard',
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
playlistId?: number,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
userData?: {
favorite?: {
content?: bool,
},
workout?: {
status?: 'finished' | 'DNF',
},
},
}>,
embedded: {
aggregations?: {
durations?: List<{
count?: number,
text?: string,
value?: number,
}>,
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
tags?: List<{
buckets?: List<{
count?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
value?: string,
}>,
value?: string,
}>,
},
},
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/library/upcoming 
Search for upcoming live or encore content in the Library. Cache Policy: No cache.
Response Body
{
data: List<{
catalog?: {
audio?: 'labelMusic' | 'royaltyFree' | 'userProvided',
code?: string,
hasMusic?: bool,
},
contentGuid?: string,
countries?: List<{
code?: string,
}>,
dateLive?: number,
description?: string,
format?: {
code?: string,
},
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
legacy?: {
id?: number,
},
length?: number,
medium?: 'reflect' | 'standard',
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
playlistId?: number,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
userData?: {
favorite?: {
content?: bool,
},
workout?: {
status?: 'finished' | 'DNF',
},
},
}>,
embedded: {
aggregations?: {
durations?: List<{
count?: number,
text?: string,
value?: number,
}>,
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
tags?: List<{
buckets?: List<{
count?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
value?: string,
}>,
value?: string,
}>,
},
},
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/library/upcoming 
Search for upcoming live or encore content in the Library. Cache Policy: No cache.
Response Body
{
data: List<{
catalog?: {
audio?: 'labelMusic' | 'royaltyFree' | 'userProvided',
code?: string,
hasMusic?: bool,
},
contentGuid?: string,
countries?: List<{
code?: string,
}>,
dateLive?: number,
description?: string,
format?: {
code?: string,
},
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
legacy?: {
id?: number,
},
length?: number,
medium?: 'reflect' | 'standard',
name?: string,
playback?: {
type?: 'hls' | 'dash',
url?: string,
},
playlistId?: number,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
userData?: {
favorite?: {
content?: bool,
},
workout?: {
status?: 'finished' | 'DNF',
},
},
}>,
embedded: {
aggregations?: {
durations?: List<{
count?: number,
text?: string,
value?: number,
}>,
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
tags?: List<{
buckets?: List<{
count?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
value?: string,
}>,
value?: string,
}>,
},
},
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/items 
Admin only. Get list of content items.
Response Body
{
data: List<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/items 
Admin only. Get list of content items.
Response Body
{
data: List<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}POST /content/items 
Create a content item
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}POST /content/items 
Create a content item
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /content/items/{guid} 
Get a specific content item. Cache Policy: Hot
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /content/items/{guid} 
Get a specific content item. Cache Policy: Hot
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}PATCH /content/items/{guid} 
Update a content item
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}PATCH /content/items/{guid} 
Update a content item
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}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,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
legacy?: {
id?: number,
},
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<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: 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,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
}>,
legacy?: {
id?: number,
},
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<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/tags 
List of tags. Cache Policy: 1 hour
Response Body
{
data: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/tags 
List of tags. Cache Policy: 1 hour
Response Body
{
data: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /content/tags/{value} 
Get one content tag by value. Cache Policy: 1 hour.
Response Body
{
data: {
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
},
}GET /content/tags/{value} 
Get one content tag by value. Cache Policy: 1 hour.
Response Body
{
data: {
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
}PUT /content/tags/{value} 
Create a New Tag
Request Body
{
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
}Response Body
{
data: {
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
},
}PUT /content/tags/{value} 
Create a New Tag
Request Body
{
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
}Response Body
{
data: {
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
}PATCH /content/tags/{value} 
Edit a tag
Request Body
{
modality: 'ride' | 'row' | 'run' | 'off' | 'all',
translations: record,
- type: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
}Response Body
{
data: {
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
},
}PATCH /content/tags/{value} 
Edit a tag
Request Body
{
modality: 'ride' | 'row' | 'run' | 'off' | 'all',
translations: record,
+ type: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
}Response Body
{
data: {
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
},
}GET /playlists 
Get a list of playlists
Response Body
{
data: List<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
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<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
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: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}POST /playlists 
Create a new playlist
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoLength?: {
id?: number,
name?: string,
},
},
}GET /playlists/{playlist} 
Get a single playlist by ID
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
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: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
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
{
catalog: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
videoLength: {
id?: number,
name?: string,
},
}Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
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
{
catalog: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoLength: {
id?: number,
name?: string,
},
}Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
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: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
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: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
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 /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: List<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
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<{
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
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?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoLength?: {
id?: number,
name?: string,
},
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /favorites/{userId}/items 
List users favorite content items.
Response Body
{
data: List<{
content?: {
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
bio?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>,
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
status?: 'active' | 'inactive',
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
user?: {
id?: number,
},
}>,
medium?: 'reflect' | 'standard',
name?: string,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
},
dateCreated?: number,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /favorites/{userId}/items 
List users favorite content items.
Response Body
{
data: List<{
content?: {
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
bio?: string,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
flags?: List<'connect' | 'reflect' | 'fitnation' | 'celebrity'>,
id?: number,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
name?: string,
status?: 'active' | 'inactive',
studio?: {
id?: number,
},
updatedBy?: {
id?: number,
},
user?: {
id?: number,
},
}>,
medium?: 'reflect' | 'standard',
name?: string,
scheduleGuid?: string,
status?: 'draft' | 'published' | 'trash',
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
},
dateCreated?: number,
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /legacy/{id}/content 
Get content for legacy class
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /legacy/{id}/content 
Get content for legacy class
Response Body
{
data: {
catalog?: {
code?: 'SpinCo' | 'LabelMusic' | 'RoyaltyFree' | 'Select' | 'Flex' | 'FlexLabelMusic' | 'FitPass' | 'FitPassLabelMusic' | 'InstructorAudioOnly' | 'Just' | 'Free',
},
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
duration?: number,
featuredRow?: string,
format?: {
code?: string,
},
guid?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
instructors?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
keywords?: string,
medium?: 'reflect' | 'standard',
name?: string,
playlist?: {
id?: number,
},
schedule?: List<{
available?: {
end?: number,
live?: number,
start?: number,
},
content?: {
guid?: string,
},
guid?: string,
legacy?: {
id?: number,
type?: 'reflect' | 'connect',
},
playback?: List<{
type?: 'hls' | 'dash',
url?: string,
}>,
type?: 'live' | 'vod' | 'encore' | 'rebroadcast',
}>,
sortOrder?: number,
sourceUrl?: string,
sourceVideo?: {
type?: 'hls' | 'dash',
url?: string,
},
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
precedence?: number,
}>,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
value?: number,
},
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}POST /strength-routine/movement/items 
Producer and above only. Create a new strength routine movement
Response Body
{
data: {
- createdBy?: number,
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}POST /strength-routine/movement/items 
Producer and above only. Create a new strength routine movement
Response Body
{
data: {
+ createdBy?: {
+ id?: number,
+ },
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}GET /strength-routine/movement/items 
List strength routine movements. Paginated.
Response Body
{
data: List<{
- createdBy?: number,
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}GET /strength-routine/movement/items 
List strength routine movements. Paginated.
Response Body
{
data: List<{
+ createdBy?: {
+ id?: number,
+ },
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
}>,
pagination: {
page?: number,
skip?: number,
take?: number,
total?: {
pages?: number,
rows?: number,
},
},
}PATCH /strength-routine/movement/items/{guid} 
Admin only. Edit a specific strength routine movement
Response Body
{
data: {
- createdBy?: number,
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
- type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}PATCH /strength-routine/movement/items/{guid} 
Admin only. Edit a specific strength routine movement
Response Body
{
data: {
+ createdBy?: {
+ id?: number,
+ },
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
translations?: record,
+ type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
}2 added endpoints Collapse added endpoints
POST /strength-routine/items 
Create a new strength routine.
Guard: loggedIn
Request Body
{
circuit?: bool,
description: string,
duration: number,
name?: string,
routineMovements: List<{
duration: number,
mode?: 'standard' | 'interval',
movement?: {
guid?: string,
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
}Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}GET /strength-routine/items/{guid} 
Load an individual strength routine by guid.
Guard: loggedIn
Response Body
{
data: {
circuit?: bool,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
duration?: number,
guid?: string,
modifiedBy?: number,
name?: string,
routineMovements?: List<{
duration?: number,
mode?: 'standard' | 'interval',
movement?: {
createdBy?: {
id?: number,
},
dateCreated?: number,
dateModified?: number,
description?: string,
guid?: string,
name?: string,
tags?: List<{
description?: string,
images?: {
default?: string,
hd?: string,
portrait?: string,
sd?: string,
square?: string,
},
modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
text?: string,
type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus' | 'muscleGroup',
value?: string,
}>,
videoStatus?: 'uninitiated' | 'uploadStarted' | 'uploadCompleted' | 'processingStarted' | 'processingCompleted' | 'processingFailed',
},
restAfter?: number,
restBetweenSets?: number,
sets?: List<{
description?: string,
interval?: {
duration?: number,
},
reps?: List<{
description?: string,
restAfter?: number,
weight?: number,
}>,
}>,
}>,
visibility?: 'public' | 'private',
},
}