curl -X GET "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts" \
-H "X-Api-Key: YOUR_API_TOKEN"
const runId = "lkkg6t5612m-1";
const response = await fetch(
`https://bouncer.nunu.ai/runs/${runId}/artifacts`,
{
headers: {
"X-Api-Key": process.env.NUNU_API_TOKEN,
},
}
);
const data = await response.json();
import requests
import os
run_id = "lkkg6t5612m-1"
response = requests.get(
f"https://bouncer.nunu.ai/runs/{run_id}/artifacts",
headers={"X-Api-Key": os.environ["NUNU_API_TOKEN"]},
)
data = response.json()
{
"runId": "lkkg6t5612m-1",
"count": 3,
"artifacts": [
{
"filename": "recording.mp4",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/recording.mp4",
"size": 15728640,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "9a3b4c5d6e7f8090a1b2c3d4e5f60718"
},
{
"filename": "device_log.log",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/device_log.log",
"size": 45678,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "0a1b2c3d4e5f60718a3b4c5d6e7f8090"
},
{
"filename": "deliverables/custom-report.json",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/deliverables/custom-report.json",
"size": 2048,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "1b2c3d4e5f60718a3b4c5d6e7f80909a"
}
]
}
Artifacts
List Run Artifacts
List all artifact files (recordings, logs, deliverables) produced by a single run. Each entry includes a download URL pointing back to the Get Artifact File endpoint.
GET
/
runs
/
{runId}
/
artifacts
curl -X GET "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts" \
-H "X-Api-Key: YOUR_API_TOKEN"
const runId = "lkkg6t5612m-1";
const response = await fetch(
`https://bouncer.nunu.ai/runs/${runId}/artifacts`,
{
headers: {
"X-Api-Key": process.env.NUNU_API_TOKEN,
},
}
);
const data = await response.json();
import requests
import os
run_id = "lkkg6t5612m-1"
response = requests.get(
f"https://bouncer.nunu.ai/runs/{run_id}/artifacts",
headers={"X-Api-Key": os.environ["NUNU_API_TOKEN"]},
)
data = response.json()
{
"runId": "lkkg6t5612m-1",
"count": 3,
"artifacts": [
{
"filename": "recording.mp4",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/recording.mp4",
"size": 15728640,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "9a3b4c5d6e7f8090a1b2c3d4e5f60718"
},
{
"filename": "device_log.log",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/device_log.log",
"size": 45678,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "0a1b2c3d4e5f60718a3b4c5d6e7f8090"
},
{
"filename": "deliverables/custom-report.json",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/deliverables/custom-report.json",
"size": 2048,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "1b2c3d4e5f60718a3b4c5d6e7f80909a"
}
]
}
Permission Required: any API key scoped to the project that owns the run
Artifact endpoints are served by the bouncer service at
https://bouncer.nunu.ai, not the main nunu.ai/api/v1 host. Use the same
X-Api-Key header for authentication.Path Parameters
string
required
Composite run ID, in the format
{multiplayerRunId}-{playerNumber} (for
example lkkg6t5612m-1). This is the ID returned in the players[].id field
of Get Run.Response
string
required
Echo of the path parameter.
integer
required
Number of artifacts returned.
Artifact[]
required
List of artifact entries.
Show Artifact properties
Show Artifact properties
string
Artifact filename, including any subdirectories the agent created (for
example
deliverables/report.json).string
Absolute URL to download the artifact. Authenticate the same way you
authenticated this list call.
integer
File size in bytes.
string
ISO 8601 timestamp when the artifact was written to storage.
string
Object ETag, useful for caching and conditional requests.
curl -X GET "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts" \
-H "X-Api-Key: YOUR_API_TOKEN"
const runId = "lkkg6t5612m-1";
const response = await fetch(
`https://bouncer.nunu.ai/runs/${runId}/artifacts`,
{
headers: {
"X-Api-Key": process.env.NUNU_API_TOKEN,
},
}
);
const data = await response.json();
import requests
import os
run_id = "lkkg6t5612m-1"
response = requests.get(
f"https://bouncer.nunu.ai/runs/{run_id}/artifacts",
headers={"X-Api-Key": os.environ["NUNU_API_TOKEN"]},
)
data = response.json()
{
"runId": "lkkg6t5612m-1",
"count": 3,
"artifacts": [
{
"filename": "recording.mp4",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/recording.mp4",
"size": 15728640,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "9a3b4c5d6e7f8090a1b2c3d4e5f60718"
},
{
"filename": "device_log.log",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/device_log.log",
"size": 45678,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "0a1b2c3d4e5f60718a3b4c5d6e7f8090"
},
{
"filename": "deliverables/custom-report.json",
"url": "https://bouncer.nunu.ai/runs/lkkg6t5612m-1/artifacts/deliverables/custom-report.json",
"size": 2048,
"uploaded": "2026-03-03T15:55:00.000Z",
"etag": "1b2c3d4e5f60718a3b4c5d6e7f80909a"
}
]
}
Authorizations
API key for authentication
Path Parameters
Composite run ID, in the format {multiplayerRunId}-{playerNumber} (e.g. lkkg6t5612m-1).