API reference / Tests and incidents
Make a bug ticket of a problem that the QA tester found
Makes an engineering bug ticket of a problem that the QA tester found. The ticket has the problem's title, what the QA tester expected and saw, its steps, its place in the code and a link to the report. The Engineer takes it from Analyze. One ticket for each problem: a second call gives back the first. A problem in the test run of an engineering ticket belongs to that ticket.
/api/v1/test-runs/{id}/findings/{finding}/ticketOther ways to call it
troopy tests filetroopy_file_test_findingIdempotency-Key header. A retry with the same key gets the first answer back, and the operation runs one time.Path parameters
id*stringA 24-character id
finding*stringA problem of the run: f1, f2 and so on across its parts
Response
201 · application/jsondata*object2 properties
run*object21 properties
id*stringA 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> | nullIn 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> | nullWhen done: fail when a part failed, blocked when a part couldn't be checked, pass only when each part passed
passfailblocked
error*string | nullWhy it ended early: its place didn't load or is gone, or its ticket moved on
environment*object | nullThe 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 | nullNull for the preview of a ticket's change, which is no place of the workspace
name*stringkind*enum<string>productionstagingpreview
url*stringnote*string | nullWhat Troopy noted on the way, like a preview that didn't load
ticket*object | nullThe engineering ticket whose change it tests: its key, its pull request, and the commit tested
5 properties
id*stringA 24-character id
key*stringrepo*stringpr*integersha*stringprogress*objectIts parts: one for each test, or one for a ticket or a look
2 properties
done*integertotal*integertrigger*enum<string> | nullschedule: its place's schedule started it. release: a release started it. null: a person, the API or a ticket
schedulerelease
release*object | nullA check after a release: the tickets that the release took live
1 properties
tickets*array<object>2 properties
id*stringA 24-character id
key*stringreplayed*integerParts that replayed a test's recording whole, with no AI
replaying*booleanTroopy replays a part now, with no AI
createdBy*objectWho wrote it
3 properties
type*enum<string>personagentapi
id*stringname*stringcreatedAt*stringISO 8601 date and time
finishedAt*string | nullparts*array<object>11 properties
title*stringtest*string | nullThe test of the library that it ran
how*enum<string> | nullqa: 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 | nullA takeover: the step where the replay stopped
stop*string | nullA takeover: why the replay stopped
provider*string | nullA code review of a council: the AI provider of the plan that reads this part
reviewer*string | nullA 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> | nullpassfailblocked
checks*array<object>2 properties
id*stringtext*stringreport*object | null6 properties
summary*stringTroopy's line on what was checked
note*stringThe QA tester's own words
results*array<object>5 properties
id*stringstatus*enum<string>passfailskip
observed*stringpictures*array<string>proof*enum<string> | nullHow 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*stringA problem of the run: f1, f2 and so on across its parts
severity*enum<string>blockermajorminornit
source*enum<string>reviewtestexplore
title*stringexpected*stringobserved*stringsteps*array<string>check*string | nullpath*string | nullline*integer | nullpictures*array<string>status*enum<string>openticketdismissed
ticket*object | nullThe bug ticket that a person made of it
2 properties
id*stringA 24-character id
key*stringby*string | nullat*string | nullpictures*array<object>What the QA tester's browser saw. Never sent to a model
5 properties
n*integerurl*stringServed to callers that read tests
part*integerThe part that took it, by its place in parts; -1 for the first look at the place
step*string | nullby*enum<string>checkscreenshot
ranked*array<object> | nullA run of first users: its problems as one list, the worst first. Problems that read alike are one
2 properties
finding*stringA problem of the run: f1, f2 and so on across its parts
users*array<string>Who hit it
picturesGone*booleanTroopy deleted its pictures. A run that passed keeps them 7 days
ticket*object2 properties
id*stringA 24-character id
key*string