curl --request GET \
--url https://api.calibrate.artpark.ai/agent-tests/run/{task_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.calibrate.artpark.ai/agent-tests/run/{task_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"task_id": "a3b2c1d0-e5f4-3210-abcd-ef1234567890",
"name": "<string>",
"status": "queued",
"test_uuids": [
"<string>"
],
"total_tests": 123,
"passed": 123,
"failed": 123,
"latency_ms": {},
"cost": {},
"total_tokens": {},
"evaluators": [
{
"uuid": "<string>",
"name": "<string>",
"description": "<string>",
"output_type": "binary",
"output_config": {
"scale": [
{
"color": "#e5484d",
"name": "Wrong",
"value": false
},
{
"color": "#30a46c",
"name": "Correct",
"value": true
}
]
},
"scale_min": 123,
"scale_max": 123,
"version_number": 123
}
],
"evaluator_summary": [
{}
],
"results": [
{
"test_case_id": "<string>",
"name": "<string>",
"test_uuid": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"test_type": "response",
"passed": true,
"reasoning": "<string>",
"output": {
"response": "<string>",
"tool_calls": [
{
"tool": "<string>",
"arguments": {
"city": "Paris"
},
"output": "<unknown>"
}
]
},
"test_case": {},
"inputs": {},
"judge_results": [
{
"evaluator_uuid": "<string>",
"reasoning": "<string>",
"match": true,
"score": 123,
"value_name": "<string>",
"variable_values": {
"criteria": "Is the reply correct and helpful?"
}
}
],
"latency_ms": 123,
"cost": 123,
"unanswered": false,
"not_run": false
}
],
"unanswered_tests": 123,
"stopped_early": false,
"aborted": false,
"error": "<string>",
"is_public": false,
"share_token": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get test run status
Poll a test run for its status and evaluation results.
curl --request GET \
--url https://api.calibrate.artpark.ai/agent-tests/run/{task_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.calibrate.artpark.ai/agent-tests/run/{task_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"task_id": "a3b2c1d0-e5f4-3210-abcd-ef1234567890",
"name": "<string>",
"status": "queued",
"test_uuids": [
"<string>"
],
"total_tests": 123,
"passed": 123,
"failed": 123,
"latency_ms": {},
"cost": {},
"total_tokens": {},
"evaluators": [
{
"uuid": "<string>",
"name": "<string>",
"description": "<string>",
"output_type": "binary",
"output_config": {
"scale": [
{
"color": "#e5484d",
"name": "Wrong",
"value": false
},
{
"color": "#30a46c",
"name": "Correct",
"value": true
}
]
},
"scale_min": 123,
"scale_max": 123,
"version_number": 123
}
],
"evaluator_summary": [
{}
],
"results": [
{
"test_case_id": "<string>",
"name": "<string>",
"test_uuid": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"test_type": "response",
"passed": true,
"reasoning": "<string>",
"output": {
"response": "<string>",
"tool_calls": [
{
"tool": "<string>",
"arguments": {
"city": "Paris"
},
"output": "<unknown>"
}
]
},
"test_case": {},
"inputs": {},
"judge_results": [
{
"evaluator_uuid": "<string>",
"reasoning": "<string>",
"match": true,
"score": 123,
"value_name": "<string>",
"variable_values": {
"criteria": "Is the reply correct and helpful?"
}
}
],
"latency_ms": 123,
"cost": 123,
"unanswered": false,
"not_run": false
}
],
"unanswered_tests": 123,
"stopped_early": false,
"aborted": false,
"error": "<string>",
"is_public": false,
"share_token": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
API key for authentication
Path Parameters
Test run to poll for status and results
"a3b2c1d0-e5f4-3210-abcd-ef1234567890"
Query Parameters
Return only failing test cases. Omit to return every case
How much of each test case to return. full returns every field of every case. summary returns one light row per case, with its ID, name, verdict and short reason, leaving out the conversation, the agent's output and the evaluator verdicts. Read those one case at a time from GET /agent-tests/run/{task_id}/results/{test_uuid}
full, summary Return a compact response that omits heavy detail fields (results.output, results.test_case, results.judge_results, results.reasoning, evaluators.output_config), keeping only the lightweight decision fields. Omit for full detail
Response
Successful Response
Test run job ID
36"a3b2c1d0-e5f4-3210-abcd-ef1234567890"
Name of the run. A run nobody has renamed shows its number instead, such as Run 1 for a test run or Benchmark 1 for a benchmark
Current status of the run
queued, in_progress, cancelled, done, failed IDs of the tests this run executed, in run order
Total number of test cases
Number of test cases that passed
Number of test cases that did not pass, which includes the ones that produced no answer
Aggregated response latency in milliseconds, as {p50, p95, p99, count}
Aggregated cost as {mean, min, max, count} (USD)
Aggregated token usage as {mean, min, max, count}
The evaluators used in this run. Each verdict in judge_results links to one of these by evaluator_uuid
Show child attributes
Show child attributes
Totals for each evaluator over the whole run, matching the shape a benchmark reports for each model. Only evaluators that returned a verdict appear
Results for each test case
Show child attributes
Show child attributes
Number of test cases that produced no answer because the agent or the judge could not be reached, which makes the pass rate an unfair measure of the agent
Whether the run stopped before starting every test case, after too many failed in a row
Whether a user stopped this run before it finished. The results collected up to that point are kept, and test cases that never ran are counted neither as passed nor as failed
Why the run could not be carried out, when it failed before producing any result
Whether the run is shared publicly
Token for building the public share URL