List chat sessions
curl --request GET \
--url http://localhost:8080/chat/sessions \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/chat/sessions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:8080/chat/sessions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/chat/sessions",
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 := "http://localhost:8080/chat/sessions"
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("http://localhost:8080/chat/sessions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/chat/sessions")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": [
{
"tag_name": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"status": "open",
"sub_status_id": "<string>",
"ai_closure_type": "assumed_resolved",
"sentiment": "angry",
"summary": "<string>",
"title": "<string>",
"channel": {
"type": "web"
},
"assignee": {
"type": "human",
"id": 0,
"name": "<string>"
},
"support_team": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"ticket_number": 123,
"assist_mode": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"first_human_message_at": "2023-11-07T05:31:56Z",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "[email protected]",
"phone_number": "<string>",
"name": "<string>",
"custom_data": {},
"non_verified_custom_data": {},
"created_at": "<string>",
"updated_at": "<string>",
"non_verified_name": "<string>",
"non_verified_email": "<string>"
},
"language": "<string>",
"assignee_id": "<string>",
"custom_data": {},
"team": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>"
},
"handoff": {
"summary": "<string>",
"sentiment": "angry"
},
"ticketing_system": {
"name": "dynamics365",
"external_id": "<string>",
"id_type": "conversation_id"
}
}
],
"next": "<string>"
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Sessions
List chat sessions
Returns a paginated list of chat sessions for the organization. Use when orchestrating conversations from code — creating sessions, sending messages, or listing history for an…
GET
/
chat
/
sessions
List chat sessions
curl --request GET \
--url http://localhost:8080/chat/sessions \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/chat/sessions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:8080/chat/sessions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/chat/sessions",
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 := "http://localhost:8080/chat/sessions"
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("http://localhost:8080/chat/sessions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/chat/sessions")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": [
{
"tag_name": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"status": "open",
"sub_status_id": "<string>",
"ai_closure_type": "assumed_resolved",
"sentiment": "angry",
"summary": "<string>",
"title": "<string>",
"channel": {
"type": "web"
},
"assignee": {
"type": "human",
"id": 0,
"name": "<string>"
},
"support_team": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"ticket_number": 123,
"assist_mode": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"first_human_message_at": "2023-11-07T05:31:56Z",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "[email protected]",
"phone_number": "<string>",
"name": "<string>",
"custom_data": {},
"non_verified_custom_data": {},
"created_at": "<string>",
"updated_at": "<string>",
"non_verified_name": "<string>",
"non_verified_email": "<string>"
},
"language": "<string>",
"assignee_id": "<string>",
"custom_data": {},
"team": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>"
},
"handoff": {
"summary": "<string>",
"sentiment": "angry"
},
"ticketing_system": {
"name": "dynamics365",
"external_id": "<string>",
"id_type": "conversation_id"
}
}
],
"next": "<string>"
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Each session includes
A human assignee’s
tags, with each tag’s tag_name and created_at timestamp.
Tags are ordered by name. Sessions without tags return an empty array.
The support_team field contains the assigned support team’s id and name.
The ID remains stable when the team is renamed. This field is null when no
support team can be resolved for the session.
The first_human_message_at field contains the first recorded human reply time as an
ISO 8601 timestamp, or null when no human reply has been recorded. Internal notes
and automated messages do not set this timestamp. Later human replies do not change it.
The title field is the session title: the email subject, a subject set by an agent,
or an AI-generated title. It is null until one is set.
Use assignee to identify who is currently assigned to a session:
| Type | Example | Meaning |
|---|---|---|
| Human | {"type":"human","id":77,"name":"Alex Smith"} | The numeric ID matches GET /users. |
| AI | {"type":"ai"} | AI is assigned; no ID or name is returned. |
| None | {"type":"none"} | The session is unassigned. |
name matches the organization display name in GET /users.
An organization name override takes precedence; a blank or missing override falls
back to the account name. The name is null if the user is no
longer a member of the organization or cannot be found; the recorded ID remains
available for historical attribution. Reading a session does not require the
users:read scope. Reading the user directory, including emails, does.
The response field assignee_id is deprecated. Human IDs remain strings there;
AI and unassigned sessions return null. Clients that previously used the AI
placeholder must switch to assignee.type. Assignment requests continue to use
assignee_id with a numeric human user ID or null to unassign.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Pagination cursor to fetch the next set of results
Filter by handoff status. Use "true" or "false"
Filter by session status (open, closed_resolved, closed_unresolved)
Available options:
open, closed_resolved, closed_unresolved Available options:
web, email, phone_voice, slack, sms, whatsapp, instagram, messenger, api, web_voice, twitter, twitter_mentions, app_review, internal Filter sessions created after this ISO 8601 timestamp
Filter sessions created before this ISO 8601 timestamp
Filter sessions updated after this ISO 8601 timestamp
Filter sessions updated before this ISO 8601 timestamp
Was this page helpful?