Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Account

Turn on auto-release

Lets Troopy release each engineering ticket that passed every gate, with no person pressing Release, until a date at most 30 days out. It releases at most dailyCap changes in 24 hours (1 to 10), and only changes up to maxSize. It merges only a commit that GitHub's checks passed, and never a ticket with the label incident. Before a grant, Release must be how changes go live, GitHub's checks must be required, and people must have released 3 changes in the last 30 days. It ends when its date comes, when the engineering settings change, when the person who granted it is no longer an owner or admin, or when GitHub refuses a merge for a reason that a person must handle. A new grant takes the place of the old one. Owners and admins.

post/api/v1/workspace/auto-release

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 workspace auto-release
MCP toolNone. Call it over REST or with the CLI.
Rate limit20 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.

Body

application/json
until*string

When it ends, at most 30 days out

dailyCap*integer

The most changes that it releases in 24 hours

At least 1 · At most 10

maxSizeenum<string>

The largest change that it releases: small, medium or large

smallmediumlarge

Default "medium"

Response

200 · application/json
data*object
19 properties
id*string

A 24-character id

name*string
website*string | null

The business's website

description*string | null

What the business does, in its own words

logoUrl*string | null

A public link to the business's logo, or null when it has none

timezone*string | null

The business's IANA time zone. Teammates plan their days and routines in it

region*string | null

The business's country or region, ISO 3166 (like DE)

language*enum<string>

The language teammates write in, BCP 47

endefresitptnlplsvdanbficstrarheand 7 more

postalAddress*string | null

The business's postal address: every outreach email ends with it

outreachSending*boolean

Whether campaigns' approved emails go out from its mailboxes: off unless an owner or admin turns it on, and off again stops sending at once

troopRoom*enum<string>

Who handles a troop chat message naming no teammate: troop (a quick read decides whether a teammate answers, looks into it, reacts or stays out) or lead (the lead always answers)

trooplead

learnFromTalk*boolean

Whether teammates learn from what people say to each other: troop chat messages naming no teammate and comments on tasks, read now and then for facts about the business, kept as Memories with who said them. Off unless an owner or admin turns it on

learnFromWork*boolean

Whether a teammate writes down what a finished task taught it. Troopy looks at a task when a person stepped in: answered a question, turned a call down, commented, or sent work back. Each lesson waits for a person's approval. On unless an owner or admin turns it off

learnFromDocs*boolean

Whether teammates read the facts of the docs, web pages and files of the brain, and keep each one as a Memory with its document. A document that changes is read again. On unless an owner or admin turns it off

engineering*object

How engineering tickets go from Analyze to Release: who approves plans, who releases, and the gates

9 properties
planApproval*enum<string>

When a person approves a plan before the build starts: always, only for medium and large changes, or never

alwayslargernever

planApprovers*enum<string>

Who approves plans: everyone in the workspace, or owners and admins

everyonemanagers

releaseMode*enum<string>

How changes go live: github (people merge there), or button (a person presses Release)

githubbutton

releasers*enum<string>

Who presses Release: owners and admins, or everyone in the workspace

managerseveryone

mergeMethod*enum<string>

How Release merges a pull request. The repo must allow it

squashmergerebase

requireChecks*boolean

Whether GitHub's checks must pass before a ticket is ready to release

codeReview*enum<string>

Who reviews the code of each change at Test, before the QA tester tests it: off, one agent, or a council. A council is one agent for each AI lab that the organization connects, up to 3, or two Claude models when Claude is the only lab. Each agent of a council must pass. Auto-release needs a council, and merges only a change that a council passed

offonecouncil

tries*integer

How many times testing may send a ticket back to Build before the Engineer stops and asks

At least 1 · At most 5

codePlan*string | null

The AI plan that writes and reviews code. Null: Troopy picks, a Claude plan first. A plan that is out of usage gives its place to the next plan that writes code

autoRelease*object | null

The grant of an owner or admin for Troopy to release each engineering ticket that passed every gate, with no person pressing Release. null when nobody ever granted one

9 properties
on*boolean

In force now

until*string

When it ends

dailyCap*integer

The most changes that it releases in 24 hours

maxSize*enum<string>

The largest change that it releases, by the size that the Engineer gave it

smallmediumlarge

grantedBy*string

The name of the person who granted it

grantedAt*string

ISO 8601 date and time

endedAt*string | null
why*string | null

Why it ended

today*integer

The changes that it released in the last 24 hours

artGrant*object | null

The grant of an owner or admin for teammates to make art with the image provider with no yes, within the pictures a day of its plan. null: a person says yes to each batch

2 properties
grantedBy*string

The name of the person who turned it on

grantedAt*string

ISO 8601 date and time

createdAt*string

ISO 8601 date and time

memberCount*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.
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.