Skip to main content
GET
/
runs
/
{runId}
/
bugs
curl -X GET "https://nunu.ai/api/v1/runs/1g20ccrgksb/bugs" \
  -H "X-Api-Key: YOUR_API_TOKEN"
{
  "multiplayer_run_id": "1g20ccrgksb",
  "bug_occurrences": [
    {
      "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "bug_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Button not responding",
      "description": "The 'Start Game' button does not respond to taps after returning from settings menu.",
      "category": "ui",
      "severity": "high",
      "confidence": "high",
      "reproduction_steps": "1. Open app\n2. Go to settings\n3. Return to main menu\n4. Try to tap Start Game button",
      "player_number": 0,
      "test_step": 2,
      "turn": 15,
      "detected_at": "2025-01-12T10:08:30Z",
      "details": {
        "screenshot_url": "https://bouncer.nunu.ai/artifacts/...",
        "element_id": "btn_start_game"
      }
    }
  ]
}
Permission Required: project:read-runs
Retrieve all bugs detected during a specific run.

Path Parameters

runId
string
required
The multiplayer run ID (12 lowercase alphanumeric characters)

Response

multiplayer_run_id
string
required
The run ID this bug list belongs to
bug_occurrences
BugOccurrence[]
required
Array of bug occurrences found during the run

Bug Occurrence Object

id
string
required
Unique occurrence ID
bug_id
string
required
Bug identifier (same bug across runs shares this ID)
title
string
required
Short bug title
description
string
required
Detailed description of the bug
category
string
required
Bug category: ui, gameplay, performance, crash, audio, visual
severity
string
required
Severity level: low, medium, high, critical
confidence
string
required
Detection confidence: low, medium, high
reproduction_steps
string
required
Steps to reproduce the bug
player_number
integer
required
Which player encountered the bug (0-indexed)
test_step
integer
required
Test step where bug was detected
turn
integer
required
Agent turn number when detected
detected_at
string
required
ISO 8601 timestamp when bug was detected
details
object
Additional bug-specific details (screenshots, element IDs, etc.)

Severity Levels

Blocks core functionality or causes crashes. Requires immediate attention.
Major feature broken or significantly impaired. Should be fixed before release.
Feature works but with noticeable issues. Should be addressed in normal development cycle.
Minor issues with minimal impact. Can be fixed when convenient.
curl -X GET "https://nunu.ai/api/v1/runs/1g20ccrgksb/bugs" \
  -H "X-Api-Key: YOUR_API_TOKEN"
{
  "multiplayer_run_id": "1g20ccrgksb",
  "bug_occurrences": [
    {
      "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "bug_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Button not responding",
      "description": "The 'Start Game' button does not respond to taps after returning from settings menu.",
      "category": "ui",
      "severity": "high",
      "confidence": "high",
      "reproduction_steps": "1. Open app\n2. Go to settings\n3. Return to main menu\n4. Try to tap Start Game button",
      "player_number": 0,
      "test_step": 2,
      "turn": 15,
      "detected_at": "2025-01-12T10:08:30Z",
      "details": {
        "screenshot_url": "https://bouncer.nunu.ai/artifacts/...",
        "element_id": "btn_start_game"
      }
    }
  ]
}

Aggregate Bugs Across Runs

Here’s an example of fetching bugs from multiple recent runs:
import requests
import os

API_TOKEN = os.environ["NUNU_API_TOKEN"]
BASE_URL = "https://nunu.ai/api/v1"
headers = {"X-Api-Key": API_TOKEN}

def get_recent_bugs(limit=10):
    """Fetch bugs from the most recent completed runs."""
    all_bugs = []
    
    # Get recent completed runs
    response = requests.get(
        f"{BASE_URL}/runs",
        headers=headers,
        params={"state": "completed", "page_size": limit}
    )
    runs = response.json()["data"]
    
    # Fetch bugs for each run
    for run in runs:
        run_id = run["multiplayer_run_id"]
        bugs_response = requests.get(
            f"{BASE_URL}/runs/{run_id}/bugs",
            headers=headers
        )
        bugs_data = bugs_response.json()
        
        for bug in bugs_data["bug_occurrences"]:
            all_bugs.append({
                "run_id": run_id,
                "test_name": run["test"]["name"],
                **bug
            })
    
    return all_bugs

bugs = get_recent_bugs()
for bug in bugs:
    print(f"[{bug['severity'].upper()}] {bug['title']} - {bug['test_name']}")

Authorizations

X-Api-Key
string
header
required

API key for authentication

Path Parameters

runId
string
required

The multiplayer run ID

Response

Successful response

multiplayer_run_id
string
bug_occurrences
object[]