curl --request POST \
--url https://api.livechatinc.com/v3.5/reports/agents/performance \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"from": "2026-06-08T00:00:00-00:00",
"to": "2026-06-15T23:59:59-00:00"
}
}
'import requests
url = "https://api.livechatinc.com/v3.5/reports/agents/performance"
payload = { "filters": {
"from": "2026-06-08T00:00:00-00:00",
"to": "2026-06-15T23:59:59-00:00"
} }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({filters: {from: '2026-06-08T00:00:00-00:00', to: '2026-06-15T23:59:59-00:00'}})
};
fetch('https://api.livechatinc.com/v3.5/reports/agents/performance', 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://api.livechatinc.com/v3.5/reports/agents/performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
'from' => '2026-06-08T00:00:00-00:00',
'to' => '2026-06-15T23:59:59-00:00'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.livechatinc.com/v3.5/reports/agents/performance"
payload := strings.NewReader("{\n \"filters\": {\n \"from\": \"2026-06-08T00:00:00-00:00\",\n \"to\": \"2026-06-15T23:59:59-00:00\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.livechatinc.com/v3.5/reports/agents/performance")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"from\": \"2026-06-08T00:00:00-00:00\",\n \"to\": \"2026-06-15T23:59:59-00:00\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.livechatinc.com/v3.5/reports/agents/performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"from\": \"2026-06-08T00:00:00-00:00\",\n \"to\": \"2026-06-15T23:59:59-00:00\"\n }\n}"
response = http.request(request)
puts response.read_body{
"name": "performance-report",
"records": {
"smith@example.com": {
"accepting_chats_time": 35296,
"chats_count": 4,
"chats_rated_bad": 0,
"chats_rated_good": 2,
"chatting_time": 55,
"first_response_chats_count": 3,
"first_response_time": 9.666666666666666,
"logged_in_time": 45304,
"not_accepting_chats_time": 10008
},
"agent@example.com": {
"accepting_chats_time": 24567,
"chats_count": 13,
"chats_rated_bad": 3,
"chats_rated_good": 5,
"chatting_time": 275,
"first_response_chats_count": 8,
"first_response_time": 8.133333,
"logged_in_time": 32110,
"not_accepting_chats_time": 7543
}
},
"summary": {
"chats_count": 17,
"chats_rated_bad": 3,
"chats_rated_good": 7,
"first_response_chats_count": 11,
"first_response_time": 8.55151490909091
}
}Performance
Returns the total number of agent chats, the number of good and bad ratings they received, and how well they performed in the early stages of a chat. The report also shows the time an agent spent chatting, accepting and not accepting chats, as well as the total time they were logged in.
curl --request POST \
--url https://api.livechatinc.com/v3.5/reports/agents/performance \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"from": "2026-06-08T00:00:00-00:00",
"to": "2026-06-15T23:59:59-00:00"
}
}
'import requests
url = "https://api.livechatinc.com/v3.5/reports/agents/performance"
payload = { "filters": {
"from": "2026-06-08T00:00:00-00:00",
"to": "2026-06-15T23:59:59-00:00"
} }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({filters: {from: '2026-06-08T00:00:00-00:00', to: '2026-06-15T23:59:59-00:00'}})
};
fetch('https://api.livechatinc.com/v3.5/reports/agents/performance', 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://api.livechatinc.com/v3.5/reports/agents/performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'filters' => [
'from' => '2026-06-08T00:00:00-00:00',
'to' => '2026-06-15T23:59:59-00:00'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.livechatinc.com/v3.5/reports/agents/performance"
payload := strings.NewReader("{\n \"filters\": {\n \"from\": \"2026-06-08T00:00:00-00:00\",\n \"to\": \"2026-06-15T23:59:59-00:00\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.livechatinc.com/v3.5/reports/agents/performance")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"from\": \"2026-06-08T00:00:00-00:00\",\n \"to\": \"2026-06-15T23:59:59-00:00\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.livechatinc.com/v3.5/reports/agents/performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"from\": \"2026-06-08T00:00:00-00:00\",\n \"to\": \"2026-06-15T23:59:59-00:00\"\n }\n}"
response = http.request(request)
puts response.read_body{
"name": "performance-report",
"records": {
"smith@example.com": {
"accepting_chats_time": 35296,
"chats_count": 4,
"chats_rated_bad": 0,
"chats_rated_good": 2,
"chatting_time": 55,
"first_response_chats_count": 3,
"first_response_time": 9.666666666666666,
"logged_in_time": 45304,
"not_accepting_chats_time": 10008
},
"agent@example.com": {
"accepting_chats_time": 24567,
"chats_count": 13,
"chats_rated_bad": 3,
"chats_rated_good": 5,
"chatting_time": 275,
"first_response_chats_count": 8,
"first_response_time": 8.133333,
"logged_in_time": 32110,
"not_accepting_chats_time": 7543
}
},
"summary": {
"chats_count": 17,
"chats_rated_bad": 3,
"chats_rated_good": 7,
"first_response_chats_count": 11,
"first_response_time": 8.55151490909091
}
}reports_readAuthorizations
Use your account ID as the username and your personal access token (PAT) as the password, or pass a Base64-encoded value directly in the Authorization header. For more information, see the personal access tokens guide.
Body
The time distribution of results.
hour, day The IANA Time Zone identifier (for example, America/Phoenix). By default, the timezone is taken from the request. If not provided, it's taken from the agent's timezone. When the agent's timezone cannot be determined, filters.from is used to derive it.
Filters for agents reports. If none provided, the report spans the last seven days. If filters are provided, they must contain exactly one time-based filter (from/to).
Show child attributes
Show child attributes
Was this page helpful?