OpenAPI Specification
openapi: 3.0.1
info:
title: Thinkific Admin Bundles Products 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: Products
description: Products operations
paths:
/products:
get:
tags:
- Products
summary: List products
operationId: getProducts
parameters:
- 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: Products response
content:
application/json:
schema:
$ref: '#/components/schemas/GetProductsResponse'
403:
$ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
/products/{id}:
get:
tags:
- Products
summary: Get product by ID
description: Returns the Product identified by the provided id.
operationId: getProductByID
parameters:
- name: id
in: path
description: Id of the product in the form of an integer
required: true
schema:
type: number
responses:
200:
description: Products response
content:
application/json:
schema:
$ref: '#/components/schemas/ProductResponse'
403:
$ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
404:
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorNotFound'
/products/{id}/related:
get:
tags:
- Products
summary: Get related products
description: Returns a list of products that are related to the Product identified by the provided id.
operationId: getRelatedProductByProductID
parameters:
- name: id
in: path
description: Id of the product 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: Products response
content:
application/json:
schema:
$ref: '#/components/schemas/GetProductsResponse'
403:
$ref: '#/components/responses/ErrorForbiddenAppsNotAvailableResponse'
404:
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorNotFound'
components:
responses:
ErrorForbiddenAppsNotAvailableResponse:
description: Access Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorForbiddenAppsNotAvailable'
schemas:
ProductPriceResponse:
type: object
properties:
id:
type: number
description: The ID of the Product Price as an integer.
example: 4.0
is_primary:
type: boolean
description: A boolean indicating whether the Product Price is the default.
example: true
default: false
payment_type:
type: string
description: The type of payment. Must be one of 'free', 'one-time', 'subscription', or 'payment-plan'.
enum:
- free
- one-time
- subscription
- payment-plan
example: subscription
label:
type: string
description: The description for the Product Price. This value is required when is_primary is false.
example: null
default: null
price:
type: string
description: The amount in dollars to be charged.
example: '10.0'
days_until_expiry:
type: string
description: The number of days, after purchase, that a student will be enrolled in the course.
example: null
pay_button_text:
type: string
description: This text that is displayed on the Buy Button on the course card and the course landing page.
example: null
number_of_payments:
type: string
description: The number of recurring payments for a Product Price with payment_type of 'payment-plan'.
example: null
interval:
type: string
description: The billing frequency. Must be one of 'month' or 'year'.
enum:
- month
- year
example: month
interval_count:
type: string
description: The number of intervals between billings. For example, if interval is 'month' and interval_count is '1', the billing frequency is once every month.
example: '1'
trial_interval:
type: string
description: The interval for the trial period. Must be one of 'day' or 'month'.
enum:
- day
- month
example: null
trial_interval_count:
type: string
description: The number of intervals for the trial period. For example, if trial_interval is 'month' and trial_interval_count is '6', the free trial will end (and regular payments will begin) in 6 months.
example: null
custom_first_price:
type: string
description: Students pay this amount for the first payment period of the subscription.
example: null
price_name:
type: string
description: The name of the Product Price. If is_primary is true, returns the name of the product, otherwise returns "{Product name} - {Product Price label}".
example: Learn Jiu Jitsu
currency:
type: string
description: The three-letter ISO currency code of the Product Price. Must be a supported currency.
example: usd
default: usd
Meta:
type: object
properties:
pagination:
$ref: '#/components/schemas/Pagination'
GetProductsResponse:
required:
- items
- meta
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/ProductResponse'
meta:
$ref: '#/components/schemas/Meta'
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.
ProductResponse:
type: object
properties:
id:
type: number
description: The ID of the Product as an integer.
example: 6.0
created_at:
type: string
description: The date and time that the Product was created.
format: date-time
example: '2018-01-01T01:01:00Z'
productable_id:
type: number
description: The ID of the Course or Bundle that is represented by the Product.
example: 6.0
productable_type:
type: string
description: The type of item that the Product represents.
example: Course
price:
type: number
description: 'The price of the Product. ** NOTE: price will be deprecated in future versions of the API **'
example: 10.99
position:
type: number
description: The position of the Product within the site. Used for ordering.
example: 1.0
status:
type: string
description: The status of the Product. Can be either 'published' or 'draft'.
example: published
name:
type: string
description: The name of the Product.
example: My Course
private:
type: boolean
description: A boolean indicating whether the Product is private. When private, a Product cannot be purchased. A user must be enrolled manually.
example: false
hidden:
type: boolean
description: A boolean indicating whether the Product is hidden. When hidden, the Product will not appear on any site pages. It's landing page will be still be accessible via a link, however.
example: false
subscription:
type: boolean
description: 'A boolean indicating whether the Product is a subscription or not. '
example: false
days_until_expiry:
type: number
description: If access to a Product can end, this value controls how many days access is granted for from the date of enrollment.
example: 365.0
has_certificate:
type: boolean
description: A boolean indicating whether the Product has a certificate.
example: false
keywords:
type: string
description: Keywords associated with the Product.
example: some key words
seo_title:
type: string
description: The SEO title of the Product.
example: Product Title
seo_description:
type: string
description: The SEO description of the Product.
example: Description
collection_ids:
type: array
description: The IDs of the Categories to which this Product belongs as integers.
example:
- 2
- 3
- 5
items:
type: number
related_product_ids:
type: array
description: The IDs of any related Products as integers.
example:
- 16
- 22
items:
type: number
description:
type: string
example: Product Description
description: The description of the product (course or bundle)
card_image_url:
type: string
example: http://example.com/card.jpg
description: The card image URL for the product.
slug:
type: string
description: The slug of the product
example: new-product
product_prices:
type: array
description: The Product Price objects for the Product.
items:
$ref: '#/components/schemas/ProductPriceResponse'
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
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/