Analytics
The organization's conversations in numbers, and searching what was said.
/v1/analyticsThe organization's analytics
The console's Analytics page in numbers, for the last days (default 30): conversations, minutes, average length, the completion rate, conversations left inside 20 seconds, answers marked wrong, conversations per day and per persona, and, on a plan with Advanced analytics, how the conversations went (sentiment and satisfaction). Never a builder's preview or a job interview. The topics read from what was said stay in the console.
Query parameters
daysintegerThe period: the last 1-365 days (default 30).
Returns
200 The numbers. data is AnalyticsSummary.
Fields of data
daysintegerrequiredfromstring (date-time)requiredThe start of the period.
advancedbooleanrequiredThe plan includes Advanced analytics: sentiment and satisfaction are read from the conversations. Without it they are zero and null.
totalsobjectrequiredsessionsintegerrequiredConversations started in the period (never a builder's preview or a job interview).
minutesintegerrequiredTime talked, in whole minutes.
avgDurationSecondsintegerrequiredThe average length of a conversation that has one.
completionRateintegerrequiredPercent of finished conversations that completed rather than were abandoned.
leftEarlyintegerrequiredConversations left inside 20 seconds.
markedWrongintegerrequiredAnswers marked wrong in the period's transcripts.
analyzedintegerrequiredConversations read for sentiment (Advanced analytics).
unanalyzedintegerrequiredConversations not read yet (Advanced analytics).
csatinteger | nullrequiredSatisfaction, 0-100, from the sentiment of the conversations read; null when none were.
byDayobject[]requiredConversations started per day (UTC), oldest first, every day of the period.
datestring (date)requiredA calendar date (YYYY-MM-DD).
sessionsintegerrequired
byPersonaobject[]requiredPer persona, the busiest first.
personaIdstringrequiredPersona id (
pa_…).pattern `^pa_.*`
namestringrequiredsessionsintegerrequiredavgDurationSecondsintegerrequired
sentimentobjectrequiredHow the conversations went, counted (Advanced analytics).
positiveintegerrequiredneutralintegerrequirednegativeintegerrequiredmixedintegerrequiredunanalyzedintegerrequired
Errors
invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error
Request
curl "https://app.zentiqai.com/v1/analytics" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.getAnalytics();import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.get_analytics()Response
{
"data": {
"days": 1,
"from": "2026-09-25T12:00:00.000Z",
"advanced": true,
"totals": {
"sessions": 1,
"minutes": 1,
"avgDurationSeconds": 1,
"completionRate": 1,
"leftEarly": 1,
"markedWrong": 1
},
"byDay": [
{
"date": "2026-09-25",
"sessions": 1
}
],
"byPersona": [
{
"personaId": "pa_cmfq2b7x10000abcd1234",
"name": "Zoe",
"sessions": 1,
"avgDurationSeconds": 1
}
]
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}/v1/analytics/conversationsSearch what was said
The console's conversation search: the most recent conversations (the last 300 in the period at most), or those where q was said, with up to three matching lines each. Only conversations whose words may leave Zentiq are looked at: never a young learner's, a website visitor's who said they are under 18, a job interview, a builder's preview, a conversation with a safety flag, a subject that keeps nothing, or any conversation while zero data retention is on. They are left out before the search, so it never says whether they matched.
Query parameters
qstringWords to find in what was said (case doesn't matter). Without it, the most recent conversations.
daysintegerThe period: the last 1-365 days (default 30).
personaIdstringPersona id (
pa_…).markedWrong"true" | "false"Only conversations with an answer marked wrong.
limitintegerAt most this many conversations, 1-100 (default 60).
Returns
200 The conversations found. data is ConversationSearchResult.
Fields of data
Newest first.
daysintegerrequiredscannedintegerrequiredConversations looked at (only those whose words may leave Zentiq).
withTranscriptintegerrequiredOf those, how many had a transcript.
limitedbooleanrequiredThere were more matches than
limit.cappedbooleanrequiredThe search reached its ceiling of the 300 most recent conversations: older ones weren't looked at. Narrow
daysorpersonaId.
Errors
invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error
Request
curl "https://app.zentiqai.com/v1/analytics/conversations" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.searchConversations();import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.search_conversations()Response
{
"data": {
"conversations": [
{
"sessionId": "sess_cmfq2b7x10000abcd1234",
"personaId": "pa_cmfq2b7x10000abcd1234",
"personaName": "…",
"status": "ACTIVE",
"source": "api",
"durationSeconds": 1
}
],
"days": 1,
"scanned": 1,
"withTranscript": 1,
"limited": true,
"capped": true
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}