Test Results API
View and update individual test results, or bulk upload results from your CI/CD pipeline.
https://api.testably.app/v1Status Values
| Value | Description |
|---|---|
| passed | Test case executed successfully, all assertions met |
| failed | Test case did not meet expected outcome |
| blocked | Test case could not be executed due to a dependency or environment issue |
| retest | Test case needs to be re-executed (e.g., after a fix) |
| not_tested | Test case has not been executed yet (default status) |
/v1/runs/:rid/resultsList all test results for a specific run. Each result includes the test case reference, current status, optional note, elapsed time, and who tested it.
Response
{
"data": [
{
"id": "res_001",
"test_case_id": "tc_001",
"test_case_title": "Login with valid credentials",
"status": "passed",
"note": "Verified on Chrome 120 and Firefox 121",
"elapsed": 45,
"tested_by": "user_xyz",
"tested_at": "2026-03-26T10:15:00Z"
},
{
"id": "res_002",
"test_case_id": "tc_002",
"test_case_title": "Login with invalid password",
"status": "failed",
"note": "Error toast not showing — see screenshot",
"elapsed": 30,
"tested_by": "user_xyz",
"tested_at": "2026-03-26T10:20:00Z"
},
{
"id": "res_003",
"test_case_id": "tc_005",
"test_case_title": "Password reset flow",
"status": "not_tested",
"note": null,
"elapsed": null,
"tested_by": null,
"tested_at": null
}
],
"meta": {
"total": 45,
"page": 1,
"per_page": 20
}
}/v1/runs/:rid/results/:idComing SoonUpdate a single test result. Set the status, optionally add a note and elapsed time in seconds. The authenticated user is recorded as the tester.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status | string | Required | Result status: passed, failed, blocked, retest, not_tested |
note | string | Optional | Optional note or comment about the result |
elapsed | integer | Optional | Time spent testing in seconds |
Request Body
{
"status": "failed",
"note": "Button click does not trigger form submit on Safari 17",
"elapsed": 120
}Response
{
"data": {
"id": "res_002",
"test_case_id": "tc_002",
"test_case_title": "Login with invalid password",
"status": "failed",
"note": "Button click does not trigger form submit on Safari 17",
"elapsed": 120,
"tested_by": "user_xyz",
"tested_at": "2026-03-29T14:30:00Z"
}
}/v1/runs/:rid/results/bulkComing SoonBulk upload test results, designed for CI/CD pipeline integration. Submit multiple results in a single request. Each result is matched by test_case_id within the run.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
results | array | Required | Array of result objects to upload |
results[].test_case_id | string | Required | Test case ID to match within the run |
results[].status | string | Required | Result status: passed, failed, blocked, retest, not_tested |
results[].note | string | Optional | Optional note or error message |
results[].elapsed | integer | Optional | Time spent in seconds |
Request Body
{
"results": [
{
"test_case_id": "tc_001",
"status": "passed",
"elapsed": 12
},
{
"test_case_id": "tc_002",
"status": "failed",
"note": "AssertionError: expected 200 but got 500",
"elapsed": 8
},
{
"test_case_id": "tc_005",
"status": "passed",
"elapsed": 23
},
{
"test_case_id": "tc_010",
"status": "blocked",
"note": "Staging DB unavailable"
}
]
}Response
{
"data": {
"updated": 4,
"results": [
{ "test_case_id": "tc_001", "status": "passed" },
{ "test_case_id": "tc_002", "status": "failed" },
{ "test_case_id": "tc_005", "status": "passed" },
{ "test_case_id": "tc_010", "status": "blocked" }
]
}
}CI/CD Integration Tip
Use the bulk upload endpoint (POST /v1/runs/:rid/results/bulk) to push automated test results from your CI pipeline. Create a run before your test suite executes, then upload all results in a single request when tests complete.