List customers
List of customers
Pagination
Use page[number] and page[size] parameters to paginate results:
Get first page of 10 items
GET /v1/customers?page[number]=1&page[size]=10
Get second page of 25 items
GET /v1/customers?page[number]=2&page[size]=25
The response includes pagination links and meta data:
{
"links": {
"self": "https://app.kajabi.com/api/v1/customers?page[number]=2&page[size]=10",
"first": "https://app.kajabi.com/api/v1/customers?page[number]=1&page[size]=10",
"prev": "https://app.kajabi.com/api/v1/customers?page[number]=1&page[size]=10",
"next": "https://app.kajabi.com/api/v1/customers?page[number]=3&page[size]=10",
"last": "https://app.kajabi.com/api/v1/customers?page[number]=5&page[size]=10"
},
"meta": {
"total_pages": 5,
"total_count": 50,
"current_page": 2
}
}
Sorting
- The default Sorting is by created_at in descending order (newest first)
Sorting by created_at in ascending order (oldest first)
GET /v1/customers?filter[site_id]=123&sort=created_at
Use the sort parameter to sort the results:
Sort by name in ascending order
GET /v1/customers?filter[site_id]=123&sort=name
Sort by email in descending order
GET /v1/customers?filter[site_id]=123&sort=-email
Sort by net_revenue in ascending order
GET /v1/customers?filter[site_id]=123&sort=net_revenue
Sort by last_request_at in descending order
GET /v1/customers?filter[site_id]=123&sort=-last_request_at
Response will include customers sorted by the specified field
{
"data": [{
"id": "123",
"type": "customers",
"attributes": {
"name": "Alice Smith",
"email": "alice@example.com",
"external_user_id": "cust_123"
}
}]
}
Sparse Fields
Use the fields[customers] parameter to request only specific attributes:
Only return name and email attributes
GET /v1/customers?fields[customers]=name,email
Response will only include requested fields
{
"data": [{
"id": "123",
"type": "customers",
"attributes": {
"name": "Alice Smith",
"email": "alice@example.com"
}
}]
}
Filtering
Use the filter[site_id] parameter to filter customers by site:
Get customers for site with ID 123
GET /v1/customers?filter[site_id]=123
Response will include only customers from the specified site
{
"data": [{
"id": "456",
"type": "customers",
"attributes": {
"name": "Alice Smith",
"email": "alice@example.com",
"external_user_id": "cust_123"
},
"relationships": {
"site": {
"data": {
"id": "123",
"type": "sites"
}
}
}
}]
}
Using Indexed Data Search
{
"data": [{
"id": "456",
"type": "customers",
"attributes": {
"name": "John Smith",
"email": "smith.john@example.com"
},
"relationships": {
"site": {
"data": {
"id": "123",
"type": "sites"
}
}
}
}]
}
Using Multiple Filters
You can combine multiple filter parameters to refine your search:
Get customers from site 123 matching search term
GET /v1/customers?filter[site_id]=123&filter[search]=smith
Response will include only customers from the specified site matching the search term
{
"data": [{
"id": "456",
"type": "customers",
"attributes": {
"name": "Alice Smith",
"email": "alice@example.com",
"external_user_id": "cust_123"
},
"relationships": {
"site": {
"data": {
"id": "123",
"type": "sites"
}
}
}
}]
}
Filtering by Site and Offer
You can filter customers by both site and offer ownership:
Get customers from site 123 who have been granted offer 789
GET /v1/customers?filter[site_id]=123&filter[has_offer_id]=789
Response will include only customers from the specified site who have been granted the offer
{
"data": [{
"id": "456",
"type": "customers",
"attributes": {
"name": "Alice Smith",
"email": "alice@example.com",
"external_user_id": "cust_123"
},
"relationships": {
"site": {
"data": {
"id": "123",
"type": "sites"
}
},
"offers": {
"links": {
"self": "https://app.kajabi.com/api/v1/customers/456/relationships/offers",
"related": "https://app.kajabi.com/api/v1/customers/456/offers"
}
}
}
}]
}
Filtering by Site and Product
You can filter customers by both site and product ownership:
Get customers from site 123 who have purchased product 789
GET /v1/customers?filter[site_id]=123&filter[has_product_id]=789
Response will include only customers from the specified site who have purchased the product
{
"data": [{
"id": "456",
"type": "customers",
"attributes": {
"name": "Alice Smith",
"email": "alice@example.com",
"external_user_id": "cust_123"
},
"relationships": {
"site": {
"data": {
"id": "123",
"type": "sites"
}
},
"offers": {
"links": {
"self": "https://app.kajabi.com/api/v1/customers/456/relationships/offers",
"related": "https://app.kajabi.com/api/v1/customers/456/offers"
}
}
}
}]
}
Using Multiple Parameters Together
You can combine filtering, sparse fields, pagination and search in a single request:
Get page 2 of customers from site 123, including only name and email fields, searching for “smith”
GET /v1/customers?filter[site_id]=123&fields[customers]=name,email&page[number]=2&page[size]=10&filter[search]=smith
Response will include paginated, filtered customers with sparse fields
{
"data": [{
"id": "456",
"type": "customers",
"attributes": {
"name": "John Smith",
"email": "john.smith@example.com"
}
}],
"links": {
"self": "https://app.kajabi.com/api/v1/customers?filter[site_id]=123&fields[customers]=name,email&page[number]=2&page[size]=10&filter[search]=smith",
"first": "https://app.kajabi.com/api/v1/customers?filter[site_id]=123&fields[customers]=name,email&page[number]=1&page[size]=10&filter[search]=smith",
"prev": "https://app.kajabi.com/api/v1/customers?filter[site_id]=123&fields[customers]=name,email&page[number]=1&page[size]=10&filter[search]=smith",
"next": null,
"last": "https://app.kajabi.com/api/v1/customers?filter[site_id]=123&fields[customers]=name,email&page[number]=2&page[size]=10&filter[search]=smith"
},
"meta": {
"total_pages": 2,
"total_count": 15,
"current_page": 2
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Sort order, use: name, email, created_at, net_revenue, last_request_at for descending order use '-' e.g. &sort=-name
Number of documents
Sparse fields, use: name, email for example ?fields[customers]=name,email
It is recommended to always filter by site_id, for example ?filter[site_id]=111. This param is required when the account has multiple sites
Filter with fuzzy search of name/email, for example ?filter[search]=alexa
Filter customers created in the last N days, e.g. ?filter[created_in_last]=30
Filter customers not created in the last N days
Filter hidden customers
Filter customers who joined in the last N days
Filter customers active in the last N days
Filter customers inactive in the last N days
Filter customers whose name contains the given value
Filter customers whose email contains the given value
Filter customers whose phone number contains the given value
Filter customers whose address line 1 contains the given value
Filter customers whose address line 2 contains the given value
Filter customers whose city contains the given value
Filter customers whose state contains the given value
Filter customers whose country contains the given value
Filter customers whose zip code contains the given value
Filter customers with a specific tag ID
Filter customers with all specified tag IDs
Filter customers without the specified tag ID
Filter subscribed customers
Filter customers with a specific offer ID
Filter customers without the specified offer ID
Filter customers who used a specific coupon code
Filter customers who submitted a specific form ID
Filter customers who have not submitted the specified form ID
Filter customers who registered for a specific event ID
Filter customers who have not registered for the specified event ID
Filter customers who completed a specific assessment ID
Filter customers who passed a specific assessment ID
Filter customers who failed a specific assessment ID
Filter customers whose net revenue equals the given value
Filter customers whose net revenue is greater than the given value
Filter customers whose net revenue is less than the given value
Filter customers subscribed in the last N days
Filter customers unsubscribed in the last N days
Filter customers who have never subscribed
Filter customers who were sent a specific email broadcast ID
Filter customers who were not sent the specified email broadcast ID
Filter customers who were not sent any of the specified email broadcast IDs
Filter customers who did not receive the specified email broadcast ID
Filter customers who opened a specific email broadcast ID
Filter customers who did not open the specified email broadcast ID
Filter customers who clicked a specific email broadcast ID
Filter customers who did not click the specified email broadcast ID
Filter customers who bounced a specific email broadcast ID
Filter customers who did not bounce the specified email broadcast ID
Filter customers who dropped a specific email broadcast ID
Filter customers who did not drop the specified email broadcast ID
Filter customers who opened an email in the last N days
Filter customers who did not open an email in the last N days
Filter customers who were delivered an email in the last N days
Filter customers who were not delivered an email in the last N days
Filter customers who clicked an email in the last N days
Filter customers who did not click an email in the last N days
Filter customers that are hard bouncing
Filter customers who bounced in the last N days
Filter customers who complained in the last N days
Filter customers manually unsubscribed in the last N days
Filter customers who opted out in the last N days
Filter healthy customers with open data
Filter passive customers with open data
Filter unengaged customers with open data
Filter inactive customers with open data
Filter customers subscribed to a specific newsletter ID
Filter customers unsubscribed from a specific newsletter ID
Filter suppressed customers
Filter customers whose mobile phone number contains the given value
Filter customers subscribed to a specific email sequence ID
Filter customers not subscribed to a specific email sequence ID