Compare submissions on a suite
curl --request GET \
--url https://voice-api.onclarity.com/v1/projects/{projectId}/eval-suites/{id}/compare \
--header 'Authorization: Bearer <token>'import requests
url = "https://voice-api.onclarity.com/v1/projects/{projectId}/eval-suites/{id}/compare"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://voice-api.onclarity.com/v1/projects/{projectId}/eval-suites/{id}/compare', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"suite": {
"id": "7d1c2f8e-3b0a-4c55-9a1e-2f4b6c8d0e11",
"project_id": "4f3a9b2c-1d2e-4f5a-8b6c-7d8e9f0a1b2c",
"name": "Booking golden path",
"description": null,
"scenario_ids": [
"b2a4c6e8-0f1d-4e3b-9c5a-7e9f1b3d5c7a"
],
"common_test_case_ids": [],
"sheet_refs": {},
"field_overrides": {},
"scenarios": [],
"common_test_cases": [],
"submissions_count": 2,
"created_by": "org-token:42",
"created_at": "2026-10-01T09:30:00.000Z",
"updated_at": "2026-10-01T09:30:00.000Z",
"deleted_at": null
},
"submissions": [
{
"submission_id": "9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
"submission_name": "Booking agent v7",
"agent_id": "0e1f2a3b-4c5d-4e6f-8a9b-0c1d2e3f4a5b",
"agent_name": "Booking agent",
"agent_version_id": "5c6d7e8f-9a0b-4c1d-8e2f-3a4b5c6d7e8f",
"agent_version_number": 7,
"judge_id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
"silence_modes": [
"off"
],
"runs_total": 3,
"runs_completed": 3,
"judge_counts": {
"pending": 0,
"in_progress": 0,
"done": 3,
"error": 0
},
"per_test_case": [
{
"test_case_id": "c3d5e7f9-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
"test_case_name": "Confirms the booking",
"source": "scenario",
"counts": {
"passed": 2,
"failed": 1,
"not_relevant": 0,
"not_sure": 0,
"error": 0
}
}
],
"aggregates": {
"pass_rate": 0.6667,
"avg_total_duration_ms": 84210,
"avg_llm_ttft_ms": 612,
"avg_tts_ttfb_ms": 240,
"avg_acoustic_median_ms": 1180,
"avg_acoustic_max_ms": 2450,
"avg_acoustic_mean_ms": 1260,
"latency_rating_distribution": {
"good": 2,
"acceptable": 1,
"poor": 0,
"unknown": 0,
"no_call": 0
}
}
}
]
}{
"error": "Compare at most 10 submissions at a time",
"requested": 12
}{
"error": "Invalid or revoked token"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "One or more submissions not found on this suite",
"missing_submission_ids": [
"1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e"
]
}Eval suites
Compare submissions on a suite
Compares up to 10 eval submissions that ran this suite, typically on different agents or agent versions: per-test-case verdict counts, an overall pass rate and latency averages for each submission. Every submission must belong to this suite. Works on deleted suites too.
GET
/
v1
/
projects
/
{projectId}
/
eval-suites
/
{id}
/
compare
Compare submissions on a suite
curl --request GET \
--url https://voice-api.onclarity.com/v1/projects/{projectId}/eval-suites/{id}/compare \
--header 'Authorization: Bearer <token>'import requests
url = "https://voice-api.onclarity.com/v1/projects/{projectId}/eval-suites/{id}/compare"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://voice-api.onclarity.com/v1/projects/{projectId}/eval-suites/{id}/compare', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"suite": {
"id": "7d1c2f8e-3b0a-4c55-9a1e-2f4b6c8d0e11",
"project_id": "4f3a9b2c-1d2e-4f5a-8b6c-7d8e9f0a1b2c",
"name": "Booking golden path",
"description": null,
"scenario_ids": [
"b2a4c6e8-0f1d-4e3b-9c5a-7e9f1b3d5c7a"
],
"common_test_case_ids": [],
"sheet_refs": {},
"field_overrides": {},
"scenarios": [],
"common_test_cases": [],
"submissions_count": 2,
"created_by": "org-token:42",
"created_at": "2026-10-01T09:30:00.000Z",
"updated_at": "2026-10-01T09:30:00.000Z",
"deleted_at": null
},
"submissions": [
{
"submission_id": "9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
"submission_name": "Booking agent v7",
"agent_id": "0e1f2a3b-4c5d-4e6f-8a9b-0c1d2e3f4a5b",
"agent_name": "Booking agent",
"agent_version_id": "5c6d7e8f-9a0b-4c1d-8e2f-3a4b5c6d7e8f",
"agent_version_number": 7,
"judge_id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
"silence_modes": [
"off"
],
"runs_total": 3,
"runs_completed": 3,
"judge_counts": {
"pending": 0,
"in_progress": 0,
"done": 3,
"error": 0
},
"per_test_case": [
{
"test_case_id": "c3d5e7f9-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
"test_case_name": "Confirms the booking",
"source": "scenario",
"counts": {
"passed": 2,
"failed": 1,
"not_relevant": 0,
"not_sure": 0,
"error": 0
}
}
],
"aggregates": {
"pass_rate": 0.6667,
"avg_total_duration_ms": 84210,
"avg_llm_ttft_ms": 612,
"avg_tts_ttfb_ms": 240,
"avg_acoustic_median_ms": 1180,
"avg_acoustic_max_ms": 2450,
"avg_acoustic_mean_ms": 1260,
"latency_rating_distribution": {
"good": 2,
"acceptable": 1,
"poor": 0,
"unknown": 0,
"no_call": 0
}
}
}
]
}{
"error": "Compare at most 10 submissions at a time",
"requested": 12
}{
"error": "Invalid or revoked token"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "One or more submissions not found on this suite",
"missing_submission_ids": [
"1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e"
]
}Authorizations
Your organization API key (it starts with anek_org_). The same key works on the Voice API and the Support API. See Authentication.
Query Parameters
Comma-separated submission ids, 1 to 10.