curl --request GET \
--url https://integrations.salesask.com/v1/stats \
--header 'x-api-key: <api-key>'import requests
url = "https://integrations.salesask.com/v1/stats"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://integrations.salesask.com/v1/stats', 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://integrations.salesask.com/v1/stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://integrations.salesask.com/v1/stats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://integrations.salesask.com/v1/stats")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://integrations.salesask.com/v1/stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"stats": [
{
"totalRecordings": 123,
"recordingsClosed": 123,
"avgRecordingDuration": 123,
"avgTalkTime": 123,
"avgTalkRatio": 123,
"avgWaitedToTalkAvg": 123,
"avgTalkSpeed": 123,
"avgConversationSwitches": 123,
"avgSwitchesPerMinute": 123,
"avgQuestionsAsked": 123,
"avgProcessScore": 123,
"recordingsWithProcess": 123,
"recordingsWithCoaching": 123,
"recordingsWithActions": 123,
"totalActionItems": 123,
"reviewedCount": 123,
"totalReviews": 123,
"totalReviewMs": 123,
"avgReviewMs": 123,
"recordingsByTag": {},
"total": {},
"processQuestionBreakdown": [
{
"questionId": "<string>",
"question": "<string>",
"percentage": 123,
"yesCount": 123,
"totalCount": 123
}
],
"email": "<string>",
"name": "<string>"
}
],
"errors": [
{
"type": "email_not_found",
"value": "<string>"
}
]
}{
"message": "<string>"
}{
"message": "<string>"
}Get statistics
Aggregated call metrics grouped by user or team, over processed recordings. groupBy is required. Optionally scope by date range, teams, emails, AI template, and tags. Unknown emails are returned in errors[] rather than failing the request.
curl --request GET \
--url https://integrations.salesask.com/v1/stats \
--header 'x-api-key: <api-key>'import requests
url = "https://integrations.salesask.com/v1/stats"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://integrations.salesask.com/v1/stats', 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://integrations.salesask.com/v1/stats",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://integrations.salesask.com/v1/stats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://integrations.salesask.com/v1/stats")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://integrations.salesask.com/v1/stats")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"stats": [
{
"totalRecordings": 123,
"recordingsClosed": 123,
"avgRecordingDuration": 123,
"avgTalkTime": 123,
"avgTalkRatio": 123,
"avgWaitedToTalkAvg": 123,
"avgTalkSpeed": 123,
"avgConversationSwitches": 123,
"avgSwitchesPerMinute": 123,
"avgQuestionsAsked": 123,
"avgProcessScore": 123,
"recordingsWithProcess": 123,
"recordingsWithCoaching": 123,
"recordingsWithActions": 123,
"totalActionItems": 123,
"reviewedCount": 123,
"totalReviews": 123,
"totalReviewMs": 123,
"avgReviewMs": 123,
"recordingsByTag": {},
"total": {},
"processQuestionBreakdown": [
{
"questionId": "<string>",
"question": "<string>",
"percentage": 123,
"yesCount": 123,
"totalCount": 123
}
],
"email": "<string>",
"name": "<string>"
}
],
"errors": [
{
"type": "email_not_found",
"value": "<string>"
}
]
}{
"message": "<string>"
}{
"message": "<string>"
}Authorizations
Query Parameters
How to group the results. Required.
user, team Include recordings created on or after this date (ISO 8601).
Include recordings created on or before this date. YYYY-MM-DD is treated as through end of that UTC day.
Comma-separated team IDs to restrict to. Discover via GET /v1/teams.
Comma-separated user emails (case-insensitive). Intersected with teamIds when both are given. Unknown emails are reported in errors[].
Only include recordings using this AI template.
Legacy single-tag filter.
Comma-separated tag IDs to include (OR semantics).
Comma-separated tag IDs to exclude.
Response
OK
One entry per group. Items are UserStat when groupBy=user, TeamStat when groupBy=team.
Aggregated call metrics for a single group (user or team). Only processed recordings in range are counted.
- Option 1
- Option 2
Show child attributes
Show child attributes
Non-fatal per-input errors (e.g. unknown emails).
Show child attributes
Show child attributes

