Thrive Global content API

Microsteps, challenges, courses, podcasts, and journey videos

OpenAPI Specification

thrive-global-content-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Thrive Global Partner audio experiences content API
  description: 'API for accessing Thrive Global content and features. All content endpoints require a Bearer token obtained via the authentication endpoint.


    Response envelopes follow the pattern `{ message, valid, data }` where `data` contains the response payload. Collection endpoints nest items at a resource-specific path (e.g. `data.data.reset.thrive.get.items`).'
  version: 1.7.0
  contact:
    name: Thrive Global
    url: https://thriveglobal.com/contact/sales
servers:
- url: https://partners-api.thriveglobal.com
  description: Production server
- url: https://partners-api-stag.thriveglobal.com
  description: Staging server
tags:
- name: content
  description: Microsteps, challenges, courses, podcasts, and journey videos
paths:
  /v1/microsteps:
    get:
      operationId: getDailyMicrosteps
      tags:
      - content
      summary: Get all microsteps with optional client-side filtering
      description: Items at `data.data.today.allMicrosteps`. Pagination and filtering are applied client-side by the API.
      security:
      - BearerAuth: []
      parameters:
      - name: page
        in: query
        schema:
          type: integer
        description: Page number (client-side pagination)
      - name: limit
        in: query
        schema:
          type: integer
        description: Items per page (client-side pagination)
      - name: search
        in: query
        schema:
          type: string
        description: Search by title, body, or action text
      - name: filter
        in: query
        schema:
          type: string
        description: 'JSON filter: {"categories":["Sleep","Food"],"pillars":["mindful eating"]}'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          today:
                            type: object
                            properties:
                              allMicrosteps:
                                type: array
                                items:
                                  $ref: '#/components/schemas/MicrostepItem'
                              pageInfo:
                                type: object
                                description: Client-side pagination metadata
                                properties:
                                  totalCount:
                                    type: integer
                                  currentPage:
                                    type: integer
                                  totalPages:
                                    type: integer
                                  hasNextPage:
                                    type: boolean
                                  hasPreviousPage:
                                    type: boolean
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/microsteps/{id}:
    get:
      operationId: getMicrostepById
      tags:
      - content
      summary: Get a single microstep by ID
      security:
      - BearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: Unique identifier of the microstep (UUID)
        example: 550e8400-e29b-41d4-a716-446655440000
      responses:
        '200':
          description: Item retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          today:
                            type: object
                            properties:
                              item:
                                $ref: '#/components/schemas/MicrostepItem'
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/challenges:
    get:
      operationId: getAllChallenges
      tags:
      - content
      summary: Get all challenges with daily goals
      description: Each challenge includes its full set of daily goals. Located at `data.challenges`.
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Successfully retrieved challenges
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: ''
                  data:
                    type: object
                    properties:
                      challenges:
                        type: array
                        items:
                          $ref: '#/components/schemas/ChallengeItem'
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v2/learn:
    get:
      operationId: getLearningCourses
      tags:
      - content
      summary: Get learning courses with pagination
      description: 'Note: uses `pageSize` parameter instead of `limit`.'
      security:
      - BearerAuth: []
      parameters:
      - name: page
        in: query
        schema:
          type: integer
          default: 1
        description: Page number
      - name: pageSize
        in: query
        schema:
          type: integer
          default: 100
        description: 'Items per page (note: uses pageSize, not limit)'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          learnV2:
                            type: object
                            properties:
                              getCourses:
                                $ref: '#/components/schemas/CourseCollection'
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v2/learn/{id}:
    get:
      operationId: getLearningCourseById
      tags:
      - content
      summary: Get a single learning course by ID
      security:
      - BearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Course ID (numeric string)
        example: '42'
      responses:
        '200':
          description: Item retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          learnV2:
                            type: object
                            properties:
                              item:
                                $ref: '#/components/schemas/CourseItem'
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/learn:
    get:
      operationId: getLearningCoursesV1
      tags:
      - content
      summary: Get learning courses (v1, legacy format)
      description: Legacy endpoint that returns a different response structure than v2.
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          learn:
                            type: object
                            properties:
                              thrive:
                                type: object
                                properties:
                                  getContent:
                                    type: object
                                    properties:
                                      items:
                                        type: array
                                        items:
                                          type: object
                                          description: V1 learn content items (legacy format)
                                      total:
                                        type: integer
                                      itemsPerPage:
                                        type: integer
                                      page:
                                        type: integer
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v2/podcasts:
    get:
      operationId: getThrivePodcasts
      tags:
      - content
      summary: Get all Thrive podcasts with seasons and episodes
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          learnV2:
                            type: object
                            properties:
                              getPodcasts:
                                type: object
                                properties:
                                  items:
                                    type: array
                                    items:
                                      $ref: '#/components/schemas/PodcastItem'
                                  page:
                                    type: integer
                                  pageSize:
                                    type: integer
                                  hasMore:
                                    type: boolean
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/journey/daily-step-videos:
    get:
      operationId: getDailyStepVideos
      tags:
      - content
      summary: Get daily step videos for Thrive journeys
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  valid:
                    type: boolean
                  data:
                    type: object
                    properties:
                      data:
                        type: object
                        properties:
                          journeys:
                            type: object
                            properties:
                              getJourneyDailyStepVideos:
                                type: array
                                items:
                                  $ref: '#/components/schemas/JourneyDailyStepVideo'
        '401':
          description: Unauthorized — missing or invalid token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    MicrostepJourney:
      type: object
      properties:
        name:
          type: string
        shortName:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        image:
          type: string
          nullable: true
        imageUrl:
          type: string
          nullable: true
    CourseResource:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        summary:
          type: string
          nullable: true
        resourceType:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    PodcastItem:
      type: object
      description: A podcast with seasons and episodes.
      required:
      - id
      - title
      properties:
        id:
          type: string
        title:
          type: string
        summary:
          type: string
          nullable: true
        imageUrl:
          type: string
          nullable: true
          format: uri
        numberOfSeasons:
          type: integer
        numberOfEpisodes:
          type: integer
        seasons:
          type: array
          items:
            $ref: '#/components/schemas/PodcastSeason'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Tags associated with this podcast, as term objects.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Health conditions associated with this podcast. Currently always empty.
        coreHealthBehaviors:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Core health behaviors associated with this podcast. Currently always empty.
    MicrostepItem:
      type: object
      description: A small, science-backed daily action.
      required:
      - id
      - title
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
        body:
          type: string
          nullable: true
        action:
          type: string
          nullable: true
        journeys:
          type: array
          items:
            $ref: '#/components/schemas/MicrostepJourney'
        coreHealthBehaviors:
          type: array
          items:
            $ref: '#/components/schemas/MicrostepJourney'
          description: Core health behaviors associated with this microstep; contains the same values as `journeys`.
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Tags associated with this microstep, as term objects.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Health conditions associated with this microstep. Currently always empty.
        createdAt:
          type: string
          format: date-time
          description: Omitted when not available
        updatedAt:
          type: string
          format: date-time
          description: Omitted when not available
    CourseModule:
      type: object
      properties:
        id:
          type: string
        bookmarked:
          type: boolean
        byline:
          type: string
          nullable: true
        courseID:
          type: string
        displayName:
          type: string
          nullable: true
        hlsVideoLink:
          type: string
          nullable: true
        label:
          type: string
          nullable: true
        lessonID:
          type: string
        order:
          type: integer
        thumbnail:
          type: string
          nullable: true
        title:
          type: string
        type:
          type: string
        videoLink:
          type: string
          nullable: true
        videoURL:
          type: string
          nullable: true
          format: uri
          description: Absolute video URL
        manifestUrl:
          type: string
          nullable: true
          format: uri
          description: HLS manifest URL (.m3u8)
    ChallengeGoal:
      type: object
      properties:
        id:
          type: string
        challengeId:
          type: string
        day:
          type: integer
        position:
          type: integer
        goalType:
          type: string
        goalSteps:
          type: integer
          nullable: true
        goalWater:
          type: integer
          nullable: true
        goalActivityMinutes:
          type: integer
          nullable: true
        url:
          type: string
          nullable: true
    ErrorResponse:
      type: object
      required:
      - message
      - valid
      properties:
        message:
          type: string
        valid:
          type: boolean
          example: false
    TaxonomyTerm:
      type: object
      description: One shape for all taxonomy layers (`tags`, `conditions`, `coreHealthBehaviors`). `id` is the durable key — persist this, not `slug`. `slug` is the kebab-case machine key used in query-parameter filters and may change if the term is renamed. `name` is the display string.
      required:
      - id
      - slug
      - name
      properties:
        id:
          type: string
          nullable: true
          description: Stable identifier for the term; null where none exists
        slug:
          type: string
          example: sleep
        name:
          type: string
          nullable: true
          example: Sleep
    CourseExpert:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        title:
          type: string
          nullable: true
        photoUrl:
          type: string
          nullable: true
        bio:
          type: string
          nullable: true
    JourneyDailyStepVideo:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
          nullable: true
        url:
          type: string
          format: uri
        thumbnailUrl:
          type: string
          nullable: true
          format: uri
        manifestUrl:
          type: string
          nullable: true
          format: uri
          description: HLS manifest URL (.m3u8)
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Currently always empty.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Currently always empty.
        coreHealthBehaviors:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Currently always empty.
    CourseItem:
      type: object
      description: A learning course with lessons and modules.
      required:
      - id
      - title
      properties:
        id:
          type: string
        title:
          type: string
        uuid:
          type: string
          format: uuid
        subTitle:
          type: string
          nullable: true
        about:
          type: string
          nullable: true
        thumbnail:
          type: string
          nullable: true
        collection:
          type: string
          nullable: true
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Health conditions associated with this course, as term objects.
        featuredSubscriptionIds:
          type: array
          items:
            type: string
        seoDescription:
          type: string
          nullable: true
        seoTitle:
          type: string
          nullable: true
        experts:
          type: array
          items:
            $ref: '#/components/schemas/CourseExpert'
        lessons:
          type: array
          items:
            $ref: '#/components/schemas/CourseLesson'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Tags associated with this course, as term objects.
        coreHealthBehaviors:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Core health behaviors associated with this course. Currently always empty.
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        isFeatured:
          type: boolean
          description: True when `featuredSubscriptionIds` is non-empty
    ChallengeItem:
      type: object
      description: A challenge with its daily goals.
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        enabled:
          type: boolean
        duration:
          type: integer
        goal:
          type: string
        theme:
          type: string
        challenge_type:
          type: string
        position:
          type: integer
        goals:
          type: array
          items:
            $ref: '#/components/schemas/ChallengeGoal'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Tags associated with this challenge. Currently always empty.
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/TaxonomyTerm'
          description: Health conditions associated with this challenge. Currently always empty.
        coreHealthBehaviors:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              shortName:
                type: string
                nullable: true
          description: Core health behaviors associated with this challenge.
    PodcastSeason:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        number:
          type: integer
        summary:
          type: string
        episodes:
          type: array
          items:
            $ref: '#/components/schemas/PodcastEpisode'
    PodcastEpisode:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        summary:
          type: string
          nullable: true
        number:
          type: integer
        audioUrl:
          type: string
          nullable: true
          format: uri
        imageUrl:
          type: string
          nullable: true
          format: uri
    CourseLesson:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
          nullable: true
        moduleIds:
          type: array
          items:
            type: string
        modules:
          type: array
          items:
            $ref: '#/components/schemas/CourseModule'
        order:
          type: integer
        resources:
          type: array
          items:
            $ref: '#/components/schemas/CourseResource'
    CourseCollection:
      type: object
      description: Paginated courses. Located at `data.data.learnV2.getCourses` in the response.
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/CourseItem'
        page:
          type: integer
        pageSize:
          type: integer
        hasMore:
          type: boolean
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT