API reference / Needs you
What waits on you
Everything in the workspace waiting on a person: tasks with questions, approvals or a review waiting (answer with POST /asks/{id}, POST /approvals/{id} or PATCH /tasks/{key}), calls to approve that no task holds, drafts ready to use, standing rules to confirm, with brain:read notes of yours to say are still true, and with tests:read places whose scheduled checks fail and tests that the QA tester proposes, with incidents:read the incidents that need a look, with sessions:read the problems that Sessions found, with apps:read the disputes whose evidence waits for an owner or admin, and with customers:read the customers who became at risk and the feedback that a teammate sorted. What teammates finished is in GET /me/notifications and GET /activity. For an API key, you are the person who made it; it needs agents:read too, since it shows teammates' drafts and calls.
/api/v1/inboxOther ways to call it
troopy inbox showtroopy_get_inboxResponse
200 · application/jsondata*object12 properties
calls*array<object>Tasks that need a person: questions and approvals first (needs_you), then those ready for review (in_review)
7 properties
task*object30 properties
id*stringA 24-character id
key*stringIts key, like VIR-12
number*integertitle*stringstatus*enum<string>backlogtodoin_progressneeds_youin_reviewdonecanceled
priority*enum<string>noneurgenthighmediumlow
assignee*object | null3 properties
type*enum<string>agentperson
id*stringname*stringproject*object | null2 properties
id*stringA 24-character id
name*stringmilestone*object | nullThe milestone of its project it counts toward
2 properties
id*stringA 24-character id
name*stringarea*enum<string>Engineering, marketing or operations. Every task is in one
engineeringmarketingoperations
parent*object | nullThe task this is a sub-task of
3 properties
id*stringA 24-character id
key*stringtitle*stringlabels*array<string>dueAt*string | nullsortOrder*numberIts place in its board column, lowest first
subOrder*numberIts place among its parent's sub-tasks, lowest first (then by number)
waitsOn*array<object>The tasks that block it: they must be done before it starts
4 properties
id*stringA 24-character id
key*stringtitle*stringstatus*enum<string>backlogtodoin_progressneeds_youin_reviewdonecanceled
blocked*booleanSomething it waits on is still open, so no teammate starts it yet
progress*objectIts sub-tasks: how many are done, of those not canceled
2 properties
done*integertotal*integercomments*integerwaiting*integerQuestions and approvals its teammates are waiting on a person for
working*object | nullA teammate is on it now, and what it says it is doing
2 properties
runId*stringA 24-character id
doing*string | nullerror*string | nullWhy its teammate couldn't start it; pickup tries again
pr*object | nullThe pull request its code work opened on GitHub
3 properties
number*integerurl*stringstate*enum<string>openclosedmerged
flow*object | nullAn engineering ticket: its step in Analyze, Plan, Build, Test and Release. null for other tasks
17 properties
stage*enum<string>Its step: analyze, plan, build, test or release. Its status says who has it now. A released ticket is done
analyzeplanbuildtestrelease
kind*enum<string> | nullbugfeaturechange
size*enum<string> | nullHow big a change the Engineer thinks it is
smallmediumlarge
repo*string | nullowner/name: the repo it changes
engineer*string | nullThe Engineer's handle: it builds the ticket, and gets it back after testing
qa*string | nullThe QA tester's handle, while one tests it
enteredAt*stringWhen it came to its step
tries*objectHow many times testing sent it back to Build, of the times the workspace allows
2 properties
used*integermax*integerstuck*string | nullWhy it waits on a person with nothing to answer: read it, then move it on or back
retry*enum<string> | nullWhile it is stuck: the step to move it to, to try again
analyzeplanbuildtestrelease
approve*booleanA plan waits for a person's approval
tested*object | nullThe commit that passed every gate: the only one Release merges
3 properties
sha*stringat*stringISO 8601 date and time
verified*booleanTroopy's own run of the repo's tests passed on this commit
refused*string | nullWhy GitHub refused the last Release of the tested commit
checks*enum<string>GitHub's checks on its change
nonependingpassfailunknown
codeReview*enum<string>Troopy's code review of its change: a second agent reads the change for problems
nonependingpassfailunknown
tests*enum<string>The QA tester's report on its change
nonependingpassfailunknown
screens*enum<string>The blind critic's look at the pictures of its test run
nonependingpassfailunknown
requestedBy*objectWho it is for
3 properties
type*enum<string>personagentapi
id*stringname*stringcreatedBy*objectWho wrote it
3 properties
type*enum<string>personagentapi
id*stringname*stringcreatedAt*stringISO 8601 date and time
updatedAt*stringISO 8601 date and time
closedAt*string | nullversion*integerSend it back with a change to refuse the change if someone edited the task since
asks*array<object>Its open questions
14 properties
id*stringA 24-character id
taskId*stringA 24-character id
agent*stringThe teammate asking
kind*enum<string>decisioninputapprovallogin
question*stringoptions*array<string>For a decision: the choices, the teammate's pick first
draftId*string | nullFor an approval: the draft to approve
docobject | nullFor the approval of a plan: the plan and the version to approve
2 properties
kind*enum<string>analysisplan
version*integersitestring | nullFor a login request: the site the teammate needs a login to
status*enum<string>openansweredwithdrawn
answer*object | null2 properties
choice*string | nulltext*string | nullansweredBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringansweredAt*string | nullcreatedAt*stringISO 8601 date and time
approvals*array<object>Calls on it waiting for a yes
17 properties
id*stringA 24-character id
agent*stringtool*stringlabel*stringinput*anyreason*stringWhy the teammate wants it
status*enum<string>pendingapproveddeniedfailed
result*string | nullerror*string | nullrunId*stringA 24-character id
threadId*string | nulltaskId*string | nullThe task the call was for
lesson*object | nullSet when this is a lesson from a finished task and not a call of a run: a skill, or a line for the notes of the teammate. null for a call
1 properties
task*stringThe key of the task that taught it, like VIR-12
decidedBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringruleId*string | nullThe standing rule that decided it; null when a person did
decidedAt*string | nullcreatedAt*stringISO 8601 date and time
drafts*array<object>What its teammates made for it or its sub-tasks, ready to use, and the drafts its questions ask a yes for
17 properties
id*stringA 24-character id
agent*stringThe teammate that wrote it
kind*enum<string>postemailarticlecopybriefother
title*stringbody*stringThe piece, in markdown
flags*array<string>What a person checks before use. For an article: the numbers that no page of its run shows
channel*string | nullWhere it goes, like linkedin or newsletter
status*enum<string>ready: waiting for a person. Nothing is sent or published by Troopy
readyuseddiscarded
runId*stringA 24-character id
threadId*string | nullThe conversation it came from
taskId*string | nullThe task it was written for
doc*string | nullThe slug of the doc that holds it, for a brief, copy or other piece. Its title and body are the doc's, as they are now
lead*object | nullA brief on a lead: the title and the body are its email, and POST /drafts/{id}/send sends it
8 properties
to*stringThe email of the lead
name*string | nullcompany*string | nullfit*integerHow well the lead fits who the business sells to, from 1 to 10
why*stringWhy that score
angle*string | nullThe reason to write to this lead
brief*stringWho they are and why they fit, in markdown
sent*booleanThe email went from Troopy
decidedBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringdecidedAt*string | nullcreatedAt*stringISO 8601 date and time
updatedAt*stringISO 8601 date and time
answer*object | nullThe teammate's latest answer on it, for a review: a comment on the task, or the reply of its last run
4 properties
agent*stringtext*stringat*stringISO 8601 date and time
on*object | nullWhere the teammate gave this answer, when not on the task: a comment on a doc, or a chat
3 properties
kind*"doc"slug*stringtitle*stringpictures*array<object>The pictures that teammates made for it, at the address where each one shows now: on the task, or in a doc
2 properties
name*stringurl*stringdocs*array<object>The docs that hold its work: where its pictures went, and the doc where it answered
2 properties
slug*stringtitle*stringapprovals*array<object>Calls waiting for a yes that no waiting task holds
17 properties
id*stringA 24-character id
agent*stringtool*stringlabel*stringinput*anyreason*stringWhy the teammate wants it
status*enum<string>pendingapproveddeniedfailed
result*string | nullerror*string | nullrunId*stringA 24-character id
threadId*string | nulltaskId*string | nullThe task the call was for
lesson*object | nullSet when this is a lesson from a finished task and not a call of a run: a skill, or a line for the notes of the teammate. null for a call
1 properties
task*stringThe key of the task that taught it, like VIR-12
decidedBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringruleId*string | nullThe standing rule that decided it; null when a person did
decidedAt*string | nullcreatedAt*stringISO 8601 date and time
drafts*array<object>Drafts ready to use or discard
18 properties
id*stringA 24-character id
agent*stringThe teammate that wrote it
kind*enum<string>postemailarticlecopybriefother
title*stringbody*stringThe piece, in markdown
flags*array<string>What a person checks before use. For an article: the numbers that no page of its run shows
channel*string | nullWhere it goes, like linkedin or newsletter
status*enum<string>ready: waiting for a person. Nothing is sent or published by Troopy
readyuseddiscarded
runId*stringA 24-character id
threadId*string | nullThe conversation it came from
taskId*string | nullThe task it was written for
doc*string | nullThe slug of the doc that holds it, for a brief, copy or other piece. Its title and body are the doc's, as they are now
lead*object | nullA brief on a lead: the title and the body are its email, and POST /drafts/{id}/send sends it
8 properties
to*stringThe email of the lead
name*string | nullcompany*string | nullfit*integerHow well the lead fits who the business sells to, from 1 to 10
why*stringWhy that score
angle*string | nullThe reason to write to this lead
brief*stringWho they are and why they fit, in markdown
sent*booleanThe email went from Troopy
decidedBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringdecidedAt*string | nullcreatedAt*stringISO 8601 date and time
updatedAt*stringISO 8601 date and time
posts*array<object>An article: the posts that its run wrote to announce it. They wait with it
17 properties
id*stringA 24-character id
agent*stringThe teammate that wrote it
kind*enum<string>postemailarticlecopybriefother
title*stringbody*stringThe piece, in markdown
flags*array<string>What a person checks before use. For an article: the numbers that no page of its run shows
channel*string | nullWhere it goes, like linkedin or newsletter
status*enum<string>ready: waiting for a person. Nothing is sent or published by Troopy
readyuseddiscarded
runId*stringA 24-character id
threadId*string | nullThe conversation it came from
taskId*string | nullThe task it was written for
doc*string | nullThe slug of the doc that holds it, for a brief, copy or other piece. Its title and body are the doc's, as they are now
lead*object | nullA brief on a lead: the title and the body are its email, and POST /drafts/{id}/send sends it
8 properties
to*stringThe email of the lead
name*string | nullcompany*string | nullfit*integerHow well the lead fits who the business sells to, from 1 to 10
why*stringWhy that score
angle*string | nullThe reason to write to this lead
brief*stringWho they are and why they fit, in markdown
sent*booleanThe email went from Troopy
decidedBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringdecidedAt*string | nullcreatedAt*stringISO 8601 date and time
updatedAt*stringISO 8601 date and time
rules*array<object>Standing rules Troopy proposes, to confirm or dismiss
12 properties
id*stringA 24-character id
agent*stringThe teammate whose calls it decides
tool*stringlabel*stringeffect*enum<string>What it answers for a person
approvedeny
status*enum<string>proposed: offered after the same answer three times in a row within 30 days. withdrawn: a later answer went the other way
proposedactivedismissedstoppedwithdrawn
basedOn*array<string>The approvals it was proposed from, newest first
decidedBy*object | null3 properties
type*enum<string>personagentapi
id*stringname*stringdecidedAt*string | nulluses*integerHow many calls it has decided
lastUsedAt*string | nullcreatedAt*stringISO 8601 date and time
checks*array<object>Notes you said that teammates relied on in two conversations this month, unsaid for two months: still true? Answer with POST /brain/sources/{id}/check. You answer at most 2 a week (later doesn't count); empty without brain:read
5 properties
id*stringA 24-character id
title*stringtext*stringsince*stringWhen it was last said (by you, or again by anyone)
usedAt*stringWhen a teammate's answer last relied on it
outreach*array<object>Outreach waiting on a person: a line a campaign, and one for replies to sort
5 properties
id*stringkind*enum<string>A campaign's drafts to review, its emails that failed or may not have gone, or replies to sort
reviewtroublereplies
campaign*object | null2 properties
id*stringA 24-character id
name*stringcount*integerat*stringISO 8601 date and time
tests*array<object>Tests waiting on a person: a line for each place whose scheduled checks fail, and one for the tests that the QA tester proposes. Empty without tests:read
7 properties
id*stringkind*enum<string>failing: the scheduled checks of a place fail. proposed: the QA tester proposes tests
failingproposed
place*object | null3 properties
id*stringA 24-character id
name*stringkind*enum<string>productionstaging
run*string | nullfailing: the latest scheduled test run that failed
count*integerfailing: the tests that failed in that run, or 0 when the place didn't load. proposed: the tests to make active or delete
since*stringfailing: when the checks began to fail. proposed: when the latest test came
ticket*object | nullfailing: the bug ticket that Troopy filed in the backlog, with autoTickets on
2 properties
id*stringA 24-character id
key*stringincidents*array<object>Incidents that need a look: a line for each app. An incident needs a look when it is new, came back, ran out of its ignore or spiked, until a person sees it. Empty without incidents:read
5 properties
id*stringapp*object2 properties
id*stringA 24-character id
name*stringcount*integerThe incidents of the app that need a look
since*stringWhen the latest of them began to need it
incidents*array<object>Up to 5, the latest first
5 properties
number*integertitle*stringwhy*enum<string>newregressedescalatedspike
severity*enum<string> | nullThe QA tester's, once it looked
criticalhighmediumlow
summary*string | nullWhat happened, in the QA tester's words
sessions*array<object>The problems that Sessions found in the sessions of visitors and that need a look: new ones of medium or higher, and ones that came back after their fix, until a person sees them. One line at most. Empty without sessions:read
4 properties
id*stringcount*integerThe problems that need a look
since*stringWhen the latest of them began to need it
issues*array<object>Up to 5, the worst first
4 properties
number*integertitle*stringseverity*enum<string>criticalhighmediumlow
why*enum<string>newcame_back
disputes*array<object>Disputes whose evidence waits for an owner or admin, the nearest deadline first (POST /disputes/{id}/submit or /let-go). Empty without apps:read, and for a member
9 properties
id*stringdispute*object3 properties
id*stringA 24-character id
provider*enum<string>stripedodopaymentspaddle
providerId*stringamount*numberThe disputed amount, in the units of its currency
currency*stringreason*stringcustomer*string | nullThe email or the name of the customer
dueBy*string | nullWhen the provider stops taking an answer
why*string | nullWhy its evidence waits for a person
since*stringISO 8601 date and time
customers*array<object>Customers: a line for the customers who became at risk in the last 7 days, until a person looks at the customers at risk, and a line for the feedback that a teammate sorted, until a person accepts it. Empty without customers:read
5 properties
id*stringkind*enum<string>at_riskfeedback
count*integerat_risk: the customers who became at risk. feedback: the pieces that a teammate sorted
since*stringISO 8601 date and time
customers*array<object>at_risk: up to 5, the ones who pay the most first
5 properties
id*stringA 24-character id
name*string | nullmrr*numberWhat the customer pays for a month, in the units of its currency
currency*string | nullreason*stringWhy the customer needs a look
count*integerHow many things wait on a person