The offer system is a core part of Kajabi’s e-commerce functionality, allowing course creators and digital product owners to monetize their content through various pricing and payment models while maintaining flexibility in how offers are presented and processed.
title (string) - Required, public name of the offer shown to customersdescription (string) - Optional, detailed information about what’s included in the offerinternal_title (string) - Optional, for internal reference/organization (not shown to customers)currency (string) - The currency of the offer, defaults to USDprice_in_cents (integer) - The USD price in cents (for precise decimal handling)payment_type (string) - Indicates the payment structuretoken (string) - A unique identifier for the offer, particularly in checkout URLspayment_method (string) - Indicates the payment method, Returns empty string if no payment method is setprice_description (string) - Human-readable representation of the offer’s price, includes formatting and currency informationcheckout_url (string) - Full URL where customers can purchase the offer
recurring_offer (boolean) - Whether the offer has recurring paymentssubscription (boolean) - Whether the offer is a subscription offerone_time (boolean) - Whether the offer is a one-time offersingle (boolean) - Whether the offer is a single offerfree (boolean) - Whether the offer is a free offerimage_url (string) - URL to the image associated with the offer (nullable)Use the include parameter to include related products:
GET /v1/offers/123?include=productsResponse will include products relationship
{
"data": {
"id": "123",
"type": "offers",
"attributes": {
"title": "Advanced Course Bundle",
"description": "Complete advanced course bundle with expert guidance",
"internal_title": "advanced_course_bundle",
"currency": "USD",
"price_in_cents": 19900,
"payment_type": "stripe",
"token": "123",
"payment_method": "stripe",
"price_description": "$199.00",
"checkout_url": "https://api.kajabi.com/checkout/123",
"recurring_offer": false,
"subscription": false,
"one_time": true,
"single": true,
"free": false,
"image_url": "https://api.kajabi.com/images/456"
},
"relationships": {
"products": {
"data": [
{
"id": "456",
"type": "products"
}
]
}
}
},
"included": [
{
"id": "456",
"type": "products",
"attributes": {
"created_at": "2021-01-01T00:00:00Z",
"title": "Advanced Course",
"description": "Complete advanced course with expert guidance",
"status": "ready",
"members_aggregate_count": 100,
"product_type_name": "Course",
"product_type_id": 456,
"publish_status": "published",
"image_url": "https://api.kajabi.com/images/456"
}
}
]
}
GET /v1/offers/123?fields[offers]=title,price_in_centsResponse will only include requested fields
{
"data": {
"id": "123",
"type": "offers",
"attributes": {
"title": "Advanced Course Bundle",
"price_in_cents": 19900
}
}
}
You can combine include and sparse fields in a single request:
GET /v1/offers/123?include=products&fields[offers]=title,description&fields[products]=title,publish_statusResponse will include offer and products with sparse fields
{
"data": {
"id": "123",
"type": "offers",
"attributes": {
"title": "Advanced Course Bundle",
"description": "Complete advanced course bundle with expert guidance"
},
"relationships": {}
},
"included": [
{
"id": "456",
"type": "products",
"attributes": {
"title": "Advanced Course",
"publish_status": "published"
}
}
]
}
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Load the related resources, for example ?include=products
Partial attributes as specified, e.g. fields[offers]=title,price_in_cents