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/