openapi: 3.0.3
info:
title: Kajabi API V1 Authentication Orders API
version: 1.1.0
description: "## Public API\n* Server URL `https://api.kajabi.com`\n* Endpoint paths are prefixed with `/v1`\n* Version endpoint `GET https://api.kajabi.com/v1/version`\n* See the [Developers Site](https://developers.kajabi.com) for documentation and examples.\n* Try the demo [Postman collection](https://www.postman.com/kajabi-apis/beta-public-api-demo/collection/fg4iyaz/kajabi-public-api-v1)\n## API Keys\n* Your API `client_id` and `client_secret` are available on the [User API Keys](https://app.kajabi.com/admin/settings/security) section of the Kajabi Admin Portal.\n * Custom API Keys can be created with specific permissions.\n * Click the \"Create User API Key\" button, enter a name (e.g. \"My project\"), select the user and permissions, and click \"Create\".\n * For security purposes, you may \"Delete\" or \"Rotate\" the api credentials at any time; which will invalidate any access tokens granted with the credentials.\n## Video Walkthroughs\n* [Capabilities](https://drive.google.com/file/d/1Puc9B2sSdA-RQb7YMxmUXg4FVoEXytoc/view?usp=sharing)\n* [Getting Started](https://drive.google.com/file/d/1hbGRShkxven_QMWvgYrerHKURbcZrnvJ/view?usp=sharing)\n* [Error Examples](https://drive.google.com/file/d/1i0wQK71I1jpaZVsxYwsn62gVj40S_E7Y/view?usp=sharing)\n* [External Contact Form](https://drive.google.com/file/d/1HqpULXvan5TOK3LvM7nILCuCkCaX0kFT/view?usp=sharing)\n"
contact:
email: support@kajabi.com
name: Support
url: https://help.kajabi.com/hc/en-us/articles/4404549690523-How-to-Get-Help-From-Kajabi-Live-Agents
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://api.kajabi.com
description: Production
tags:
- name: Orders
paths:
/v1/order_items:
get:
summary: List order items
description: "Order items represent individual products or offers within an order.\n\n## Pagination\nUse `page[number]` and `page[size]` parameters to paginate results:\n### Get first page of 10 items\n* `GET /v1/order_items?page[number]=1&page[size]=10`\n### Get second page of 25 items\n* `GET /v1/order_items?page[number]=2&page[size]=25`\n\nThe response includes pagination links and meta data:\n```json\n{\n \"links\": {\n \"self\": \"https://api.kajabi.com/v1/order_items?page[number]=2&page[size]=10\",\n \"first\": \"https://api.kajabi.com/v1/order_items?page[number]=1&page[size]=10\",\n \"prev\": \"https://api.kajabi.com/v1/order_items?page[number]=1&page[size]=10\",\n \"next\": \"https://api.kajabi.com/v1/order_items?page[number]=3&page[size]=10\",\n \"last\": \"https://api.kajabi.com/v1/order_items?page[number]=5&page[size]=10\"\n },\n \"meta\": {\n \"total_pages\": 5,\n \"total_count\": 50,\n \"current_page\": 2\n }\n}\n```\n## Filtering\nUse filter parameters to narrow down results:\n### Filter by site\nUse the `filter[site_id]` parameter to get order items for a specific site:\n* `GET /v1/order_items?filter[site_id]=123`\n### Filter by item type\n* `GET /v1/order_items?filter[item_type_eq]=Offer`\n### Filter by item ID\n* `GET /v1/order_items?filter[item_id_eq]=123`\n### Filter by fulfilled status\n* `GET /v1/order_items?filter[fulfilled_at_null]=true` (unfulfilled items)\n* `GET /v1/order_items?filter[fulfilled_at_null]=false` (fulfilled items)\n\n## Advanced Filtering Examples\n### Range queries\n* `GET /v1/order_items?filter[site_id]=123&filter[quantity_gt]=1`\n* `GET /v1/order_items?filter[site_id]=123&filter[total_price_in_cents_gteq]=1000&filter[total_price_in_cents_lteq]=10000`\n### Pattern matching\n* `GET /v1/order_items?filter[site_id]=123&filter[item_type_cont]=Off`\n* `GET /v1/order_items?filter[site_id]=123&filter[title_i_cont]=course` (case insensitive)\n### Array filters\n* `GET /v1/order_items?filter[site_id]=123&filter[item_id_in]=123,456,789`\n* `GET /v1/order_items?filter[site_id]=123&filter[item_type_not_in]=Bundle,Subscription`\n\n## Sorting\nUse the `sort` parameter to sort the results:\n### Sort by fulfilled_at in ascending order\n* `GET /v1/order_items?filter[site_id]=123&sort=fulfilled_at`\n"
tags:
- Orders
security:
- Bearer: []
parameters:
- name: sort
in: query
required: false
description: 'Sort order, use: created_at, quantity, fulfilled_at. For descending order use ''-'' e.g. &sort=-created_at'
schema:
type: string
- name: page[number]
in: query
required: false
schema:
type: integer
- name: page[size]
in: query
required: false
description: Number of documents
schema:
type: integer
- name: fields[order_items]
in: query
required: false
description: Partial attributes as specified, e.g. fields[order_items]=quantity,title,total_price_in_cents
schema:
type: string
- name: filter[site_id]
in: query
required: false
description: Filter by site_id, for example ?filter[site_id]=111
schema:
type: string
- name: filter[item_type_eq]
in: query
required: false
description: Filter by item type, for example ?filter[item_type_eq]=Offer
schema:
type: string
- name: filter[item_id_eq]
in: query
required: false
description: Filter by item ID, for example ?filter[item_id_eq]=123
schema:
type: string
- name: filter[fulfilled_at_null]
in: query
required: false
description: Filter by fulfillment status, for example ?filter[fulfilled_at_null]=true
schema:
type: boolean
responses:
'200':
description: Success, list of order items which the current user may access
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/order_items_index_response'
'401':
description: Unauthorized, Authorization header is missing or invalid
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_unauthorized'
'403':
description: Forbidden, insufficient permission to access the resource
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_forbidden'
/v1/order_items/{id}:
get:
summary: Order item details
description: 'Shows details of an order item
Order items represent individual products or offers within an order and contain:
* Product/offer information
* Pricing details
* Quantity information
* Fulfillment status
## Order Item Attributes
* `quantity` (integer) - Number of items purchased
* `currency_code` (string) - The ISO currency code for the item
* `item_type` (string) - Type of item (e.g., "Offer")
* `item_id` (integer) - ID of the associated item
* `title` (string) - Title of the item
* `total_price_in_cents` (integer) - Total price for this line item
* `subtotal_in_cents` (integer) - Subtotal before taxes and discounts
* `sales_tax_amount_in_cents` (integer) - Sales tax amount for this item
* `discount_amount_in_cents` (integer) - Discount amount for this item
* `fulfilled_at` (string) - Timestamp when the item was fulfilled
* `created_at` (string) - Timestamp when the order item was created
## Include Related Resources
Use the `include` parameter to load related resources:
### Include order
* `GET /v1/order_items/123?include=order`
'
tags:
- Orders
security:
- Bearer: []
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: include
in: query
required: false
description: Load the related resources, for example ?include=order
schema:
type: string
- name: fields[order_items]
in: query
required: false
description: Partial attributes as specified, e.g. fields[order_items]=quantity,title,total_price_in_cents
schema:
type: string
responses:
'200':
description: Success, shows details of an order item
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/order_items_show_response'
'401':
description: Unauthorized, Authorization header is missing or invalid
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_unauthorized'
'403':
description: Forbidden, insufficient permission to access the resource
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_forbidden'
'404':
description: order item not found
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_not_found'
/v1/orders:
get:
summary: List orders
description: "Orders for a site\n## Pagination\nUse `page[number]` and `page[size]` parameters to paginate results:\n### Get first page of 10 items\n* `GET /v1/orders?page[number]=1&page[size]=10`\n### Get second page of 25 items\n* `GET /v1/orders?page[number]=2&page[size]=25`\n\nThe response includes pagination links and meta data:\n```json\n{\n \"links\": {\n \"self\": \"https://api.kajabi.com/v1/orders?page[number]=2&page[size]=10\",\n \"first\": \"https://api.kajabi.com/v1/orders?page[number]=1&page[size]=10\",\n \"prev\": \"https://api.kajabi.com/v1/orders?page[number]=1&page[size]=10\",\n \"next\": \"https://api.kajabi.com/v1/orders?page[number]=3&page[size]=10\",\n \"last\": \"https://api.kajabi.com/v1/orders?page[number]=5&page[size]=10\"\n },\n \"meta\": {\n \"total_pages\": 5,\n \"total_count\": 50,\n \"current_page\": 2\n }\n}\n```\n## Sorting\nUse the `sort` parameter to sort the results:\n### Sort by order_number in ascending order\n* `GET /v1/orders?sort=order_number`\n### Sort by created_at in descending order\n* `GET /v1/orders?sort=-created_at`\n\n## Filtering\nUse filter parameters to narrow down results:\n### Filter by site\nUse the `filter[site_id]` parameter to get orders for a specific site:\n* `GET /v1/orders?filter[site_id]=123`\n### Filter by customer\nUse the `filter[customer_id]` parameter to get orders for a specific customer:\n* `GET /v1/orders?filter[customer_id]=456789`\n### Filter by order number\n* `GET /v1/orders?filter[order_number_eq]=12345`\n### Filter by fulfilled status\n* `GET /v1/orders?filter[fulfilled_at_null]=true` (unfulfilled orders)\n* `GET /v1/orders?filter[fulfilled_at_null]=false` (fulfilled orders)\n\n## Advanced Filtering Examples\n### Range queries\n* `GET /v1/orders?filter[site_id]=123&filter[created_at_gteq]=2024-01-01&filter[created_at_lteq]=2024-12-31`\n* `GET /v1/orders?filter[site_id]=123&filter[total_price_in_cents_gt]=5000`\n### Pattern matching\n* `GET /v1/orders?filter[site_id]=123&filter[order_number_cont]=2024`\n* `GET /v1/orders?filter[site_id]=123&filter[currency_code_start]=US`\n### Array filters\n* `GET /v1/orders?filter[site_id]=123&filter[currency_code_in]=USD,EUR,GBP`\n"
tags:
- Orders
security:
- Bearer: []
parameters:
- name: sort
in: query
required: false
description: 'Sort order, use: order_number, created_at, fulfilled_at. For descending order use ''-'' e.g. &sort=-created_at'
schema:
type: string
- name: page[number]
in: query
required: false
schema:
type: integer
- name: page[size]
in: query
required: false
description: Number of documents
schema:
type: integer
- name: fields[orders]
in: query
required: false
description: Partial attributes as specified, e.g. fields[orders]=order_number,total_price_in_cents
schema:
type: string
- name: filter[site_id]
in: query
required: false
description: Filter by site_id, for example ?filter[site_id]=111
schema:
type: string
- name: filter[customer_id]
in: query
required: false
description: Filter by customer_id, for example ?filter[customer_id]=456789
schema:
type: string
- name: filter[order_number_eq]
in: query
required: false
description: Filter by order number, for example ?filter[order_number_eq]=12345
schema:
type: string
- name: filter[fulfilled_at_null]
in: query
required: false
description: Filter by fulfillment status, for example ?filter[fulfilled_at_null]=true
schema:
type: boolean
responses:
'200':
description: Success, list of orders which the current user may access
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/orders_index_response'
'401':
description: Unauthorized, Authorization header is missing or invalid
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_unauthorized'
'403':
description: Forbidden, insufficient permission to access the resource
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_forbidden'
/v1/orders/{id}:
get:
summary: Order details
description: 'Shows details of an order
Orders represent completed purchase transactions and contain:
* Order items (products/offers purchased)
* Payment information
* Customer information
* Fulfillment status
## Order Attributes
* `order_number` (integer) - A unique identifier for the order within the site
* `currency_code` (string) - The ISO currency code for the order (e.g., "USD")
* `total_price_in_cents` (integer) - Total price including taxes and discounts
* `subtotal_in_cents` (integer) - Subtotal before taxes and discounts
* `sales_tax_amount_in_cents` (integer) - Total sales tax amount
* `discount_amount_in_cents` (integer) - Total discount amount
* `fulfilled_at` (string) - Timestamp when the order was fulfilled
* `created_at` (string) - Timestamp when the order was created
## Include Related Resources
Use the `include` parameter to load related resources:
### Include order items, customer
* `GET /v1/orders/123?include=order_items,customer`
'
tags:
- Orders
security:
- Bearer: []
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: include
in: query
required: false
description: Load the related resources, for example ?include=order_items,customer,site
schema:
type: string
- name: fields[orders]
in: query
required: false
description: Partial attributes as specified, e.g. fields[orders]=order_number,total_price_in_cents
schema:
type: string
responses:
'200':
description: Success, shows details of an order
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/orders_show_response'
'401':
description: Unauthorized, Authorization header is missing or invalid
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_unauthorized'
'403':
description: Forbidden, insufficient permission to access the resource
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_forbidden'
'404':
description: order not found
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/errors_not_found'
components:
schemas:
resource_identifiers:
type: array
items:
$ref: '#/components/schemas/resource_identifier'
orders_index_response:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
enum:
- orders
attributes:
$ref: '#/components/schemas/orders_attributes'
relationships:
type: object
properties:
site:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifier'
customer:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifier'
order_items:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifiers'
links:
type: object
properties:
self:
type: string
current:
type: string
order_items_show_response:
type: object
properties:
data:
type: object
properties:
id:
type: string
type:
type: string
enum:
- order_items
attributes:
$ref: '#/components/schemas/order_items_attributes'
relationships:
type: object
properties:
order:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifier'
links:
type: object
properties:
self:
type: string
current:
type: string
errors_not_found:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/errors_attributes'
resource_identifier:
type: object
properties:
id:
type: string
type:
type: string
required:
- id
- type
errors_attributes:
type: object
properties:
status:
type: string
source:
type: object
nullable: true
properties:
pointer:
type: string
title:
type: string
detail:
type: string
orders_show_response:
type: object
properties:
data:
type: object
properties:
id:
type: string
type:
type: string
enum:
- orders
attributes:
$ref: '#/components/schemas/orders_attributes'
relationships:
type: object
properties:
site:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifier'
customer:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifier'
order_items:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifiers'
links:
type: object
properties:
self:
type: string
current:
type: string
order_items_attributes:
type: object
properties:
quantity:
type: integer
currency_code:
type: string
item_type:
type: string
item_id:
type: integer
title:
type: string
fulfilled_at:
type:
- string
- 'null'
created_at:
type: string
format: date-time
readOnly: true
description: ISO 8601 date-time, read only
total_price_in_cents:
type: integer
subtotal_in_cents:
type: integer
sales_tax_amount_in_cents:
type: integer
discount_amount_in_cents:
type: integer
formatted_total_price:
type: string
formatted_subtotal:
type: string
currency_symbol:
type: string
errors_unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/errors_attributes'
errors_forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/errors_attributes'
order_items_index_response:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
enum:
- order_items
attributes:
$ref: '#/components/schemas/order_items_attributes'
relationships:
type: object
properties:
order:
type: object
properties:
data:
$ref: '#/components/schemas/resource_identifier'
links:
type: object
properties:
self:
type: string
current:
type: string
orders_attributes:
type: object
properties:
order_number:
type: integer
currency_code:
type: string
fulfilled_at:
type:
- string
- 'null'
created_at:
type: string
format: date-time
readOnly: true
description: ISO 8601 date-time, read only
total_price_in_cents:
type: integer
subtotal_in_cents:
type: integer
sales_tax_amount_in_cents:
type: integer
discount_amount_in_cents:
type: integer
formatted_total_price:
type: string
formatted_subtotal:
type: string
currency_symbol:
type: string
securitySchemes:
Bearer:
type: http
scheme: bearer
x-mint:
mcp:
enabled: true