Nest Changelog

1.23.9 PRE

4/6/2023

1.24.0 PRE

4/10/2023

9 changed endpoints

GET /collections/items

List collections. Does not return user-favorites. Cache refresh: 10 minutes.

Response Body
{
  data: List<{
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {

guid?: string,

}, classCount?: number, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, durationDays?: number, episodeWord?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, medium?: 'reflect' | 'standard', name?: string, planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', sortOrder?: number, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /collections/items

List collections. Does not return user-favorites. Cache refresh: 10 minutes.

Response Body
{
  data: List<{
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
+     eventCode?: string,
      guid?: string,
+     images?: {
+       default?: string,
+       hd?: string,
+       portrait?: string,
+       sd?: string,
+       square?: string,
+     },
+     translations?: record,
    },
    classCount?: number,
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    sortOrder?: number,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total?: {
      pages?: number,
      rows?: number,
    },
  },
}

POST /collections/items

Create a new Collection

Request Body
{
  available?: {
    end?: number,
    start?: number,
  },
  badge?: {

guid?: string,

}, countries?: List<{ code?: string, }>, description?: string, durationDays?: number, episodeWord?: 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<{ value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }
Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {

guid?: string,

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, durationDays?: number, episodeWord?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, medium?: 'reflect' | 'standard', name?: string, planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', schedule?: List<{ contentGuid?: string, guid?: string, sortOrder?: number, }>, sortOrder?: number, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

POST /collections/items

Create a new Collection

Request Body
{
  available?: {
    end?: number,
    start?: number,
  },
  badge?: {
+   eventCode?: string,
    guid?: string,
+   images?: {
+     default?: string,
+     hd?: string,
+     portrait?: string,
+     sd?: string,
+     square?: string,
+   },
+   translations?: record,
  },
  countries?: List<{
    code?: string,
  }>,
  description?: string,
  durationDays?: number,
  episodeWord?: 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<{
    value?: string,
  }>,
  totalCount?: number,
  type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
  visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
}
Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
+     eventCode?: string,
      guid?: string,
+     images?: {
+       default?: string,
+       hd?: string,
+       portrait?: string,
+       sd?: string,
+       square?: string,
+     },
+     translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
      text?: string,
      type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
      value?: string,
    }>,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
  },
}

GET /collections/items/{guid}

Get a collection by guid. Cached every 10 minutes.

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {

guid?: string,

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, durationDays?: number, episodeWord?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, medium?: 'reflect' | 'standard', name?: string, planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', schedule?: List<{ contentGuid?: string, guid?: string, sortOrder?: number, }>, sortOrder?: number, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

GET /collections/items/{guid}

Get a collection by guid. Cached every 10 minutes.

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
+     eventCode?: string,
      guid?: string,
+     images?: {
+       default?: string,
+       hd?: string,
+       portrait?: string,
+       sd?: string,
+       square?: string,
+     },
+     translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
      text?: string,
      type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
      value?: string,
    }>,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
  },
}

PATCH /collections/items/{guid}

Update a Collection

Request Body
{
  available: {
    end?: number,
    start?: number,
  },
  badge: {

guid?: string,

}, description: string, durationDays: number, episodeWord: string, name: string, schedule: List<{ guid?: string, sortOrder?: number, }>, sortOrder: number, tags: List<{ value?: string, }>, totalCount: number, type: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', visibility: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }
Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {

guid?: string,

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, durationDays?: number, episodeWord?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, medium?: 'reflect' | 'standard', name?: string, planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', schedule?: List<{ contentGuid?: string, guid?: string, sortOrder?: number, }>, sortOrder?: number, tags?: List<{ description?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, modality?: 'ride' | 'row' | 'run' | 'off' | 'all', text?: string, type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus', value?: string, }>, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

PATCH /collections/items/{guid}

Update a Collection

Request Body
{
  available: {
    end?: number,
    start?: number,
  },
  badge: {
+   eventCode?: string,
    guid?: string,
+   images?: {
+     default?: string,
+     hd?: string,
+     portrait?: string,
+     sd?: string,
+     square?: string,
+   },
+   translations?: record,
  },
  description: string,
  durationDays: number,
  episodeWord: string,
  name: string,
  schedule: List<{
    guid?: string,
    sortOrder?: number,
  }>,
  sortOrder: number,
  tags: List<{
    value?: string,
  }>,
  totalCount: number,
  type: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
  visibility: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
}
Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
+     eventCode?: string,
      guid?: string,
+     images?: {
+       default?: string,
+       hd?: string,
+       portrait?: string,
+       sd?: string,
+       square?: string,
+     },
+     translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    schedule?: List<{
      contentGuid?: string,
      guid?: string,
      sortOrder?: number,
    }>,
    sortOrder?: number,
    tags?: List<{
      description?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      modality?: 'ride' | 'row' | 'run' | 'off' | 'all',
      text?: string,
      type?: 'format' | 'category' | 'music' | 'language' | 'closedCaptions' | 'healthFocus' | 'equipment' | 'plan' | 'venue' | 'general' | 'level' | 'accessories' | 'focus',
      value?: string,
    }>,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
  },
}

PUT /collections/items/{guid}/schedule/{scheduleGuid}

Add a content schedule item to a collection

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {

guid?: string,

}, countries?: List<{ code?: string, }>, createdBy?: { id?: number, }, dateCreated?: number, dateUpdated?: number, description?: string, durationDays?: number, episodeWord?: string, guid?: string, images?: { default?: string, hd?: string, portrait?: string, sd?: string, square?: string, }, medium?: 'reflect' | 'standard', name?: string, planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free', sortOrder?: number, totalCount?: number, type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite', updatedBy?: { id?: number, }, visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash', }, }

PUT /collections/items/{guid}/schedule/{scheduleGuid}

Add a content schedule item to a collection

Response Body
{
  data: {
    available?: {
      end?: number,
      start?: number,
    },
    badge?: {
+     eventCode?: string,
      guid?: string,
+     images?: {
+       default?: string,
+       hd?: string,
+       portrait?: string,
+       sd?: string,
+       square?: string,
+     },
+     translations?: record,
    },
    countries?: List<{
      code?: string,
    }>,
    createdBy?: {
      id?: number,
    },
    dateCreated?: number,
    dateUpdated?: number,
    description?: string,
    durationDays?: number,
    episodeWord?: string,
    guid?: string,
    images?: {
      default?: string,
      hd?: string,
      portrait?: string,
      sd?: string,
      square?: string,
    },
    medium?: 'reflect' | 'standard',
    name?: string,
    planFamily?: 'spinco' | 'premier' | 'select' | 'flex' | 'fitpass' | 'lite' | 'choice' | 'free',
    sortOrder?: number,
    totalCount?: number,
    type?: 'generic' | 'series' | 'challenge' | 'program' | 'favorite',
    updatedBy?: {
      id?: number,
    },
    visibility?: 'public' | 'unlisted' | 'private' | 'draft' | 'trash',
  },
}

POST /badges

Create a new badge

Response Body
{
  data: {
    eventCode?: string,
    guid?: string,

translations?: record, }, }

POST /badges

Create a new badge

Response Body
{
  data: {
    eventCode?: string,
    guid?: string,
+   images?: {
+     default?: string,
+     hd?: string,
+     portrait?: string,
+     sd?: string,
+     square?: string,
+   },
    translations?: record,
  },
}

GET /badges

Get a list of badges

Response Body
{
  data: List<{
    eventCode?: string,
    guid?: string,

translations?: record, }>, pagination: { page?: number, skip?: number, take?: number, total?: { pages?: number, rows?: number, }, }, }

GET /badges

Get a list of badges

Response Body
{
  data: List<{
    eventCode?: string,
    guid?: string,
+   images?: {
+     default?: string,
+     hd?: string,
+     portrait?: string,
+     sd?: string,
+     square?: string,
+   },
    translations?: record,
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total?: {
      pages?: number,
      rows?: number,
    },
  },
}

PATCH /badges/{guid}

Edit a badge

Request Body
{
  eventCode: string,
  guid: string,

translations: record, }
Response Body
{
  data: {
    eventCode?: string,
    guid?: string,

translations?: record, }, }

PATCH /badges/{guid}

Edit a badge

Request Body
{
  eventCode: string,
  guid: string,
+ images: {
+   default?: string,
+   hd?: string,
+   portrait?: string,
+   sd?: string,
+   square?: string,
+ },
  translations: record,
}
Response Body
{
  data: {
    eventCode?: string,
    guid?: string,
+   images?: {
+     default?: string,
+     hd?: string,
+     portrait?: string,
+     sd?: string,
+     square?: string,
+   },
    translations?: record,
  },
}

GET /badges/{guid}

Get a specific badge

Response Body
{
  data: {

eventCode?: string, guid?: string, - translations?: record,

}, }

GET /badges/{guid}

Get a specific badge

Response Body
{
  data: {
+   description?: string,
    eventCode?: string,
    guid?: string,

+ images?: { + default?: string, + hd?: string, + portrait?: string, + sd?: string, + square?: string, + }, + text?: string, }, }
4 added endpoints
Added endpoints

GET /users/{userId}/collections/{collectionGuid}/progress

Get users progress on this collection

Guard: admin, family

Response Body
{
  data: List<{
    contentGuid?: string,
    workoutGuid?: string,
  }>,
}

PUT /users/{userId}/collections/{collectionGuid}

User joins a collection

Guard: admin, family

DELETE /users/{userId}/collections/{collectionGuid}

User leaves a collection

Guard: admin, family

GET /users/{userId}/badges

Get users badges

Guard: admin, family

Response Body
{
  data: List<{
    awarded?: {
      content?: {
        guid?: string,
      },
      date?: number,
      workout?: {
        guid?: string,
      },
    },
    badge?: {
      description?: string,
      guid?: string,
      images?: {
        default?: string,
        hd?: string,
        portrait?: string,
        sd?: string,
        square?: string,
      },
      text?: string,
      type?: 'milestone' | 'collection' | 'streak',
    },
  }>,
  pagination: {
    page?: number,
    skip?: number,
    take?: number,
    total?: {
      pages?: number,
      rows?: number,
    },
  },
}
WORK IN PROGRESS