GET
https://app.evoriqa.com/api/v1/analytics/summaryGet the analytics summary
Returns the dashboard metric bundle: conversation/message/AI-reply/lead totals, unanswered count, credits used, average latency, messages-over-time buckets, top questions, outcome rates (resolution, deflection, handoff, CSAT), and verbatim CSAT comments. The dashboard's PDF export is browser-rendered and not part of v1 — consume this bundle and format it yourself.
Requires scope analytics:read
Warning:
Access is gated — enable it before your first call
The API is off by default. A request succeeds only when all three switches are on: the platform master switch (off by default), your organisation’s API toggle, and your plan or client entitlement. Any one off returns 403 API access is not enabled for this workspace.
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
| range | query | string one of today · last_7d · last_30d · this_month · last_month · last_90d · last_year | Optional | this_month | Preset window. An unrecognised value silently falls back to this_month rather than failing — only a malformed chatbotId makes this endpoint 422. |
| tz | query | string | Optional | UTC | IANA timezone for bucketing. |
| chatbotId | query | string uuid | Optional | — | Only this chatbot. |
Request
curl
curl "https://app.evoriqa.com/api/v1/analytics/summary" \
-H "x-api-key: $EVORIQA_API_KEY"Node.js
const res = await fetch("https://app.evoriqa.com/api/v1/analytics/summary", {
headers: {
Authorization: `Bearer ${process.env.EVORIQA_API_KEY}`,
},
});
const responseBody = await res.json();Python
import os
import requests
res = requests.get(
"https://app.evoriqa.com/api/v1/analytics/summary",
headers={"Authorization": f"Bearer {os.environ['EVORIQA_API_KEY']}"},
)
body = res.json()Response
200 OK
{
"success": true,
"data": {
"conversations": 412,
"publicConversations": 398,
"testConversations": 14,
"messages": 2160,
"aiReplies": 1015,
"leads": 57,
"unanswered": 12,
"creditsUsed": 1830,
"avgLatencyMs": 1420,
"messagesOverTime": [
{
"label": "2026-08-01",
"count": 96
}
],
"topQuestions": [
{
"content": "How do refunds work?",
"count": 14
}
],
"outcomes": {
"total": 398,
"resolved": 310,
"resolutionRate": 0.78,
"aiResolved": 262,
"deflectionRate": 0.66,
"handoffs": 71,
"handoffRate": 0.18,
"csatAvg": 4.6,
"csatCount": 88,
"csatPositiveRate": 0.93
},
"csatComments": [
{
"id": "7c9b0a52-2f38-4b6d-a0e1-9f3b7d4c2a61",
"rating": 5,
"comment": "Answered instantly, great.",
"createdAt": "2026-08-08T16:40:00.000Z"
}
]
}
}