curl -X GET "https://nunu.ai/api/v1/project/your-project-id/runs/lkkg6t5612m" \
-H "X-Api-Key: YOUR_API_TOKEN"
const runId = "lkkg6t5612m";
const response = await fetch(`https://nunu.ai/api/v1/project/your-project-id/runs/${runId}`, {
headers: {
"X-Api-Key": process.env.NUNU_API_TOKEN,
},
});
const data = await response.json();
import requests
import os
run_id = "lkkg6t5612m"
response = requests.get(
f"https://nunu.ai/api/v1/project/your-project-id/runs/{run_id}",
headers={"X-Api-Key": os.environ["NUNU_API_TOKEN"]}
)
data = response.json()
{
"multiplayer_run_id": "lkkg6t5612m",
"job_id": "f80f6230-3a4f-431a-9d55-d11b867fed4e",
"project_id": "test",
"state": "COMPLETED",
"result": "FAILED",
"bug_info": {
"bug_label": "NO_BUG",
"bug_count": 0
},
"test": {
"id": "a5060a07-d386-4279-98ce-b33fb884201e",
"name": "settings menu checks",
"type": "verification"
},
"build": null,
"created_at": "2026-03-03T15:50:23.601012+00:00",
"started_at": "2026-03-03T15:50:23.601048+00:00",
"completed_at": "2026-03-03T15:54:24.261038+00:00",
"duration_ms": 240659.99,
"initiator": {
"type": "api",
"value": { "key_id": "7f028653-0e85-4c37-87be-c59976796155" }
},
"tags": ["settings"],
"templating_enabled": false,
"template_data": null,
"players": [
{
"id": "lkkg6t5612m-1",
"state": "COMPLETED",
"result": "FAILED",
"player_number": 1,
"test_name": "settings menu checks",
"composite_test_id": "58207dda-e2ca-44bd-a4e2-82b81b3ea8fa",
"step_count": 3,
"completed_step_count": 1,
"step_result_summary": {
"SUCCESS": 1,
"FAILED": 1,
"SKIPPED": 1
},
"platform": {
"kind": "android-native",
"config": {
"device": {
"name": "Pixel 8",
"os_version": "14"
}
}
},
"artifacts": [
{
"filename": "recording.mp4",
"url": "https://bouncer.nunu.ai/artifacts/...",
"size": 15728640,
"uploaded_at": "2026-03-03T15:55:00.000000+00:00"
},
{
"filename": "logs.txt",
"url": "https://bouncer.nunu.ai/artifacts/...",
"size": 45678,
"uploaded_at": "2026-03-03T15:55:00.000000+00:00"
}
],
"steps": [
{
"step_number": 1,
"start_time": "2026-03-03T15:50:23.601048+00:00",
"end_time": "2026-03-03T15:52:01.113025+00:00",
"duration_ms": 97511,
"run_state": "COMPLETED",
"run_result": "SUCCESS",
"report": "All audio settings behaved as expected.",
"items": [
{
"id": "1a",
"expected": "The music volume slider changes the music volume",
"status": "passed",
"comment": null
},
{
"id": "1b",
"expected": "The mute toggle silences all audio",
"status": "passed",
"comment": "Mute also greys out both sliders."
}
],
"test": {
"test_step_id": "step-1",
"goal": "Verify the audio settings",
"finish_condition": "",
"test_type": "verification"
}
},
{
"step_number": 2,
"start_time": "2026-03-03T15:52:01.113025+00:00",
"end_time": "2026-03-03T15:54:24.261038+00:00",
"duration_ms": 143148,
"run_state": "COMPLETED",
"run_result": "FAILED",
"report": "The language dropdown did not persist the selection.",
"items": [
{
"id": "2a",
"expected": "Selecting a language changes the UI language",
"status": "passed",
"comment": null
},
{
"id": "2b",
"expected": "The selected language persists after restarting",
"status": "failed",
"comment": "UI reverted to English after restart."
}
],
"test": {
"test_step_id": "step-2",
"goal": "Verify the language settings",
"finish_condition": "",
"test_type": "verification"
}
},
{
"step_number": 3,
"start_time": null,
"end_time": null,
"duration_ms": null,
"run_state": "COMPLETED",
"run_result": "SKIPPED",
"report": "Skipped: cloud saves are not available in this build.",
"items": [
{
"id": "3a",
"expected": "Cloud save sync completes without errors",
"status": "skipped",
"comment": "Feature flag disabled in this build."
}
],
"test": {
"test_step_id": "step-3",
"goal": "Verify cloud save sync",
"finish_condition": "",
"test_type": "verification"
}
}
]
}
]
}
Get Run Details
Retrieve detailed information about a specific run, including step-by-step results and artifacts.
curl -X GET "https://nunu.ai/api/v1/project/your-project-id/runs/lkkg6t5612m" \
-H "X-Api-Key: YOUR_API_TOKEN"
const runId = "lkkg6t5612m";
const response = await fetch(`https://nunu.ai/api/v1/project/your-project-id/runs/${runId}`, {
headers: {
"X-Api-Key": process.env.NUNU_API_TOKEN,
},
});
const data = await response.json();
import requests
import os
run_id = "lkkg6t5612m"
response = requests.get(
f"https://nunu.ai/api/v1/project/your-project-id/runs/{run_id}",
headers={"X-Api-Key": os.environ["NUNU_API_TOKEN"]}
)
data = response.json()
{
"multiplayer_run_id": "lkkg6t5612m",
"job_id": "f80f6230-3a4f-431a-9d55-d11b867fed4e",
"project_id": "test",
"state": "COMPLETED",
"result": "FAILED",
"bug_info": {
"bug_label": "NO_BUG",
"bug_count": 0
},
"test": {
"id": "a5060a07-d386-4279-98ce-b33fb884201e",
"name": "settings menu checks",
"type": "verification"
},
"build": null,
"created_at": "2026-03-03T15:50:23.601012+00:00",
"started_at": "2026-03-03T15:50:23.601048+00:00",
"completed_at": "2026-03-03T15:54:24.261038+00:00",
"duration_ms": 240659.99,
"initiator": {
"type": "api",
"value": { "key_id": "7f028653-0e85-4c37-87be-c59976796155" }
},
"tags": ["settings"],
"templating_enabled": false,
"template_data": null,
"players": [
{
"id": "lkkg6t5612m-1",
"state": "COMPLETED",
"result": "FAILED",
"player_number": 1,
"test_name": "settings menu checks",
"composite_test_id": "58207dda-e2ca-44bd-a4e2-82b81b3ea8fa",
"step_count": 3,
"completed_step_count": 1,
"step_result_summary": {
"SUCCESS": 1,
"FAILED": 1,
"SKIPPED": 1
},
"platform": {
"kind": "android-native",
"config": {
"device": {
"name": "Pixel 8",
"os_version": "14"
}
}
},
"artifacts": [
{
"filename": "recording.mp4",
"url": "https://bouncer.nunu.ai/artifacts/...",
"size": 15728640,
"uploaded_at": "2026-03-03T15:55:00.000000+00:00"
},
{
"filename": "logs.txt",
"url": "https://bouncer.nunu.ai/artifacts/...",
"size": 45678,
"uploaded_at": "2026-03-03T15:55:00.000000+00:00"
}
],
"steps": [
{
"step_number": 1,
"start_time": "2026-03-03T15:50:23.601048+00:00",
"end_time": "2026-03-03T15:52:01.113025+00:00",
"duration_ms": 97511,
"run_state": "COMPLETED",
"run_result": "SUCCESS",
"report": "All audio settings behaved as expected.",
"items": [
{
"id": "1a",
"expected": "The music volume slider changes the music volume",
"status": "passed",
"comment": null
},
{
"id": "1b",
"expected": "The mute toggle silences all audio",
"status": "passed",
"comment": "Mute also greys out both sliders."
}
],
"test": {
"test_step_id": "step-1",
"goal": "Verify the audio settings",
"finish_condition": "",
"test_type": "verification"
}
},
{
"step_number": 2,
"start_time": "2026-03-03T15:52:01.113025+00:00",
"end_time": "2026-03-03T15:54:24.261038+00:00",
"duration_ms": 143148,
"run_state": "COMPLETED",
"run_result": "FAILED",
"report": "The language dropdown did not persist the selection.",
"items": [
{
"id": "2a",
"expected": "Selecting a language changes the UI language",
"status": "passed",
"comment": null
},
{
"id": "2b",
"expected": "The selected language persists after restarting",
"status": "failed",
"comment": "UI reverted to English after restart."
}
],
"test": {
"test_step_id": "step-2",
"goal": "Verify the language settings",
"finish_condition": "",
"test_type": "verification"
}
},
{
"step_number": 3,
"start_time": null,
"end_time": null,
"duration_ms": null,
"run_state": "COMPLETED",
"run_result": "SKIPPED",
"report": "Skipped: cloud saves are not available in this build.",
"items": [
{
"id": "3a",
"expected": "Cloud save sync completes without errors",
"status": "skipped",
"comment": "Feature flag disabled in this build."
}
],
"test": {
"test_step_id": "step-3",
"goal": "Verify cloud save sync",
"finish_condition": "",
"test_type": "verification"
}
}
]
}
]
}
project:read-runscurl -X GET "https://nunu.ai/api/v1/project/your-project-id/runs/lkkg6t5612m" \
-H "X-Api-Key: YOUR_API_TOKEN"
const runId = "lkkg6t5612m";
const response = await fetch(`https://nunu.ai/api/v1/project/your-project-id/runs/${runId}`, {
headers: {
"X-Api-Key": process.env.NUNU_API_TOKEN,
},
});
const data = await response.json();
import requests
import os
run_id = "lkkg6t5612m"
response = requests.get(
f"https://nunu.ai/api/v1/project/your-project-id/runs/{run_id}",
headers={"X-Api-Key": os.environ["NUNU_API_TOKEN"]}
)
data = response.json()
{
"multiplayer_run_id": "lkkg6t5612m",
"job_id": "f80f6230-3a4f-431a-9d55-d11b867fed4e",
"project_id": "test",
"state": "COMPLETED",
"result": "FAILED",
"bug_info": {
"bug_label": "NO_BUG",
"bug_count": 0
},
"test": {
"id": "a5060a07-d386-4279-98ce-b33fb884201e",
"name": "settings menu checks",
"type": "verification"
},
"build": null,
"created_at": "2026-03-03T15:50:23.601012+00:00",
"started_at": "2026-03-03T15:50:23.601048+00:00",
"completed_at": "2026-03-03T15:54:24.261038+00:00",
"duration_ms": 240659.99,
"initiator": {
"type": "api",
"value": { "key_id": "7f028653-0e85-4c37-87be-c59976796155" }
},
"tags": ["settings"],
"templating_enabled": false,
"template_data": null,
"players": [
{
"id": "lkkg6t5612m-1",
"state": "COMPLETED",
"result": "FAILED",
"player_number": 1,
"test_name": "settings menu checks",
"composite_test_id": "58207dda-e2ca-44bd-a4e2-82b81b3ea8fa",
"step_count": 3,
"completed_step_count": 1,
"step_result_summary": {
"SUCCESS": 1,
"FAILED": 1,
"SKIPPED": 1
},
"platform": {
"kind": "android-native",
"config": {
"device": {
"name": "Pixel 8",
"os_version": "14"
}
}
},
"artifacts": [
{
"filename": "recording.mp4",
"url": "https://bouncer.nunu.ai/artifacts/...",
"size": 15728640,
"uploaded_at": "2026-03-03T15:55:00.000000+00:00"
},
{
"filename": "logs.txt",
"url": "https://bouncer.nunu.ai/artifacts/...",
"size": 45678,
"uploaded_at": "2026-03-03T15:55:00.000000+00:00"
}
],
"steps": [
{
"step_number": 1,
"start_time": "2026-03-03T15:50:23.601048+00:00",
"end_time": "2026-03-03T15:52:01.113025+00:00",
"duration_ms": 97511,
"run_state": "COMPLETED",
"run_result": "SUCCESS",
"report": "All audio settings behaved as expected.",
"items": [
{
"id": "1a",
"expected": "The music volume slider changes the music volume",
"status": "passed",
"comment": null
},
{
"id": "1b",
"expected": "The mute toggle silences all audio",
"status": "passed",
"comment": "Mute also greys out both sliders."
}
],
"test": {
"test_step_id": "step-1",
"goal": "Verify the audio settings",
"finish_condition": "",
"test_type": "verification"
}
},
{
"step_number": 2,
"start_time": "2026-03-03T15:52:01.113025+00:00",
"end_time": "2026-03-03T15:54:24.261038+00:00",
"duration_ms": 143148,
"run_state": "COMPLETED",
"run_result": "FAILED",
"report": "The language dropdown did not persist the selection.",
"items": [
{
"id": "2a",
"expected": "Selecting a language changes the UI language",
"status": "passed",
"comment": null
},
{
"id": "2b",
"expected": "The selected language persists after restarting",
"status": "failed",
"comment": "UI reverted to English after restart."
}
],
"test": {
"test_step_id": "step-2",
"goal": "Verify the language settings",
"finish_condition": "",
"test_type": "verification"
}
},
{
"step_number": 3,
"start_time": null,
"end_time": null,
"duration_ms": null,
"run_state": "COMPLETED",
"run_result": "SKIPPED",
"report": "Skipped: cloud saves are not available in this build.",
"items": [
{
"id": "3a",
"expected": "Cloud save sync completes without errors",
"status": "skipped",
"comment": "Feature flag disabled in this build."
}
],
"test": {
"test_step_id": "step-3",
"goal": "Verify cloud save sync",
"finish_condition": "",
"test_type": "verification"
}
}
]
}
]
}
Authorizations
API key for authentication
Path Parameters
The multiplayer run ID (12 lowercase alphanumeric characters)
^[a-z0-9]{12}$The project ID. You can copy it from the project settings page or the project URL in the dashboard.
Response
Successful response
Job identifier that created this run
Unique identifier for the run (12 lowercase alphanumeric chars)
Project the run belongs to
Current state of the run
initializing, running, completed Result of the run (null if not completed). Run result label. SUCCESS, FAILED, SKIPPED and BLOCKED are test verdicts; TIMEOUT, ERROR and STOPPED are execution outcomes; MAX_STEPS is legacy (superseded by TIMEOUT).
SUCCESS, FAILED, SKIPPED, BLOCKED, TIMEOUT, ERROR, STOPPED, MAX_STEPS Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Players with full step details; overrides the summary players list.
Show child attributes
Show child attributes
Rendered template values, or null when templating is disabled.