Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Tests and incidents

Resolve, ignore or reopen an incident

status resolved, resolveIn now: any new error brings it back. status resolved, resolveIn next_release: only an error of a newer release brings it back. status ignored: no list shows it as ongoing until its ignore runs out. An ignore runs out after some minutes, at some new errors, or at some new people. With no limit, it lasts. status open: reopens it. seen true: a person saw why it needs a look, and its line in Needs you goes. ask true: the QA tester looks at it within minutes. Send status, seen, ask, or more than one.

patch/api/v1/incidents/{number}

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 update
MCP tooltroopy_update_incident
Rate limit60 calls in 60 seconds, for each key
RetriesSend an Idempotency-Key header. A retry with the same key gets the first answer back, and the operation runs one time.

Path parameters

number*integer

At least 1

Body

application/json
statusenum<string>

openresolvedignored

seentrue

A person saw why it needs a look

asktrue

Ask the QA tester to look at it

resolveInenum<string>

With status resolved

nownext_release

Default "now"

ignoreobject

With status ignored. Leave it out to ignore it for good

3 properties
minutesinteger

At least 1 · At most 525600

eventsinteger

New errors from now

At least 1 · At most 1000000

usersinteger

New people from now

At least 1 · At most 1000000

Response

200 · application/json
data*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

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.
409 conflictThis Idempotency-Key was used for a different request, or that request is still running. Use a new key for a new request.
429 rate_limitedWait the number of seconds in Retry-After, then retry.