curl --request GET \
--url https://app.livechatai.com/api/v2/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.livechatai.com/api/v2/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.livechatai.com/api/v2/conversations', 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.livechatai.com/api/v2/conversations",
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.livechatai.com/api/v2/conversations"
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.livechatai.com/api/v2/conversations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.livechatai.com/api/v2/conversations")
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{
"status": "success",
"data": {
"conversations": [
{
"id": "chat_1234567890",
"isResolved": false,
"isStarred": false,
"isMuted": false,
"isAgent": false,
"integrationType": "WHATSAPP",
"contact": {
"id": "contact_1234567890",
"name": "John Doe",
"phone": "+1234567890",
"email": "john@example.com",
"distinctId": "user_12345",
"attributes": {
"planType": "premium"
}
},
"agent": {
"id": "agent_1234567890",
"name": "Jane Smith",
"email": "jane@company.com",
"avatar": "https://example.com/avatar.jpg"
},
"lastMessageDate": "2024-01-20T14:45:00Z",
"lastVisitorMessageDate": "2024-01-20T14:30:00Z",
"lastBotMessageDate": "2024-01-20T14:45:00Z",
"lastAgentMessageDate": "2024-01-19T10:00:00Z",
"resolution": {
"verdict": "UNRESOLVED",
"handledBy": "HUMAN_AGENT",
"reason": "The customer asked for a refund status, the agent promised to check and never replied.",
"confidence": 0.82,
"analyzedAt": "2024-01-20T15:00:00Z"
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-20T14:45:00Z"
}
],
"meta": {
"total": 150,
"perPage": 20,
"currentPage": 1,
"totalPages": 8
}
}
}List conversations
List conversations for an agent, with pagination and filtering options. This endpoint supports various filters including date range, agent assignment, and conversation status.
curl --request GET \
--url https://app.livechatai.com/api/v2/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.livechatai.com/api/v2/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.livechatai.com/api/v2/conversations', 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.livechatai.com/api/v2/conversations",
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.livechatai.com/api/v2/conversations"
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.livechatai.com/api/v2/conversations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.livechatai.com/api/v2/conversations")
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{
"status": "success",
"data": {
"conversations": [
{
"id": "chat_1234567890",
"isResolved": false,
"isStarred": false,
"isMuted": false,
"isAgent": false,
"integrationType": "WHATSAPP",
"contact": {
"id": "contact_1234567890",
"name": "John Doe",
"phone": "+1234567890",
"email": "john@example.com",
"distinctId": "user_12345",
"attributes": {
"planType": "premium"
}
},
"agent": {
"id": "agent_1234567890",
"name": "Jane Smith",
"email": "jane@company.com",
"avatar": "https://example.com/avatar.jpg"
},
"lastMessageDate": "2024-01-20T14:45:00Z",
"lastVisitorMessageDate": "2024-01-20T14:30:00Z",
"lastBotMessageDate": "2024-01-20T14:45:00Z",
"lastAgentMessageDate": "2024-01-19T10:00:00Z",
"resolution": {
"verdict": "UNRESOLVED",
"handledBy": "HUMAN_AGENT",
"reason": "The customer asked for a refund status, the agent promised to check and never replied.",
"confidence": 0.82,
"analyzedAt": "2024-01-20T15:00:00Z"
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-20T14:45:00Z"
}
],
"meta": {
"total": 150,
"perPage": 20,
"currentPage": 1,
"totalPages": 8
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Unique identifier of the agent
"clx1234567890abcdef"
Page number for pagination (default: 1)
x >= 11
Number of conversations per page (default: 20, max: 100)
1 <= x <= 10020
Type of conversations to retrieve
unassigned, your-inbox, all "all"
Sort order for lastMessageDate (default: desc)
asc, desc "desc"
Filter by conversation status
open, close "open"
Filter by start date. Supports Unix timestamp in seconds (e.g., 1747196400) or ISO 8601 format (e.g., 2024-01-01)
"2024-01-01"
Filter by end date. Supports Unix timestamp in seconds (e.g., 1747200000) or ISO 8601 format (e.g., 2024-01-31)
"2024-01-31"
Filter by assigned agent ID. Use 'ai' for AI-handled conversations (no human agent assigned)
"user_1234567890"
Filter by conversation sentiment
POSITIVE, NEGATIVE, NEUTRAL, UNSPECIFIED "POSITIVE"
Filter by conversation topic name
"billing"
Filter by conversation channel (integration type or chat type)
WHATSAPP, SLACK, MESSENGER, FULLPAGE, INLINECHAT, PREVIEW, ONBOARDING "WHATSAPP"
Filter by resolution status
AIHelped, AIDidNotHelp, TalkToAgent "AIHelped"
Filter by the post-close resolution verdict: whether the customer's issue actually ended up solved. Comma-separated for several values (?resolutionVerdict=RESOLVED,UNRESOLVED); an unknown value returns 400. Requires the resolution analysis add-on. Conversations without a verdict (still open, reopened, or not yet analysed) are excluded.
RESOLVED, UNRESOLVED Filter by who actually carried the conversation to its end. NONE means nobody meaningfully engaged - for example the customer asked for a human and none ever replied. This is not the same as resolutionStatus=TalkToAgent, which only means a human was requested. Comma-separated for several values (?handledBy=AI,NONE); an unknown value returns 400. Requires the resolution analysis add-on.
AI, HUMAN_AGENT, NONE Filter using a saved inbox view ID. When provided, applies all filters configured in the inbox view. Create inbox views from the dashboard. Other filters can be combined with viewId
"clx1234567890viewid"

