Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Tests and incidents

Get a test run

One test run: its parts, each with what it checked and the QA tester's report as Troopy checked it (each result with its proof, each finding with its steps), and the addresses of its pictures.

get/api/v1/test-runs/{id}

Authorization

HeaderAuthorization: Bearer <API key>
Or the headerX-API-Key: <API key>
API keyMake one in Troopy under Settings > API keys. It acts as you, in its workspace.

Other ways to call it

CLItroopy tests run-status
MCP tooltroopy_get_test_run
Rate limit120 calls in 60 seconds, for each key

Path parameters

id*string

A 24-character id

Response

200 · application/json
data*object
21 properties
id*string

A 24-character id

kind*enum<string>

ticket: a change. review: Troopy's code review of a change. screens: the blind critic's look at the pictures of a change. cases: tests of the library. explore: a look for problems. first_users: the QA tester tries it as 5 kinds of new user. check: whether the place loads

ticketreviewscreenscasesexplorefirst_userscheck

status*enum<string>

queuedrunningdonecanceled

waitingFor*enum<string> | null

In the queue: a QA tester to hire, one of the workspace's 2 places, the computer, a release that reaches Production, or a Claude plan that is out of usage

qaslotcomputerdeployplan

verdict*enum<string> | null

When done: fail when a part failed, blocked when a part couldn't be checked, pass only when each part passed

passfailblocked

error*string | null

Why it ended early: its place didn't load or is gone, or its ticket moved on

environment*object | null

The place, as it was when the run started: a place to test, or a preview of a ticket's change. Null when it reads only the code of the change

4 properties
id*string | null

Null for the preview of a ticket's change, which is no place of the workspace

name*string
kind*enum<string>

productionstagingpreview

url*string
note*string | null

What Troopy noted on the way, like a preview that didn't load

ticket*object | null

The engineering ticket whose change it tests: its key, its pull request, and the commit tested

5 properties
id*string

A 24-character id

key*string
repo*string
pr*integer
sha*string
progress*object

Its parts: one for each test, or one for a ticket or a look

2 properties
done*integer
total*integer
trigger*enum<string> | null

schedule: its place's schedule started it. release: a release started it. null: a person, the API or a ticket

schedulerelease

release*object | null

A check after a release: the tickets that the release took live

1 properties
tickets*array<object>
2 properties
id*string

A 24-character id

key*string
replayed*integer

Parts that replayed a test's recording whole, with no AI

replaying*boolean

Troopy replays a part now, with no AI

createdBy*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
createdAt*string

ISO 8601 date and time

finishedAt*string | null
parts*array<object>
11 properties
title*string
test*string | null

The test of the library that it ran

how*enum<string> | null

qa: the QA tester tested it. replay: Troopy replayed the test's recording with no AI. takeover: a replay stopped, and the QA tester went on

qareplaytakeover

from*string | null

A takeover: the step where the replay stopped

stop*string | null

A takeover: why the replay stopped

provider*string | null

A code review of a council: the AI provider of the plan that reads this part

reviewer*string | null

A code review of a council: the agent that reads this part, as Grok or Claude Opus 5.5

status*enum<string>

queuedrunningdone

verdict*enum<string> | null

passfailblocked

checks*array<object>
2 properties
id*string
text*string
report*object | null
6 properties
summary*string

Troopy's line on what was checked

note*string

The QA tester's own words

results*array<object>
5 properties
id*string
status*enum<string>

passfailskip

observed*string
pictures*array<string>
proof*enum<string> | null

How a pass was proved: the browser saw the words, a picture, or only a read of the code

seenpicturecode

findings*array<object>
13 properties
id*string

A problem of the run: f1, f2 and so on across its parts

severity*enum<string>

blockermajorminornit

source*enum<string>

reviewtestexplore

title*string
expected*string
observed*string
steps*array<string>
check*string | null
path*string | null
line*integer | null
pictures*array<string>
status*enum<string>

openticketdismissed

ticket*object | null

The bug ticket that a person made of it

2 properties
id*string

A 24-character id

key*string
by*string | null
at*string | null
pictures*array<object>

What the QA tester's browser saw. Never sent to a model

5 properties
n*integer
url*string

Served to callers that read tests

part*integer

The part that took it, by its place in parts; -1 for the first look at the place

step*string | null
by*enum<string>

checkscreenshot

ranked*array<object> | null

A run of first users: its problems as one list, the worst first. Problems that read alike are one

2 properties
finding*string

A problem of the run: f1, f2 and so on across its parts

users*array<string>

Who hit it

picturesGone*boolean

Troopy deleted its pictures. A run that passed keeps them 7 days

Errors

400 invalid_inputFix the field named in detail. Each operation's schema is in /api/v1/openapi.json.
401 unauthorizedSend an API key as `Authorization: Bearer tr_live_...`. Create one in Troopy under Settings.
403 forbiddenThe key lacks a scope this operation needs, or its owner lacks the role. detail says which; create a key with the scope, or ask an organization owner or admin.
404 not_foundCheck the path and any id in it. Every operation is listed in /api/v1/openapi.json.
429 rate_limitedWait the number of seconds in Retry-After, then retry.