Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Tasks and projects

List tasks

The workspace's tasks, most recently changed first (or in board order). Filters take several values, comma-separated, and match any of them: status (like todo,in_progress), assignee (handles, user ids, me or none), priority, project (ids, names or none), milestone (ids or none), area (engineering, marketing, operations), stage (the engineering flow's steps, or none), label. Also parent (a task, or none for top-level tasks), words in the title, mine (yours: for you, made by you or on your plate) and updatedSince. A teammate looking for work lists status=todo&assignee=me.

get/api/v1/tasks

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 tasks list
MCP tooltroopy_list_tasks
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

statusstring
assigneestring

Comma-separated handles, user ids, me, none, people (any person) or agents (any teammate)

At most 400 characters

prioritystring
projectstring

Comma-separated project ids or names, or none

At most 800 characters

milestonestring

Comma-separated milestone ids, or none

At most 800 characters

areastring
stagestring

Engineering tickets at these steps (analyze, plan, build, test, release), or none for tasks outside the engineering flow

labelstring

Comma-separated labels

At most 400 characters

mineboolean | enum<string>

Only yours: for you, made by you, or assigned to you

truefalse

parentstring

At most 40 characters

qstring

Words in the title, or a key like VIR-12

At most 200 characters

updatedSincestring

date-time

orderenum<string>

updatedboard

Default "updated"

Response

200 · application/json
data*array<object>
30 properties
id*string

A 24-character id

key*string

Its key, like VIR-12

number*integer
title*string
status*enum<string>

backlogtodoin_progressneeds_youin_reviewdonecanceled

priority*enum<string>

noneurgenthighmediumlow

assignee*object | null
3 properties
type*enum<string>

agentperson

id*string
name*string
project*object | null
2 properties
id*string

A 24-character id

name*string
milestone*object | null

The milestone of its project it counts toward

2 properties
id*string

A 24-character id

name*string
area*enum<string>

Engineering, marketing or operations. Every task is in one

engineeringmarketingoperations

parent*object | null

The task this is a sub-task of

3 properties
id*string

A 24-character id

key*string
title*string
labels*array<string>
dueAt*string | null
sortOrder*number

Its place in its board column, lowest first

subOrder*number

Its 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*string

A 24-character id

key*string
title*string
status*enum<string>

backlogtodoin_progressneeds_youin_reviewdonecanceled

blocked*boolean

Something it waits on is still open, so no teammate starts it yet

progress*object

Its sub-tasks: how many are done, of those not canceled

2 properties
done*integer
total*integer
comments*integer
waiting*integer

Questions and approvals its teammates are waiting on a person for

working*object | null

A teammate is on it now, and what it says it is doing

2 properties
runId*string

A 24-character id

doing*string | null
error*string | null

Why its teammate couldn't start it; pickup tries again

pr*object | null

The pull request its code work opened on GitHub

3 properties
number*integer
url*string
state*enum<string>

openclosedmerged

flow*object | null

An 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> | null

bugfeaturechange

size*enum<string> | null

How big a change the Engineer thinks it is

smallmediumlarge

repo*string | null

owner/name: the repo it changes

engineer*string | null

The Engineer's handle: it builds the ticket, and gets it back after testing

qa*string | null

The QA tester's handle, while one tests it

enteredAt*string

When it came to its step

tries*object

How many times testing sent it back to Build, of the times the workspace allows

2 properties
used*integer
max*integer
stuck*string | null

Why it waits on a person with nothing to answer: read it, then move it on or back

retry*enum<string> | null

While it is stuck: the step to move it to, to try again

analyzeplanbuildtestrelease

approve*boolean

A plan waits for a person's approval

tested*object | null

The commit that passed every gate: the only one Release merges

3 properties
sha*string
at*string

ISO 8601 date and time

verified*boolean

Troopy's own run of the repo's tests passed on this commit

refused*string | null

Why 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*object

Who it is for

3 properties
type*enum<string>

personagentapi

id*string
name*string
createdBy*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
createdAt*string

ISO 8601 date and time

updatedAt*string

ISO 8601 date and time

closedAt*string | null
version*integer

Send it back with a change to refuse the change if someone edited the task since

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.