Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Tests and incidents

List incidents

The incidents of the workspace's apps: each is the errors of one problem. view: ongoing (open, the default), new (first seen in the last 24 hours), regressed (back after a person resolved it), resolved, ignored or all. Filter by app (id or slug), by environment, or by words of the title (q). #14 finds Incident 14.

get/api/v1/incidents

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 incidents list
MCP tooltroopy_list_incidents
Rate limit120 calls in 60 seconds, for each key

Query parameters

pageinteger

1-based page number

Default 1 · At least 1

limitinteger

Items per page, at most 100

Default 20 · At least 1 · At most 100

viewenum<string>

ongoingnewregressedresolvedignoredall

Default "ongoing"

appstring

The app's id or slug

At most 80 characters

environmentstring

At most 40 characters

qstring

At most 200 characters

sortenum<string>

last or first seen, most events, or most people

lastfirsteventspeople

Default "last"

Response

200 · application/json
data*array<object>
24 properties
number*integer

Its number in the workspace, as in Incident 14

title*string

The error and its message

culprit*string | null

Where it happens: the last frame of the app's own code, or the route

type*string | null

The type of the error, like TypeError. null for a message

level*enum<string>

fatalerrorwarninginfodebug

crash*boolean

One of its errors crashed the app: nothing caught it

status*enum<string>

ignored becomes open when its ignore runs out

openresolvedignored

regressedAt*string | null

When it came back after a person resolved it

app*object
4 properties
id*string

A 24-character id

name*string
slug*string
platform*enum<string>

websitenextjsnodepythonother

count*integer

Its errors, each counted

users*integer

The people who saw it, about

firstSeen*string

ISO 8601 date and time

lastSeen*string

ISO 8601 date and time

environments*array<string>
firstRelease*string | null
lastRelease*string | null
resolved*object | null
3 properties
by*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
at*string

ISO 8601 date and time

nextRelease*boolean

Resolved in the next release: only a newer release brings it back

ignored*object | null
5 properties
by*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
at*string

ISO 8601 date and time

until*string | null

It is open again after this time

events*integer | null

It is open again when its count reaches this

users*integer | null

It is open again when this many people saw it

last24h*array<integer>

Its errors in each of the last 24 hours, oldest first

alert*object | null

Why it needs a look, and whether a person saw it. A resolve or an ignore clears it

3 properties
why*enum<string>

newregressedescalatedspike

at*string

ISO 8601 date and time

seen*boolean
triage*object | null

The latest look of the QA tester, or of a person

6 properties
severity*enum<string>

criticalhighmediumlow

verdict*enum<string>

fixnoisewatch

summary*string

What happened, in words that an owner understands

why*string

Why that severity and that verdict

by*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
at*string

ISO 8601 date and time

triageDue*string | null

Since when it waits for the QA tester's look: an alert, or a person's ask

ticket*object | null

The engineering ticket that fixes it

3 properties
key*string

Like VIR-42

title*string
status*enum<string>

backlogtodoin_progressneeds_youin_reviewdonecanceled

fix*object | null

The ticket that fixed it, once that ticket went live. Then Troopy resolves the incident in the next release

5 properties
key*string

The ticket, like VIR-42

title*string
at*string

When the ticket went live

release*string | null

The first release of the app after that: the fix is in it

back*string | null

When an error of a newer release brought the incident back

pagination*object
4 properties
page*integer
limit*integer
total*integer
pages*integer

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.
429 rate_limitedWait the number of seconds in Retry-After, then retry.