Nest Changelog
1.1.4
2/9/2022
1.1.5
2/15/2022
15 changed endpoints Collapse changed endpoints
GET /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: List<{
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
}>,
}GET /songs/{id}/playlists 
Get all playlists that contain this song
Response Body
{
data: List<{
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
}>,
}GET /playlists 
Get a list of playlists
Response Body
{
data: List<{
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
}>,
}GET /playlists 
Get a list of playlists
Response Body
{
data: List<{
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
}>,
}POST /playlists 
Create a new playlist
Response Body
{
data: {
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
},
}POST /playlists 
Create a new playlist
Response Body
{
data: {
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
},
}GET /playlists/{id} 
Get a single playlist by ID
Response Body
{
data: {
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
tracks?: List<{
dateCreated?: number,
song?: {
album?: {
id?: number,
name?: string,
},
artist?: List<{
id?: number,
name?: string,
}>,
coverArt?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
duration?: {
seconds: number,
text: string,
},
genres?: List<{
id?: number,
name?: string,
}>,
id?: number,
isExplicit?: bool,
isrcCode?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
licenseDetails?: {
label: record,
publisher: record,
},
licensedIn?: List<string>,
name?: string,
yearPublished?: number,
},
trackOrder?: number,
}>,
},
}GET /playlists/{id} 
Get a single playlist by ID
Response Body
{
data: {
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
tracks?: List<{
dateCreated?: number,
song?: {
album?: {
id?: number,
name?: string,
},
artist?: List<{
id?: number,
name?: string,
}>,
coverArt?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
duration?: {
seconds: number,
text: string,
},
genres?: List<{
id?: number,
name?: string,
}>,
id?: number,
isExplicit?: bool,
isrcCode?: string,
label?: {
id?: number,
name?: string,
},
labelOwner?: {
id?: number,
name?: string,
},
licenseDetails?: {
label: record,
publisher: record,
},
licensedIn?: List<string>,
name?: string,
yearPublished?: number,
},
trackOrder?: number,
}>,
},
}PATCH /playlists/{id} 
Update an existing playlist
Response Body
{
data: {
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
},
}PATCH /playlists/{id} 
Update an existing playlist
Response Body
{
data: {
content?: {
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
},
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
id?: number,
name?: string,
},
}GET /content/items 
Get list of content items
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
}>,
}GET /content/items 
Get list of content items
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
}>,
}GET /content/items/{guid} 
Get a specific content item
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
}>,
}GET /content/items/{guid} 
Get a specific content item
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
}>,
}GET /content/recommendations 
Get content recommended for this user.
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
- dateAvailable?: number,
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
}>,
}GET /content/recommendations 
Get content recommended for this user.
Response Body
{
data: List<{
countries?: List<{
code?: string,
}>,
createdBy?: {
id?: number,
},
dateCreated?: number,
dateUpdated?: number,
description?: string,
guid?: string,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
instructors?: List<{
id?: number,
name?: string,
}>,
keywords?: List<string>,
name?: string,
playlist?: {
id?: number,
name?: string,
},
schedule?: List<{
+ availability?: {
+ start?: number,
+ },
type?: 'live' | 'vod' | 'encore',
}>,
status?: 'draft' | 'published',
studios?: List<{
id?: number,
name?: string,
}>,
tags?: List<{
text?: string,
type?: 'category',
value?: string,
}>,
updatedBy?: {
id?: number,
},
videoLength?: {
id?: number,
name?: string,
},
}>,
}GET /subscriptions/{id}/history 
Get a subscription history by subscription ID
Response Body
{
data: List<{
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
dateOccurred?: number,
initiatedBy?: {
id?: number,
},
- reason: string,
- source: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}>,
}GET /subscriptions/{id}/history 
Get a subscription history by subscription ID
Response Body
{
data: List<{
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
dateOccurred?: number,
+ guid?: string,
initiatedBy?: {
id?: number,
},
+ payload: record,
+ rawJson: record,
+ reason?: string,
+ source?: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}>,
}POST /subscriptions/{id}/history 
Create Subscription History
Request Body
{
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
- dateOccurred?: number,
initiatedBy?: {
id?: number,
},
payload: record,
rawJson: record,
reason: string,
source: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}Response Body
{
data: {
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
dateOccurred?: number,
initiatedBy?: {
id?: number,
},
- reason: string,
- source: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
},
}POST /subscriptions/{id}/history 
Create Subscription History
Request Body
{
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
initiatedBy?: {
id?: number,
},
payload: record,
rawJson: record,
reason: string,
source: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
}Response Body
{
data: {
action?: 'paused' | 'planChanged' | 'created' | 'canceled' | 'discounted',
dateOccurred?: number,
+ guid?: string,
initiatedBy?: {
id?: number,
},
+ payload: record,
+ rawJson: record,
+ reason?: string,
+ source?: 'stripe.com' | 'admin.echelonfit.com' | 'falcon1.echelonfit.com' | 'member.echelonfit.com' | 'stag.member.echelonfit.com',
subscription?: {
id?: number,
},
user?: {
id?: number,
},
},
}GET /equipment/models 
Get a list of all available Equipment
Response Body
{
data: List<{
dateAvailable?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
plans?: List<{
id?: number,
}>,
}>,
}GET /equipment/models 
Get a list of all available Equipment
Response Body
{
data: List<{
+ category: {
+ guid?: string,
+ name?: string,
+ },
dateAvailable?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
+ pdf?: string,
plans?: List<{
id?: number,
}>,
+ video?: string,
}>,
}GET /equipment/models/{id} 
Get a specific model of equipment
Response Body
{
data: {
dateAvailable?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
plans?: List<{
id?: number,
}>,
},
}GET /equipment/models/{id} 
Get a specific model of equipment
Response Body
{
data: {
+ category: {
+ guid?: string,
+ name?: string,
+ },
dateAvailable?: number,
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
name?: string,
+ pdf?: string,
plans?: List<{
id?: number,
}>,
+ video?: string,
},
}5 added endpoints Collapse added endpoints
PUT /users/password/forgot 
Check that there is no password reset request within last 10 mins and generates a token for password reset
Request Body
{
email?: string,
}Response Body
{
data: {
token?: string,
},
}PUT /users/password/reset 
Change the password using reset token
Request Body
{
billingAddress: {
city: string,
country: {
code?: string,
},
postalCode: string,
region: {
code?: string,
},
streetLine1: string,
streetLine2: string,
},
dateBirth: string,
email?: string,
firstName: string,
gender: {
value?: 'm' | 'f' | 'o',
},
height: {
units?: 'in' | 'cm',
value?: number,
},
image: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
lastName: string,
mongoId: string,
nickname: string,
parent: {
id?: number,
mongoId?: string,
},
password?: string,
phoneNumber: string,
purchaseHistory: List<{
datePurchased?: number,
name?: string,
retailer?: {
id?: number,
name?: string,
},
serialNumber?: string,
}>,
roles: List<string>,
token?: string,
weight: {
units?: 'lb' | 'kg',
value?: number,
},
}POST /auth/commercial 
Authenticate a single commercial piece of equipment
Request Body
{
Commercial Code?: string,
name: string,
password?: string,
}Response Body
{
data: {
family?: List<{
id?: number,
image?: {
default: string,
large: string,
medium: string,
small: string,
url?: string,
},
nickname?: string,
}>,
guid?: string,
jwt?: string,
mongoId?: string,
plan?: {
features?: record,
id?: number,
name?: string,
},
userId?: number,
},
}