Nest Changelog
1.16.4
2/24/2023
1.17.0 PRE
2/20/2023
36 changed endpoints Collapse changed endpoints
POST /webhooks/subscription-created
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number, initiatedBy: { id?: number, }, internalNote: string, orderCode?: string,publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, renewedAt?: number, sourceCode?: string, sourceType?: 'stripe' | 'apple' | 'google' | 'amazon', sourceUserCode?: string, status?: string, }
POST /webhooks/subscription-created
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number, initiatedBy: { id?: number, }, internalNote: string, orderCode?: string, + planId?: string, publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, renewedAt?: number, sourceCode?: string, sourceType?: 'stripe' | 'apple' | 'google' | 'amazon', sourceUserCode?: string, status?: string, }
POST /webhooks/subscription-deleted
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number, initiatedBy: { id?: number, }, internalNote: string, orderCode?: string,publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, renewedAt?: number, sourceCode?: string, sourceType?: 'stripe' | 'apple' | 'google' | 'amazon', sourceUserCode?: string, status?: string, }
POST /webhooks/subscription-deleted
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number, initiatedBy: { id?: number, }, internalNote: string, orderCode?: string, + planId?: string, publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, renewedAt?: number, sourceCode?: string, sourceType?: 'stripe' | 'apple' | 'google' | 'amazon', sourceUserCode?: string, status?: string, }
POST /webhooks/subscription-updated
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number, initiatedBy: { id?: number, }, internalNote: string, orderCode?: string,publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, renewedAt?: number, sourceCode?: string, sourceType?: 'stripe' | 'apple' | 'google' | 'amazon', sourceUserCode?: string, status?: string, }
POST /webhooks/subscription-updated
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number, initiatedBy: { id?: number, }, internalNote: string, orderCode?: string, + planId?: string, publicNote: string, reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other' | 'planChange', message?: string, }, renewedAt?: number, sourceCode?: string, sourceType?: 'stripe' | 'apple' | 'google' | 'amazon', sourceUserCode?: string, status?: 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<{text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, text?: string, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
POST /offers
Create a new offer
Request Body
{ billingProvider: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, 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, }, delayBilling: { days?: number, text?: string, type?: 'trial' | 'bundle', }, frequencyDays: number, introductory: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, models?: List<number>, name?: string, plan?: { id?: number, }, planNameOverride: string, recurring?: {- price?: number,stripePriceId: string, text?: string, }, status?: 'draft' | 'published', }
POST /offers
Create a new offer
Request Body
{ billingProvider: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, 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, }, delayBilling: { days?: number, text?: string, type?: 'trial' | 'bundle', }, frequencyDays: number, introductory: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, models?: List<number>, name?: string, plan?: { id?: number, }, planNameOverride: string, recurring?: {+ price: number, stripePriceId: string, text?: string, }, status?: 'draft' | 'published', }
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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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 /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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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, }, }, }
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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', 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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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' | 'healthFocus' | '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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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 /content/library
Search for content in the Library
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<{text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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
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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, 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
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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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
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' | 'healthFocus' | '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, }, }, }
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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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
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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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
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' | 'healthFocus' | '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<{modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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/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<{text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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' | 'healthFocus' | '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/tags
List of tags
Response Body
{ data: List<{ description?: string,modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | '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
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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /content/tags/{value}
Get one content tag by value.
Response Body
{ data: {modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }, }
GET /content/tags/{value}
Get one content tag by value.
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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }, }
PUT /content/tags/{value}
Create a New Tag
Response Body
{ data: {modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }, }
PUT /content/tags/{value}
Create a New Tag
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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }, }
PATCH /content/tags/{value}
Edit a tag
Response Body
{ data: {modality?: 'ride' | 'row' | 'run' | 'off' | 'all', translations?: record, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }, }
PATCH /content/tags/{value}
Edit a tag
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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }, }
POST /collections/items
Create a new Collection
Response Body
{ data: { available?: { end?: number, start?: number, }, badge?: { guid?: string, }, countries?: List<{ code?: string, sortOrder: number, }>, 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<{ guid?: string, sortOrder?: number, }>, sortOrder?: number, tags?: List<{ description?: string,modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', 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?: { guid?: string, }, countries?: List<{ code?: string, sortOrder: number, }>, 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<{ 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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', 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?: { guid?: string, }, countries?: List<{ code?: string, sortOrder: number, }>, 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<{ guid?: string, sortOrder?: number, }>, sortOrder?: number, tags?: List<{ description?: string,modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', 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?: { guid?: string, }, countries?: List<{ code?: string, sortOrder: number, }>, 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<{ 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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', 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?: { guid?: string, }, countries?: List<{ code?: string, sortOrder: number, }>, 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<{ guid?: string, sortOrder?: number, }>, sortOrder?: number, tags?: List<{ description?: string,modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', 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?: { guid?: string, }, countries?: List<{ code?: string, sortOrder: number, }>, 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<{ 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' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }
POST /workouts/process
Process workout - Internal use only
Request Body
{ rideIndex?: { appversion: string, avgcadence: number, avgresistance: number, classimage: string, classname: string, datecreated: number, device: string, dnf: bool, finalrank: number, incline: number, instanceuuid?: string, instructorname: string, iscomplete: bool, osversion: string, rideid: number, ridetype?: string, source: string, totalcalories: number, totaldistance: number, totalhrpoints: number, totaloutput: number, totalriders: number, userid?: number, }, rideIndexById?: { appversion: string, avgcadence: number, avgheartrate: number, avgresistance: number, classimage: string, classname: string, device: string, dnf: bool, duration: number, encore: bool, finalrank: number, incline: number, instanceuuid?: string, instructorname: string, iscomplete: bool, osversion: string, rideid: number, ridetype: string, source: string, totalcalories: number, totaldistance: number, totalhrpoints: number, totaloutput: number, totalriders: number, userid: number, }, workoutEntity?: {commercialCode?: string, completion?: number, contentDuration?: number, contentGuid?: string, dateDeleted?: number, dateEnd?: number, dateStart?: number, duration?: number, format?: string, guid?: string, output?: number, rankingPlace?: number, rankingTotal?: number, stats?: record, type?: 'live' | 'vod' | 'encore' | 'freestyle', userId?: number, }, }
POST /workouts/process
Process workout - Internal use only
Request Body
{ rideIndex?: { appversion: string, avgcadence: number, avgresistance: number, classimage: string, classname: string, datecreated: number, device: string, dnf: bool, finalrank: number, incline: number, instanceuuid?: string, instructorname: string, iscomplete: bool, osversion: string, rideid: number, ridetype?: string, source: string, totalcalories: number, totaldistance: number, totalhrpoints: number, totaloutput: number, totalriders: number, userid?: number, }, rideIndexById?: { appversion: string, avgcadence: number, avgheartrate: number, avgresistance: number, classimage: string, classname: string, device: string, dnf: bool, duration: number, encore: bool, finalrank: number, incline: number, instanceuuid?: string, instructorname: string, iscomplete: bool, osversion: string, rideid: number, ridetype: string, source: string, totalcalories: number, totaldistance: number, totalhrpoints: number, totaloutput: number, totalriders: number, userid: number, }, workoutEntity?: { + buffering?: number, commercialCode?: string, completion?: number, contentDuration?: number, contentGuid?: string, dateDeleted?: number, dateEnd?: number, dateStart?: number, duration?: number, format?: string, guid?: string, output?: number, rankingPlace?: number, rankingTotal?: number, stats?: record, type?: 'live' | 'vod' | 'encore' | 'freestyle', userId?: number, }, }
6 added endpoints Collapse added endpoints
GET /offers/partners/{partnerId}
Get a list of offers available for this specific partner/retailer
Response Body
{ data: List<{ billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, 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, }, createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, frequencyDays?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, metadata?: { bannerText?: string, }, models?: List<number>, name?: string, partners?: List<{ metadata?: record, offer?: { guid?: string, }, partner?: { id?: number, }, sortOrder?: number, }>, plan?: { basePrice?: { 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, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, priceCode?: string, productCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, 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, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, emailTemplateId?: number, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { units?: 'month', value?: number, }, frequencyDays?: number, id?: number, name?: string, sku?: string, sortOrder?: number, source?: { accountId?: string, productId?: string, type?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', }, tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy?: { id?: number, }, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, sortOrder?: number, status?: 'draft' | 'published', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /partners/{id}/offers
Get a list of offers available for this specific partner/retailer
Response Body
{ data: List<{ billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, 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, }, createdBy?: { id?: number, }, dateCreated?: number, delayBilling?: { days?: number, text?: string, type?: 'trial' | 'bundle', }, frequencyDays?: number, guid?: string, image?: { default: string, large: string, medium: string, small: string, url?: string, }, introductory?: { days?: number, price?: number, stripeCouponId?: string, text?: string, }, models?: List<number>, name?: string, partners?: List<{ metadata?: record, offer?: { guid?: string, }, partner?: { id?: number, }, sortOrder?: number, }>, plan?: { basePrice?: { 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, }, value?: number, }, benefits?: List<{ text?: string, }>, billingProvider?: { id?: number, metadata?: { avaTaxIntegration?: bool, }, name?: string, organizationCode?: string, priceCode?: string, productCode?: string, type?: 'stripe' | 'apple' | 'google' | 'amazon', }, 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, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, defaultTrial?: { units?: 'day', value?: number, }, delayBillingDays?: number, description?: string, emailTemplateId?: number, family?: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', type?: 'connected' | 'disconnected', }, frequency?: { units?: 'month', value?: number, }, frequencyDays?: number, id?: number, name?: string, sku?: string, sortOrder?: number, source?: { accountId?: string, productId?: string, type?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', }, tags?: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy?: { id?: number, }, }, recurring?: { price?: number, stripePriceId?: string, text?: string, }, status?: 'draft' | 'published', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }