curl --request GET \
--url http://localhost:8080/chat/sessions/{session_id} \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/chat/sessions/{session_id}"
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/{session_id}', 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/{session_id}",
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/{session_id}"
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/{session_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/chat/sessions/{session_id}")
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{
"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",
"recording_url": "<string>",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "jsmith@example.com",
"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"
}
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Get a chat session
Get a chat session — Retrieves details and call recording of a specific chat session by its ID. Use when orchestrating conversations from code — creating sessions, sending messages, or listing…
curl --request GET \
--url http://localhost:8080/chat/sessions/{session_id} \
--header 'Authorization: Bearer <token>'import requests
url = "http://localhost:8080/chat/sessions/{session_id}"
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/{session_id}', 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/{session_id}",
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/{session_id}"
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/{session_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/chat/sessions/{session_id}")
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{
"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",
"recording_url": "<string>",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"email": "jsmith@example.com",
"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"
}
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}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.
The recording_url field contains a download link for the latest completed phone
or web call recording, or null when unavailable. Links expire after seven days;
request the session again to get a fresh link. This field is only included when
getting a session by ID.
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.
Path Parameters
The unique identifier of the chat session
Response
Default Response
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$All tags currently assigned to this session, ordered by tag name. Empty when no tags are assigned.
Show child attributes
Show child attributes
open, closed_resolved, closed_unresolved Id of the custom status refining status, or null when only the built-in status applies. Resolve it with GET /custom-statuses.
assumed_resolved, handed_off, resolved angry, happy, neutral AI-generated summary of the conversation. Populated for both AI-resolved and handed-off sessions once the session has been summarized; null otherwise.
Session title: the email subject, a subject set by an agent, or an AI-generated title. Null until one is set.
Show child attributes
Show child attributes
Current session assignment. AI and unassigned sessions have no assignee ID.
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Support team assigned to this session. Null when no team can be resolved within the session organization.
Show child attributes
Show child attributes
Timestamp of the first recorded human reply to this session. Null when no human reply has been recorded.
Download link for the latest completed call recording in a phone or web session, or null when unavailable. Valid for seven days; fetch this session again to refresh it. Available only when getting a session by ID.
Show child attributes
Show child attributes
Deprecated: use assignee. Contains the recorded human user ID as a string, or null for AI and unassigned sessions. Use assignee.type to distinguish them. This deprecation applies only to response fields; assignment requests still accept assignee_id.
Session-level custom data stored on the chat session.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?