Nest Changelog
1.13.0
1/23/2023
1.14.0 PRE
1/30/2023
9 changed endpoints Collapse changed endpoints
POST /users
Request Body
{ billingAddress: { city: string, country: { code?: string, }, postalCode: string, region: { code?: string, }, streetLine1: string, streetLine2: string, }, birthdate: string, captcha: { token?: string, }, commercial: { code?: string, }, dateTosAccepted: number, dealer: { id?: number, }, email?: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, password?: string, phoneNumber: string, purchaseHistory: List<{- datePurchased?: number, - name?: string, - retailer?: {id?: number, },
- serialNumber?: string,}>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
POST /users
Request Body
{ billingAddress: { city: string, country: { code?: string, }, postalCode: string, region: { code?: string, }, streetLine1: string, streetLine2: string, }, birthdate: string, captcha: { token?: string, }, commercial: { code?: string, }, dateTosAccepted: number, dealer: { id?: number, }, email?: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, password?: string, phoneNumber: string, purchaseHistory: List<{+ datePurchased: number, + name: string, + retailer: { id?: number, },
+ serialNumber: string, }>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
PATCH /users/{userId}
Edit this user
Request Body
{ billingAddress: { city: string, country: { code?: string, }, postalCode: string, region: { code?: string, }, streetLine1: string, streetLine2: string, }, birthdate: string, dateTosAccepted: number, dealer: { id?: number, }, email: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, phoneNumber: string, purchaseHistory: List<{- datePurchased?: number, - name?: string, - retailer?: {id?: number, },
- serialNumber?: string,}>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
PATCH /users/{userId}
Edit this user
Request Body
{ billingAddress: { city: string, country: { code?: string, }, postalCode: string, region: { code?: string, }, streetLine1: string, streetLine2: string, }, birthdate: string, dateTosAccepted: number, dealer: { id?: number, }, email: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, phoneNumber: string, purchaseHistory: List<{+ datePurchased: number, + name: string, + retailer: { id?: number, },
+ serialNumber: string, }>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
POST /users/{userId}/family
Request Body
{ billingAddress: { city: string, country: { code?: string, }, postalCode: string, region: { code?: string, }, streetLine1: string, streetLine2: string, }, birthdate: string, captcha: { token?: string, }, commercial: { code?: string, }, dateTosAccepted: number, dealer: { id?: number, }, email?: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, password?: string, phoneNumber: string, purchaseHistory: List<{- datePurchased?: number, - name?: string, - retailer?: {id?: number, },
- serialNumber?: string,}>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
POST /users/{userId}/family
Request Body
{ billingAddress: { city: string, country: { code?: string, }, postalCode: string, region: { code?: string, }, streetLine1: string, streetLine2: string, }, birthdate: string, captcha: { token?: string, }, commercial: { code?: string, }, dateTosAccepted: number, dealer: { id?: number, }, email?: string, firstName: string, forcePasswordChange: bool, gender: { value?: 'm' | 'f' | 'o', }, height: { units?: 'in' | 'cm', value?: number, }, image: { colors?: { background?: { hex?: string, }, foreground?: { hex?: string, }, }, default: string, initials?: string, isPlaceholder?: bool, large: string, medium: string, small: string, url?: string, }, lastName: string, mongoId: string, nickname: string, parent: { id?: number, mongoId?: string, }, password?: string, phoneNumber: string, purchaseHistory: List<{+ datePurchased: number, + name: string, + retailer: { id?: number, },
+ serialNumber: string, }>, roles: List<string>, tagline: string, weight: { units?: 'lb' | 'kg', value?: number, }, }
POST /workouts/items
Post a Workout
Request Body
{- classLibrary: string,content?: { guid?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, device?: { appVersion?: string, model?: string, os?: string, osVersion?: string, }, events: List<string>, peripherals?: List<{ firmwareVersion?: string, guid?: string, hardwareVersion?: string, modelId?: string, name?: string, serialNO?: string, type?: 'bike' | 'rower' | 'treadmill', }>,- productName: string,ranking: { place?: number, total?: number, }, stats?: List<{ classState?: 'warmup' | 'in-session' | 'overflow' | 'ended', dateLoggedMs?: number, output?: { distance: number, incrementalDistance: number, joules: number, RPM: number, strokesPerMinute: number, time500Meters: number, watts: number, }, peripheral?: { guid: string, incline: number, resistance: number, speed: number, }, physiology?: { calories: number, heartRate: number, hrPoints: number, }, playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering', }>, user?: { id?: number, }, }
POST /workouts/items
Post a Workout
Request Body
{content?: { guid?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, device?: { appVersion?: string, model?: string, os?: string, osVersion?: string, }, events: List<string>, peripherals?: List<{ firmwareVersion?: string, guid?: string, hardwareVersion?: string, modelId?: string, name?: string, serialNO?: string, type?: 'bike' | 'rower' | 'treadmill', }>,
ranking: { place?: number, total?: number, }, stats?: List<{ classState?: 'warmup' | 'in-session' | 'overflow' | 'ended', dateLoggedMs?: number, output?: { distance: number, incrementalDistance: number, joules: number, RPM: number, strokesPerMinute: number, time500Meters: number, watts: number, }, peripheral?: { guid: string, incline: number, resistance: number, speed: number, }, physiology?: { calories: number, heartRate: number, hrPoints: number, }, playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering', }>, user?: { id?: number, }, }
PUT /workouts/items/{guid}
Put a Workout
Request Body
{- classLibrary: string,content?: { guid?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, device?: { appVersion?: string, model?: string, os?: string, osVersion?: string, }, events: List<string>, peripherals?: List<{ firmwareVersion?: string, guid?: string, hardwareVersion?: string, modelId?: string, name?: string, serialNO?: string, type?: 'bike' | 'rower' | 'treadmill', }>,- productName: string,ranking: { place?: number, total?: number, }, stats?: List<{ classState?: 'warmup' | 'in-session' | 'overflow' | 'ended', dateLoggedMs?: number, output?: { distance: number, incrementalDistance: number, joules: number, RPM: number, strokesPerMinute: number, time500Meters: number, watts: number, }, peripheral?: { guid: string, incline: number, resistance: number, speed: number, }, physiology?: { calories: number, heartRate: number, hrPoints: number, }, playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering', }>, user?: { id?: number, }, }
PUT /workouts/items/{guid}
Put a Workout
Request Body
{content?: { guid?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, device?: { appVersion?: string, model?: string, os?: string, osVersion?: string, }, events: List<string>, peripherals?: List<{ firmwareVersion?: string, guid?: string, hardwareVersion?: string, modelId?: string, name?: string, serialNO?: string, type?: 'bike' | 'rower' | 'treadmill', }>,
ranking: { place?: number, total?: number, }, stats?: List<{ classState?: 'warmup' | 'in-session' | 'overflow' | 'ended', dateLoggedMs?: number, output?: { distance: number, incrementalDistance: number, joules: number, RPM: number, strokesPerMinute: number, time500Meters: number, watts: number, }, peripheral?: { guid: string, incline: number, resistance: number, speed: number, }, physiology?: { calories: number, heartRate: number, hrPoints: number, }, playbackState?: 'playing' | 'paused' | 'stopped' | 'buffering', }>, user?: { id?: number, }, }
POST /workouts/process
Process workout
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,- product: 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,- product: 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
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, }, }
GET /workouts/users/{userId}/items
Get a list of workout summaries
Response Body
{ data: List<{ content?: { description?: string, duration?: number, guid?: string, image?: {- default: string, - large: string, - medium: string, - small: string, - url?: string,}, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
- status?: 'new' | 'incomplete' | 'complete',}>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /workouts/users/{userId}/items
Get a list of workout summaries
Response Body
{ data: List<{ content?: { description?: string, duration?: number, guid?: string, image?: {+ default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
+ status?: 'incomplete' | 'complete', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }
GET /workouts/users/{userId}/aggregations
Get workout aggregations for user
Response Body
{ data: { furthestDistance?: number, highestOutput?: number, mostRecent?: { content?: { description?: string, duration?: number, guid?: string, image?: {- default: string, - large: string, - medium: string, - small: string, - url?: string,}, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
- status?: 'new' | 'incomplete' | 'complete',}, personalBest?: { content?: { description?: string, duration?: number, guid?: string, image?: {
- default: string, - large: string, - medium: string, - small: string, - url?: string,}, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
- status?: 'new' | 'incomplete' | 'complete',}, totalClasses?: number, totalDistance?: number, totalDuration?: number, }, }
GET /workouts/users/{userId}/aggregations
Get workout aggregations for user
Response Body
{ data: { furthestDistance?: number, highestOutput?: number, mostRecent?: { content?: { description?: string, duration?: number, guid?: string, image?: {+ default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
+ status?: 'incomplete' | 'complete', }, personalBest?: { content?: { description?: string, duration?: number, guid?: string, image?: {
+ default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
+ status?: 'incomplete' | 'complete', }, totalClasses?: number, totalDistance?: number, totalDuration?: number, }, }
GET /workouts/items/{guid}/summary
Get summary view of a workout
Response Body
{ data: { content?: { description?: string, duration?: number, guid?: string, image?: {- default: string, - large: string, - medium: string, - small: string, - url?: string,}, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
- status?: 'new' | 'incomplete' | 'complete',user?: { id?: number, }, }, }
GET /workouts/items/{guid}/summary
Get summary view of a workout
Response Body
{ data: { content?: { description?: string, duration?: number, guid?: string, image?: {+ default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, }, instructors?: List<{ id?: number, name?: string, }>, legacy?: { id?: number, type?: 'reflect' | 'connect', }, name?: string, type?: 'live' | 'vod' | 'encore' | 'freestyle', }, dateEnd?: number, dateStart?: number, duration?: { percentage?: number, text?: string, value?: number, }, guid?: string, output?: number, ranking?: { place?: number, total?: number, }, stats?: record,
+ status?: 'incomplete' | 'complete', user?: { id?: number, }, }, }