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, Live-QA scores (average, scored count, low count), messages-over-time buckets, top questions, outcome rates (resolution, deflection, handoff, CSAT, plus leads, conversion, appointments, tickets, and estimated hours/cost saved), 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
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. An invalid or unknown value silently falls back to UTC rather than failing. |
| chatbotId | query | string uuid | Optional | — | Only this chatbot. |
Request
curl "https://app.evoriqa.com/api/v1/analytics/summary" \
-H "x-api-key: $EVORIQA_API_KEY"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();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
{
"success": true,
"data": {
"conversations": 412,
"publicConversations": 398,
"testConversations": 14,
"messages": 2160,
"aiReplies": 1015,
"leads": 57,
"unanswered": 12,
"creditsUsed": 1830,
"avgLatencyMs": 1420,
"avgQaScore": 82,
"qaScoredCount": 640,
"qaLowCount": 23,
"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,
"leads": 57,
"conversionRate": 0.14,
"appointments": 12,
"tickets": 8,
"hoursSaved": 43.7,
"costSaved": 1310.5,
"currency": "USD"
},
"csatComments": [
{
"id": "7c9b0a52-2f38-4b6d-a0e1-9f3b7d4c2a61",
"rating": 5,
"comment": "Answered instantly, great.",
"createdAt": "2026-08-08T16:40:00.000Z"
}
]
}
}