curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"user_group_key": "68a1d2c3e4f5061728394a6c",
"created_by_id": "68a1d2c3e4f5061728394a6c",
"created_by_email": "jane@acme.com",
"created_by_name": "Jane Cooper",
"role": "user",
"is_anonymous_user": false,
"anonymous_visitor_id": "v_8f3k2m9q",
"agent_names": [
"support_agent"
],
"agent_count": 1,
"conversation_count": 2,
"message_count": 6,
"credit_count": 1.5,
"latest_time": "2026-01-15T09:31:07",
"agents": [
{
"agent_name": "support_agent",
"last_message_preview": "Your order ships tomorrow and should arrive by Friday.",
"last_message_time": "2026-01-15T09:31:07",
"conversation_count": 2,
"message_count": 6,
"credit_count": 1.5,
"conversations": [
{
"id": "68a1d2c3e4f5061728394a5b",
"app_id": "6820f3a4e7b91d003c45a1f2",
"agent_name": "support_agent",
"title": "Order #1042 delivery date",
"created_by_id": "68a1d2c3e4f5061728394a6c",
"created_by_email": "jane@acme.com",
"metadata": {
"name": "Order #1042 delivery date"
},
"created_date": "2026-01-15T09:23:41",
"updated_date": "2026-01-15T09:31:07",
"message_count": 6,
"credit_count": 1.5,
"first_message_preview": "Order #1042 delivery date",
"last_message_preview": "Your order ships tomorrow and should arrive by Friday.",
"last_message_time": "2026-01-15T09:31:07",
"answering": "ai",
"channel": "whatsapp"
}
],
"answering": "ai"
}
],
"conversations": [
{
"id": "68a1d2c3e4f5061728394a5b",
"app_id": "6820f3a4e7b91d003c45a1f2",
"agent_name": "support_agent",
"title": "Order #1042 delivery date",
"created_by_id": "68a1d2c3e4f5061728394a6c",
"created_by_email": "jane@acme.com",
"metadata": {
"name": "Order #1042 delivery date"
},
"created_date": "2026-01-15T09:23:41",
"updated_date": "2026-01-15T09:31:07",
"message_count": 6,
"credit_count": 1.5,
"first_message_preview": "Order #1042 delivery date",
"last_message_preview": "Your order ships tomorrow and should arrive by Friday.",
"last_message_time": "2026-01-15T09:31:07",
"answering": "ai",
"channel": "whatsapp"
}
],
"answering": "ai",
"channels": [
"whatsapp"
]
}
],
"total": 42
}{
"error": {
"code": "database_unavailable",
"message": "Database temporarily unavailable, please retry",
"details": {}
}
}List agent conversation users
Returns the app’s users who have conversations with its agents, most recently active first. Each user comes with totals, a breakdown by agent, and up to 100 of their conversations.
The response carries personal data about the app’s users. That includes their emails and names, and the start and end of their messages.
You can filter by:
- Text in the user’s email or name
- Agent
- App role
- Recent activity
Results use offset pagination. Page with limit and skip, and stop once you’ve read total users. Open a conversation’s messages with Get agent conversation.
This is limited to 60 requests a minute per app for each workspace’s personal API keys, so every personal API key in a workspace shares one allowance, and each workspace API key has its own. Some workspaces have a different limit.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/agent-configs/conversation-users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"user_group_key": "68a1d2c3e4f5061728394a6c",
"created_by_id": "68a1d2c3e4f5061728394a6c",
"created_by_email": "jane@acme.com",
"created_by_name": "Jane Cooper",
"role": "user",
"is_anonymous_user": false,
"anonymous_visitor_id": "v_8f3k2m9q",
"agent_names": [
"support_agent"
],
"agent_count": 1,
"conversation_count": 2,
"message_count": 6,
"credit_count": 1.5,
"latest_time": "2026-01-15T09:31:07",
"agents": [
{
"agent_name": "support_agent",
"last_message_preview": "Your order ships tomorrow and should arrive by Friday.",
"last_message_time": "2026-01-15T09:31:07",
"conversation_count": 2,
"message_count": 6,
"credit_count": 1.5,
"conversations": [
{
"id": "68a1d2c3e4f5061728394a5b",
"app_id": "6820f3a4e7b91d003c45a1f2",
"agent_name": "support_agent",
"title": "Order #1042 delivery date",
"created_by_id": "68a1d2c3e4f5061728394a6c",
"created_by_email": "jane@acme.com",
"metadata": {
"name": "Order #1042 delivery date"
},
"created_date": "2026-01-15T09:23:41",
"updated_date": "2026-01-15T09:31:07",
"message_count": 6,
"credit_count": 1.5,
"first_message_preview": "Order #1042 delivery date",
"last_message_preview": "Your order ships tomorrow and should arrive by Friday.",
"last_message_time": "2026-01-15T09:31:07",
"answering": "ai",
"channel": "whatsapp"
}
],
"answering": "ai"
}
],
"conversations": [
{
"id": "68a1d2c3e4f5061728394a5b",
"app_id": "6820f3a4e7b91d003c45a1f2",
"agent_name": "support_agent",
"title": "Order #1042 delivery date",
"created_by_id": "68a1d2c3e4f5061728394a6c",
"created_by_email": "jane@acme.com",
"metadata": {
"name": "Order #1042 delivery date"
},
"created_date": "2026-01-15T09:23:41",
"updated_date": "2026-01-15T09:31:07",
"message_count": 6,
"credit_count": 1.5,
"first_message_preview": "Order #1042 delivery date",
"last_message_preview": "Your order ships tomorrow and should arrive by Friday.",
"last_message_time": "2026-01-15T09:31:07",
"answering": "ai",
"channel": "whatsapp"
}
],
"answering": "ai",
"channels": [
"whatsapp"
]
}
],
"total": 42
}{
"error": {
"code": "database_unavailable",
"message": "Database temporarily unavailable, please retry",
"details": {}
}
}Authorizations
Personal access token, sent as Authorization: Bearer <token>. Each operation lists the permission it needs: read_only or full_access. A full-access token can call every operation. A read-only token can call only the operations that list read_only; anything else returns 403 read_only_credential_route_not_allowed.
Scopes
Query Parameters
Single field to sort users by, prefixed with - for descending. Either last_message_time, created_date, updated_date, agent_count, conversation_count, or credit_count. For example, -conversation_count puts the most active users first. Defaults to -last_message_time, and any other field sorts by last_message_time.
Was this page helpful?