curl --request GET \
--url https://api.eqho.ai/v2/reports/evaluation-metrics \
--header 'X-API-KEY: <api-key>' \
--header 'x-org-id: <api-key>'import requests
url = "https://api.eqho.ai/v2/reports/evaluation-metrics"
headers = {
"X-API-KEY": "<api-key>",
"x-org-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>', 'x-org-id': '<api-key>'}};
fetch('https://api.eqho.ai/v2/reports/evaluation-metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eqho.ai/v2/reports/evaluation-metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("x-org-id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"metrics": {},
"filters_applied": {
"created_gte": "2023-11-07T05:31:56Z",
"created_lt": "2023-11-07T05:31:56Z",
"account_id": "<string>",
"time_granularity": "hour",
"group_by_dimension": "eval",
"eval_ids": [
"<string>"
],
"grader_names": [
"<string>"
],
"grader_types": [
"label_model"
],
"passed": true,
"campaign_ids": [
"<string>"
],
"agent_ids": [
"<string>"
],
"disposition_level_3": [
"<string>"
],
"conversation_mediums": [
"web_voice"
],
"call_types": [
"outbound"
],
"twilio_statuses": [
"queued"
],
"is_dry_run": true
},
"metadata": {
"generated_at": "2023-11-07T05:31:56Z",
"total_records_analyzed": 123,
"generation_time_ms": 123,
"errors": [
"<string>"
],
"partial_results": false
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get Evaluation Metrics
Get evaluation metrics with optional granularity and grouping
Available Metrics:
Quality:
pass_rate- Percentage of evaluations that passed (all grader types)mean_score- Average score from score_model and calculated_score gradersscore_distribution- Histogram of scores across 10 buckets (0-1, 1-2, …, 9-10)
Coverage:
unique_conversations_evaluated- Count of distinct conversations with evaluationsunique_graders- Count of distinct grader namestotal_evaluations- Total count of all evaluation results
Grouping:
time_granularity- Time bucket for aggregation: hour, day, week, month, yeargroup_by_dimension- Combine time series with dimensional breakdown- Eval dimensions: eval, grader, grader_type
- Call dimensions: campaign, agent, disposition, conversation_medium, call_type
- When used with
time_granularity, each time point includes a breakdown array - Example: Track pass rate by campaign over time in a single query
Evaluation-Specific Filters:
eval_ids- Filter by specific evaluation IDs (comma-separated)grader_names- Filter by specific grader names (comma-separated)grader_types- Filter by grader type: label_model, score_model, action_execution, calculated_scorepassed- Filter by pass/fail status (true/false)
Call-Based Filters (via join to calls collection):
campaign_ids- Filter by specific campaign IDs (comma-separated)agent_ids- Filter by specific agent IDs (comma-separated)disposition_level_3- Filter by level 3 disposition names (comma-separated)conversation_mediums- Filter by channel: telephony, web_voice, sms, chatbot, emailcall_types- Filter by call direction: inbound, outboundtwilio_statuses- Filter by Twilio call status (default: completed)is_dry_run- Include test/dry-run conversations (default: false)
Examples:
# All metrics overview
?metrics=pass_rate,mean_score,score_distribution,total_evaluations,unique_conversations_evaluated,unique_graders
# Pass rate trend over time
?metrics=pass_rate&time_granularity=day&created_gte=2024-01-01&enable_trends=true
# Campaign quality comparison
?metrics=pass_rate,mean_score&group_by_dimension=campaign&created_gte=2024-01-01
# Multi-dimensional: campaign performance over time
?metrics=pass_rate&time_granularity=week&group_by_dimension=campaign&created_gte=2024-01-01
# Returns time series where each point contains breakdown by campaign
# Filter by specific graders
?metrics=pass_rate&grader_names=Compliance Check,Tone Analysis&time_granularity=day
# Only failed evaluations
?metrics=total_evaluations&passed=false&time_granularity=day
curl --request GET \
--url https://api.eqho.ai/v2/reports/evaluation-metrics \
--header 'X-API-KEY: <api-key>' \
--header 'x-org-id: <api-key>'import requests
url = "https://api.eqho.ai/v2/reports/evaluation-metrics"
headers = {
"X-API-KEY": "<api-key>",
"x-org-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>', 'x-org-id': '<api-key>'}};
fetch('https://api.eqho.ai/v2/reports/evaluation-metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eqho.ai/v2/reports/evaluation-metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("x-org-id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"metrics": {},
"filters_applied": {
"created_gte": "2023-11-07T05:31:56Z",
"created_lt": "2023-11-07T05:31:56Z",
"account_id": "<string>",
"time_granularity": "hour",
"group_by_dimension": "eval",
"eval_ids": [
"<string>"
],
"grader_names": [
"<string>"
],
"grader_types": [
"label_model"
],
"passed": true,
"campaign_ids": [
"<string>"
],
"agent_ids": [
"<string>"
],
"disposition_level_3": [
"<string>"
],
"conversation_mediums": [
"web_voice"
],
"call_types": [
"outbound"
],
"twilio_statuses": [
"queued"
],
"is_dry_run": true
},
"metadata": {
"generated_at": "2023-11-07T05:31:56Z",
"total_records_analyzed": 123,
"generation_time_ms": 123,
"errors": [
"<string>"
],
"partial_results": false
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Your API key for authentication.
Org impersonation via x-org-id. Superadmins may impersonate any org; admins may impersonate their direct sub-organizations. Enter the target organization ID to act as that org.
Query Parameters
Comma-separated list of evaluation metric IDs.
1unique_conversations_evaluated, mean_score, pass_rate, unique_graders, total_evaluations, score_distribution Show eval results created on or after this datetime (inclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-05T00:00:00Z). Defaults to 7 days ago.
Show eval results created before this datetime (exclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-05T23:59:59Z). Defaults to now.
Account ID to filter by
Time bucket for aggregation. When omitted, only current values are calculated (no time series).
hour, day, week, month, year Dimension to include WITHIN time series.
eval, grader, grader_type, campaign, agent, disposition, conversation_medium, call_type Comma-separated list of evaluation IDs to filter by
Comma-separated list of grader names to filter by
Comma-separated list of grader types to filter by
label_model, score_model, action_execution, calculated_score Filter by evaluation pass/fail status
Comma-separated list of campaign IDs to filter by
Comma-separated list of agent IDs to filter by
Comma-separated list of level 3 disposition names to filter by
Comma-separated list of conversation mediums to filter by.
web_voice, telephony, sms, email, chatbot, api_text, chat_app, softphone Comma-separated list of call types to filter by.
outbound, inbound Comma-separated list of Twilio call statuses to filter by. When omitted, includes all statuses.
queued, initiated, ringing, in-progress, completed, busy, failed, no-answer, canceled, voicemail Filter by dry-run status. True=only dry-runs, False=exclude dry-runs, None=include all (default).
Include trend comparison with previous period (calculates change_value, change_percent, trend direction)
Response
Successful Response
Was this page helpful?