Thinkific Bundles API

Bundle operations

OpenAPI Specification

thinkific-bundles-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Thinkific Admin Bundles API
  description: Thinkific's public API can be used to integrate your application with your Thinkific site.
  termsOfService: https://www.thinkific.com/legal/
  contact:
    email: developers@thinkific.com
  version: v1
servers:
- url: https://api.thinkific.com/api/public/v1
security:
- OAuthAccessToken: []
- ApiKey: []
  ApiKeySubdomain: []
tags:
- name: Bundles
  description: Bundle operations
paths:
  /bundles/{id}:
    get:
      tags:
      - Bundles
      summary: List a bundle
      description: Retrieves the Bundle identified by the provided id
      operationId: getBundleByID
      parameters:
      - name: id
        in: path
        description: ID of the Bundle in the form of an integer
        required: true
        schema:
          type: number
      responses:
        200:
          description: Bundle Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleResponse'
        403:
          $ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
        404:
          description: Record not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorNotFound'
  /bundles/{id}/courses:
    get:
      tags:
      - Bundles
      summary: List Courses by bundle ID
      description: Retrieves the Courses within the Bundle identified by the provided id
      parameters:
      - name: id
        in: path
        description: ID of the Bundle in the form of an integer
        required: true
        schema:
          type: number
      - name: page
        in: query
        description: The page within the collection to fetch
        schema:
          type: number
          default: 1.0
      - name: limit
        in: query
        description: The number of items to be returned
        schema:
          type: number
          default: 25.0
      responses:
        200:
          description: Courses Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCoursesResponse'
        403:
          $ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
        404:
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorNotFound'
  /bundles/{id}/enrollments:
    get:
      tags:
      - Bundles
      summary: List a enrollments in a bundle
      description: Retrieves all the enrollments in the bundle identified by the provided id
      operationId: getBundleEnrollments
      parameters:
      - name: id
        in: path
        description: ID of the Bundle in the form of an integer
        required: true
        schema:
          type: number
      - name: page
        in: query
        description: The page within the collection to fetch
        schema:
          type: number
          default: 1.0
      - name: limit
        in: query
        description: The number of items to be returned
        schema:
          type: number
          default: 25.0
      - name: query[user_id]
        in: query
        description: Search Bundle Enrollments by User ID.
        schema:
          type: number
        example: 123
      - name: query[email]
        in: query
        description: Search Bundle Enrollments by User email
        schema:
          type: string
        example: user@example.com
      - name: query[completed]
        in: query
        description: Filter for only completed Bundle Enrollments when set to true.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[expired]
        in: query
        description: Filter for only expired Bundle Enrollments when set to true.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[created_after]
        in: query
        description: Filter for only Enrollments created after the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[created_before]
        in: query
        description: Filter for only Enrollments created before the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[created_on]
        in: query
        description: Filter for only Enrollments created on the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[created_on_or_after]
        in: query
        description: Filter for only Enrollments created on or after the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[created_on_or_before]
        in: query
        description: Filter for only Enrollments created on or before the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[updated_after]
        in: query
        description: Filter for only Enrollments updated after the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[updated_before]
        in: query
        description: Filter for only Enrollments updated before the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[updated_on]
        in: query
        description: Filter for only Enrollments updated on the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[updated_on_or_after]
        in: query
        description: Filter for only Enrollments created on or after the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      - name: query[updated_on_or_before]
        in: query
        description: Filter for only Enrollments updated on or before the date specified.
        schema:
          type: string
          format: date-time
        example: '2021-04-27'
      responses:
        200:
          description: Bundle Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetEnrollmentsResponse'
        403:
          $ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
    post:
      tags:
      - Bundles
      summary: Create an Enrollment in a Bundle of Courses
      description: This endpoint enrolls a User in a Bundle and each of the Courses contained within the Bundle
      operationId: createEnrollmentInBundle
      parameters:
      - name: id
        description: ID of the bundle in a form of integer
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: number
                activated_at:
                  type: string
                  description: The date/time at which the Enrollment is to be activated. If not provided, the Enrollment will only provide access to free preview content within the Courses. Provide full access to courses by setting this value to the current date/time.
                  format: date-time
                expiry_date:
                  type: string
                  description: The date/time at which the Enrollment should be expired. If not provided, the Enrollment does not expire.
                  format: date-time
              required:
              - user_id
            example:
              user_id: 1
              activated_at: '2015-08-26T03:33:33.723Z'
              expiry_date: '2016-08-26T03:33:33.723Z'
      responses:
        201:
          description: Enrollments created synchronously
        202:
          description: Enrollments created asynchronously
        403:
          $ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
        422:
          description: Unprocessable entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
              example:
                errors:
                  user_id:
                  - can't be blank
    put:
      tags:
      - Bundles
      summary: Update Enrollments in a Bundle
      description: This endpoint updates a User’s Enrollment in a Bundle and each of the Courses contained within the Bundle.
      operationId: updateEnrollmentsInBundle
      parameters:
      - name: id
        description: ID of the bundle in a form of integer
        in: path
        required: true
        schema:
          type: number
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: number
                activated_at:
                  type: string
                  description: The date/time at which the Enrollment is to be activated. If not provided, the Enrollment will only provide access to free preview content within the Courses. Provide full access to courses by setting this value to the current date/time.
                  format: date-time
                expiry_date:
                  type: string
                  description: The date/time at which the Enrollment should be expired. If not provided, the Enrollment does not expire.
                  format: date-time
              required:
              - user_id
            example:
              user_id: 1
              activated_at: '2015-08-26T03:33:33.723Z'
              expiry_date: '2016-08-26T03:33:33.723Z'
      responses:
        204:
          description: Enrollments Updated
        403:
          $ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
        422:
          description: Unprocessable entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
              example:
                errors:
                  user_id:
                  - can't be blank
components:
  responses:
    ErrorForbiddenAppsNotAvailableResponse:
      description: Access Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorForbiddenAppsNotAvailable'
  schemas:
    ValidationError:
      type: object
      properties:
        field_name:
          type: string
          description: validation error
    Meta:
      type: object
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
    CourseResponse:
      required:
      - chapter_ids
      - id
      - instructor_id
      - name
      - product_id
      - reviews_enabled
      type: object
      properties:
        id:
          type: number
          description: The ID of the course
          example: 1.0
        name:
          type: string
          description: The name of the course
          example: My Course
        slug:
          type: string
          description: URL-friendly version of the course name. Used to construct URL for course Landing Pages & Course Player.
          example: my-course
        subtitle:
          type: string
          description: Deprecated - Used in legacy themes to display the subtitle of the Course.
          example: My Course Subtitle
        product_id:
          type: number
          description: The Course's Product ID
        description:
          type: string
          description: The description of the Course(V2 themes currently don't have that info)
          example: Course description
        course_card_text:
          type: string
          description: Deprecated - use 'description'.* - Used in legacy themes to populate the text for a Course card.
          example: my course
        intro_video_youtube:
          type: string
          description: Deprecated - Used in legacy themes to designate an intro video from Youtube.
          example: youtube01
        contact_information:
          type: string
          description: Deprecated - The contact information of the Course.
          example: Contact info
        keywords:
          type: string
          description: The keywords of the Course
          example: course,learn,great
        duration:
          type: string
          description: Deprecated - Used in legacy themes to display the duration of the Course.
          example: '22'
        banner_image_url:
          type: string
          description: Deprecated - use 'course_card_image_url'* - The landing page banner image url of the Course.
          example: http://example.com/banner.jpg
        course_card_image_url:
          type: string
          description: The card image url of the Course
          example: http://example.com/card.jpg
        intro_video_wistia_identifier:
          type: string
          description: Deprecated - Used in legacy themes to designate an intro video from Wistia.
          example: wistia0123
        administrator_user_ids:
          type: array
          example:
          - 1
          - 2
          items:
            type: number
            description: The IDs of the Users that can administer the Course as integers
        chapter_ids:
          type: array
          example:
          - 1
          - 2
          items:
            type: number
            description: The IDs of the Chapters in the Course as integers
        reviews_enabled:
          type: boolean
          description: A boolean indicating whether reviews are enabled for the Course
          example: false
        user_id:
          type: number
          description: The ID of the User that created the Course
          example: 1.0
        instructor_id:
          type: number
          description: The ID of the Instructor of the Course
          example: 1.0
    EnrollmentResponse:
      required:
      - activated_at
      - completed
      - completed_at
      - course_id
      - course_name
      - expired
      - expiry_date
      - id
      - is_free_trial
      - percentage_completed
      - started_at
      - updated_at
      - user_email
      - user_id
      - user_name
      type: object
      properties:
        id:
          type: number
          description: The ID of the Enrollment as an integer.
          example: 1.0
        user_email:
          type: string
          description: The email of the User owning the Enrollment.
          example: bob@example.com
        user_name:
          type: string
          description: The full name of the User owning the Enrollment.
          example: Bob Smith
        user_id:
          type: number
          description: The ID of the User owning the Enrollment as an integer.
          example: 1.0
        course_name:
          type: string
          description: The name of the Course.
          example: My Course
        course_id:
          type: number
          description: The ID of the Course as an integer.
          example: 1.0
        percentage_completed:
          type: number
          description: The percentage complete of the Enrollment. A number between 0.0 and 1.0. For example, to represent a percentage complete of 75%, this value would be 0.75.
          example: 1.0
        expired:
          type: boolean
          description: A boolean indicating whether the Enrollment is expired.
          example: false
        is_free_trial:
          type: boolean
          description: A boolean indicating whether the Enrollment is a free trial.
          example: false
        completed:
          type: boolean
          description: A boolean indicating whether the Enrollment is complete.
          example: true
        started_at:
          type: string
          description: The date/time that the Enrollment started.
          format: date-time
          example: '2018-01-01T01:01:00Z'
        activated_at:
          type: string
          description: The date/time that the Enrollment was activated.
          format: date-time
          example: '2018-01-01T01:01:00Z'
        completed_at:
          type: string
          description: The date/time that the Enrollment was completed.
          format: date-time
          example: '2018-01-31T01:01:00Z'
        updated_at:
          type: string
          description: The date/time that the Enrollment was updated last.
          format: date-time
          example: '2018-01-31T01:01:00Z'
        expiry_date:
          type: string
          description: The date/time that the Enrollment expires.
          format: date-time
          example: '2019-01-01T01:01:00Z'
    BundleResponse:
      required:
      - id
      - name
      - course_ids
      type: object
      properties:
        id:
          type: number
          description: The ID of the Bundle
          example: 1.0
        name:
          type: string
          description: The name of the Bundle
          example: A Bundle
        description:
          type: string
          description: The description on the Bundle
          example: The Bundle description
        tagline:
          type: string
          description: The tagline for the Bundle (Deprecated)
          example: Bundle tagline
        banner_image_url:
          type: string
          description: Deprecated - use 'bundle_card_image_url'* - The banner image url for the Bundle.
          example: http://example.com/image.jpg
        course_ids:
          type: array
          items:
            type: number
            description: The IDs of the Courses in the Bundle
        bundle_card_image_url:
          type: string
          description: The card image url for the Bundle
          example: http://example.com/image.jpg
    ErrorForbiddenAppsNotAvailable:
      type: object
      properties:
        error:
          type: string
          description: access forbidden
      example:
        error: Access to Apps is not available on your plan. Upgrade to gain access
    ErrorNotFound:
      type: object
      properties:
        error:
          type: string
          description: item not found error
      example:
        error: Record not found.
    GetEnrollmentsResponse:
      required:
      - items
      - meta
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/EnrollmentResponse'
        meta:
          $ref: '#/components/schemas/Meta'
    UnprocessableEntityError:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ValidationError'
    Pagination:
      type: object
      properties:
        current_page:
          type: number
          description: Current page number
          example: 1.0
        next_page:
          type: number
          description: Next page number
          example: 2.0
        prev_page:
          type: number
          description: Previous page number
        total_pages:
          type: number
          description: Number of total pages
          example: 10.0
        total_items:
          type: number
          description: Number of total items
          example: 250.0
        entries_info:
          type: string
          description: Entries info
          example: 1-10 of 10
      description: Pagination metadata
    GetCoursesResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/CourseResponse'
        meta:
          $ref: '#/components/schemas/Meta'
  securitySchemes:
    OAuthAccessToken:
      type: http
      scheme: bearer
    ApiKey:
      type: apiKey
      in: header
      name: X-Auth-API-Key
      description: Used together with ApiKeySubdomain
    ApiKeySubdomain:
      type: apiKey
      in: header
      name: X-Auth-Subdomain
      description: Used together with ApiKey
externalDocs:
  description: Find out more about Thinkifc's API
  url: http://developers.thinkific.com/api/api-documentation/