Nest Changelog
1.2.2
7/27/2022
1.3.0
8/4/2022
13 changed endpoints Collapse changed endpoints
POST /webhooks/invoice-upcoming
Request Body
{ amountDue?: number, amountPaid?: number, amountTotal?: number, attemptCount?: number, attempted?: bool, billingProviderId?: string,- billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual',currencyCode?: string, dateCreated?: number, dateNextAttempt?: number, datePeriodEnd?: number, datePeriodStart?: number,
- initiatedBy?: {id?: number, },
- internalNote?: string,isAutomaticCollection?: bool, isManualPayment?: bool, isPaid?: bool,
- publicNote?: string, - reason?: {code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, status?: string, }
POST /webhooks/invoice-upcoming
Request Body
{ amountDue?: number, amountPaid?: number, amountTotal?: number, attemptCount?: number, attempted?: bool, billingProviderId?: string,+ billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming', currencyCode?: string, dateCreated?: number, dateNextAttempt?: number, datePeriodEnd?: number, datePeriodStart?: number,
+ initiatedBy: { id?: number, },
+ internalNote: string, isAutomaticCollection?: bool, isManualPayment?: bool, isPaid?: bool,
+ publicNote: string, + reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, status?: string, }
POST /webhooks/invoice-paid
Request Body
{ amountDue?: number, amountPaid?: number, amountTotal?: number, attemptCount?: number, attempted?: bool, billingProviderId?: string,- billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual',currencyCode?: string, dateCreated?: number, dateNextAttempt?: number, datePeriodEnd?: number, datePeriodStart?: number,
- initiatedBy?: {id?: number, },
- internalNote?: string,isAutomaticCollection?: bool, isManualPayment?: bool, isPaid?: bool,
- publicNote?: string, - reason?: {code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, status?: string, }
POST /webhooks/invoice-paid
Request Body
{ amountDue?: number, amountPaid?: number, amountTotal?: number, attemptCount?: number, attempted?: bool, billingProviderId?: string,+ billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming', currencyCode?: string, dateCreated?: number, dateNextAttempt?: number, datePeriodEnd?: number, datePeriodStart?: number,
+ initiatedBy: { id?: number, },
+ internalNote: string, isAutomaticCollection?: bool, isManualPayment?: bool, isPaid?: bool,
+ publicNote: string, + reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, status?: string, }
POST /webhooks/payment-failure
Request Body
{ amountDue?: number, amountPaid?: number, amountTotal?: number, attemptCount?: number, attempted?: bool, billingProviderId?: string,- billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual',currencyCode?: string, dateCreated?: number, dateNextAttempt?: number, datePeriodEnd?: number, datePeriodStart?: number,
- initiatedBy?: {id?: number, },
- internalNote?: string,isAutomaticCollection?: bool, isManualPayment?: bool, isPaid?: bool,
- publicNote?: string, - reason?: {code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, status?: string, }
POST /webhooks/payment-failure
Request Body
{ amountDue?: number, amountPaid?: number, amountTotal?: number, attemptCount?: number, attempted?: bool, billingProviderId?: string,+ billingReason?: 'subscriptionRenewed' | 'subscriptionCreate' | 'subscriptionChanged' | 'manual' | 'subscriptionRenewalUpcoming', currencyCode?: string, dateCreated?: number, dateNextAttempt?: number, datePeriodEnd?: number, datePeriodStart?: number,
+ initiatedBy: { id?: number, },
+ internalNote: string, isAutomaticCollection?: bool, isManualPayment?: bool, isPaid?: bool,
+ publicNote: string, + reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, status?: string, }
POST /webhooks/subscription-created
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number,- initiatedBy?: {id?: number, },
- internalNote?: string,orderId?: string, plan?: { basePrice: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits: List<{ text?: string, }>, billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, defaultTrial: { units?: 'day', value?: number, }, delayBillingDays: number, description: string, family: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, id: number, image: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy: { id?: number, }, },
- publicNote?: string, - reason?: {code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, },
- renewedAt: number, - shopifyCustomerId?: string, - sourceId?: number,sourceName?: 'stripe' | 'ios' | 'android' | 'amazon', sourceUserId?: string, status?: string, }
POST /webhooks/subscription-created
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number,+ initiatedBy: { id?: number, },
+ internalNote: string, orderId?: string, plan?: { basePrice: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits: List<{ text?: string, }>, billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, defaultTrial: { units?: 'day', value?: number, }, delayBillingDays: number, description: string, family: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, id: number, image: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy: { id?: number, }, },
+ publicNote: string, + reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, },
+ renewedAt?: number, + shopifyCustomerId: string, + sourceId?: string, sourceName?: 'stripe' | 'ios' | 'android' | 'amazon', sourceUserId?: string, status?: string, }
POST /webhooks/subscription-deleted
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number,- initiatedBy?: {id?: number, },
- internalNote?: string,orderId?: string, plan?: { basePrice: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits: List<{ text?: string, }>, billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, defaultTrial: { units?: 'day', value?: number, }, delayBillingDays: number, description: string, family: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, id: number, image: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy: { id?: number, }, },
- publicNote?: string, - reason?: {code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, },
- renewedAt: number, - shopifyCustomerId?: string, - sourceId?: number,sourceName?: 'stripe' | 'ios' | 'android' | 'amazon', sourceUserId?: string, status?: string, }
POST /webhooks/subscription-deleted
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number,+ initiatedBy: { id?: number, },
+ internalNote: string, orderId?: string, plan?: { basePrice: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits: List<{ text?: string, }>, billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, defaultTrial: { units?: 'day', value?: number, }, delayBillingDays: number, description: string, family: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, id: number, image: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy: { id?: number, }, },
+ publicNote: string, + reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, },
+ renewedAt?: number, + shopifyCustomerId: string, + sourceId?: string, sourceName?: 'stripe' | 'ios' | 'android' | 'amazon', sourceUserId?: string, status?: string, }
POST /webhooks/subscription-updated
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number,- initiatedBy?: {id?: number, },
- internalNote?: string,orderId?: string, plan?: { basePrice: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits: List<{ text?: string, }>, billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, defaultTrial: { units?: 'day', value?: number, }, delayBillingDays: number, description: string, family: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, id: number, image: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy: { id?: number, }, },
- publicNote?: string, - reason?: {code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, },
- renewedAt: number, - shopifyCustomerId?: string, - sourceId?: number,sourceName?: 'stripe' | 'ios' | 'android' | 'amazon', sourceUserId?: string, status?: string, }
POST /webhooks/subscription-updated
Request Body
{ billingCycleAnchor?: number, createdAt?: number, dateCancelled?: number, dateExpire?: number, datePausedUntil?: number, dateStart?: number, dateTrialEnd?: number, dateTrialStart?: number,+ initiatedBy: { id?: number, },
+ internalNote: string, orderId?: string, plan?: { basePrice: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, benefits: List<{ text?: string, }>, billingProviders: List<{ accountId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', priceId?: string, productId?: string, }>, country: { code?: string, id?: number, }, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, defaultTrial: { units?: 'day', value?: number, }, delayBillingDays: number, description: string, family: { brands?: List<'echelon' | 'fitnation' | 'fitquest'>, code?: 'premier' | 'select' | 'flex' | 'fitpass' | 'free', type?: 'connected' | 'disconnected', }, frequency: { units?: 'month', value?: number, }, frequencyDays: number, id: number, image: { default: string, large: string, medium: string, small: string, url?: string, }, musicRights: { productId?: string, vendor?: 'audibleMagic', }, name: string, sku: string, sortOrder: number, sources: List<{ accountId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', productId?: string, }>, tags: List<'humana' | 'gympass' | 'addon' | 'amazon' | 'popular' | 'directPurchase' | 'csOnly' | 'displayInAdmin'>, updatedBy: { id?: number, }, },
+ publicNote: string, + reason: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, },
+ renewedAt?: number, + shopifyCustomerId: string, + sourceId?: string, sourceName?: 'stripe' | 'ios' | 'android' | 'amazon', sourceUserId?: string, status?: string, }
GET /users/{userId}/account/history
Get the changes that have happened to this account
Response Body
{ data: List<{- action?: 'create' | 'activate' | 'started' | 'ended' | 'pause' | 'unpause' | 'cancel' | 'uncancel' | 'terminate' | 'change' | 'extend' | 'refund' | 'credit' | 'discount' | 'anonymize' | 'ban' | 'join-family' | 'unjoin-family ' | 'memo' | 'upcoming' | 'paid' | 'updated' | 'failed',dateOccurred?: number, guid?: string, initiatedBy?: { id?: number, }, internalNote?: string, payload: record, publicNote?: string, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, source?: 'webhook' | 'cs' | 'member' | 'app' | 'nest', subscription?: { id?: number, }, user?: { id?: number, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }
GET /users/{userId}/account/history
Get the changes that have happened to this account
Response Body
{ data: List<{+ action?: 'create' | 'activate' | 'started' | 'ended' | 'pause' | 'unpause' | 'cancel' | 'uncancel' | 'terminate' | 'change' | 'extend' | 'refund' | 'credit' | 'discount' | 'anonymize' | 'ban' | 'join-family' | 'unjoin-family' | 'memo' | 'upcoming' | 'paid' | 'updated' | 'failed', dateOccurred?: number, guid?: string, initiatedBy?: { id?: number, }, internalNote?: string, payload: record, publicNote?: string, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, source?: 'webhook' | 'cs' | 'member' | 'app' | 'nest', subscription?: { id?: number, }, user?: { id?: number, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }
GET /songs/{id}/playlists
Get all playlists that contain this song
Response Body
{ data: List<{ countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool,name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>,
videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }
GET /songs/{id}/playlists
Get all playlists that contain this song
Response Body
{ data: List<{ countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, + legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, + tags?: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }
GET /playlists
Get a list of playlists
Response Body
{ data: List<{ countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool,name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>,
videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }
GET /playlists
Get a list of playlists
Response Body
{ data: List<{ countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, + legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, + tags?: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, videoLength?: { id?: number, name?: string, }, }>, pagination: { page?: number, skip?: number, take?: number, total: { pages?: number, rows?: number, }, }, }
POST /playlists
Create a new playlist
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool,name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>,
videoLength?: { id?: number, name?: string, }, }, }
POST /playlists
Create a new playlist
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, + legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, + tags?: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, videoLength?: { id?: number, name?: string, }, }, }
GET /playlists/{playlist}
Get a single playlist by ID
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool,name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>,
tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }
GET /playlists/{playlist}
Get a single playlist by ID
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, + legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, + tags?: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }
PATCH /playlists/{id}
Update an existing playlist
Request Body
{ countries: List<{ code?: string, }>, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, id: number, instructors: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged: bool,name: string, schedule: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios: List<{ id?: number, name?: string, precedence?: number, }>,
videoLength: { id?: number, name?: string, }, }
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool,name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>,
videoLength?: { id?: number, name?: string, }, }, }
PATCH /playlists/{id}
Update an existing playlist
Request Body
{ countries: List<{ code?: string, }>, createdBy: { id?: number, }, dateCreated: number, dateUpdated: number, id: number, instructors: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged: bool, + legacyContentExplicit: bool, name: string, schedule: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios: List<{ id?: number, name?: string, precedence?: number, }>, + tags: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, videoLength: { id?: number, name?: string, }, }
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, + legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, + tags?: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, videoLength?: { id?: number, name?: string, }, }, }
POST /playlists/{playlist}/import
Import all songs from a playlist to another playlist
Guard: none
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool,name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>,
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
Guard: instructor
Response Body
{ data: { countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, instructors?: List<{ id?: number, name?: string, precedence?: number, }>, isFlagged?: bool, + legacyContentExplicit?: bool, name?: string, schedule?: List<{ available?: { end?: number, live?: number, start?: number, }, content?: { guid?: string, }, guid?: string, legacy: { hlsUrl?: string, id?: number, liveStreamId?: number, type?: 'reflect' | 'connect', }, type?: 'live' | 'vod' | 'encore' | 'rebroadcast', }>, studios?: List<{ id?: number, name?: string, precedence?: number, }>, + tags?: List<{ + image?: { + default: string, + large: string, + medium: string, + small: string, + url?: string, + }, + text?: string, + translations: record, + type?: 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'modality' | 'equipment' | 'plan' | 'venue' | 'general' | 'level', + value?: string, + }>, tracks?: List<{ createdBy?: { id?: number, }, dateCreated?: number, flag?: string, playlist?: { id?: number, }, song?: { album?: { id?: number, name?: string, }, artists?: List<{ id?: number, name?: string, }>, copyright: record, coverArtUrl?: string, duration?: { seconds: number, text: string, }, genres?: List<string>, id?: number, isExplicit?: bool, isrc?: string, label?: { id?: number, name?: string, }, labelOwner?: { id?: number, name?: string, }, labelRights: record, name?: string, publisherRights?: List<string>, releaseDate?: number, searchFlags: record, }, trackOrder?: number, }>, videoLength?: { id?: number, name?: string, }, }, }
2 added endpoints Collapse added endpoints
POST /users/{userId}/account/credit
Guard: admin
Request Body
{ durationDays?: number, initiatedBy?: { id?: number, }, internalNote?: string, publicNote?: string, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, }
Response Body
{ data: { dateCancelled?: number, dateExpires?: number, datePausedUntil?: number, nextInvoice?: { amount?: number, currency?: { code?: string, scale?: number, symbol?: string, }, dateScheduled?: number, }, status?: { status?: 'accepted' | 'blocked' | 'requested', }, subscription?: { activation?: { isActivated?: bool, }, billingProvider?: { accountId?: string, customerId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', orderId?: string, }, cancellation?: { dateCancelled?: number, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }
POST /users/{userId}/account/activate
create a new subscription in stripe from shopify order, optionally applies a redemption code
Guard: loggedIn
Request Body
{ billingAddress?: { city?: string, country?: { code?: string, }, postalCode?: string, region?: { code?: string, }, streetLine1?: string, streetLine2?: string, }, cardTokenId?: string, email?: string, firstName?: string, isFirstPeriodPrepaid: bool, lastName?: string, phoneNumber?: string, redemptionCode: string, utm: { campaign?: string, content?: string, medium?: string, source?: string, }, }
Response Body
{ data: { dateCancelled?: number, dateExpires?: number, datePausedUntil?: number, nextInvoice?: { amount?: number, currency?: { code?: string, scale?: number, symbol?: string, }, dateScheduled?: number, }, status?: { status?: 'accepted' | 'blocked' | 'requested', }, subscription?: { activation?: { isActivated?: bool, }, billingProvider?: { accountId?: string, customerId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', orderId?: string, }, cancellation?: { dateCancelled?: number, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }, }
POST /subscriptions/{id}/activate
create a new subscription in stripe from shopify order, optionally applies a redemption code
Guard: loggedIn
Request Body
{ billingAddress?: { city?: string, country?: { code?: string, }, postalCode?: string, region?: { code?: string, }, streetLine1?: string, streetLine2?: string, }, cardTokenId?: string, email?: string, firstName?: string, isFirstPeriodPrepaid: bool, lastName?: string, phoneNumber?: string, redemptionCode: string, utm: { campaign?: string, content?: string, medium?: string, source?: string, }, }
Response Body
{ data: { activation?: { isActivated?: bool, }, billingProvider?: { accountId?: string, customerId?: string, name?: 'stripe' | 'ios' | 'android' | 'amazon', orderId?: string, }, cancellation?: { dateCancelled?: number, reason?: { code?: 'competitor' | 'healthIssues' | 'notMetExpectations' | 'pricing' | 'noLongerHaveEquipment' | 'busy' | 'other', message?: string, }, }, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, id?: number, pause?: { dateEnd?: number, dateStart?: number, reason?: string, }, plan?: { id?: number, }, price?: { currency?: { code?: string, scale?: number, symbol?: string, }, value?: number, }, promotion?: { id?: number, }, provisional?: { isProvisioned?: bool, }, renewal?: 'auto' | 'paused' | 'cancelled' | 'failed', source?: { accountId?: string, lineItemId?: string, name?: 'shopify' | 'amazon' | 'ios' | 'android' | 'organic' | 'free', orderId?: string, productId?: string, }, status?: 'pending' | 'trialing' | 'active' | 'expired', term?: { dateEnd?: number, dateStart?: number, }, token?: string, trial?: { dateEnd?: number, dateStart?: number, }, updatedBy?: { id?: number, }, user?: { id?: number, }, utm?: { campaign?: string, content?: string, medium?: string, source?: string, }, }, }