Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Skills

Write a skill

Writes a skill of the workspace: a new one, or new words for the one with that name. Every teammate can open it. Anyone in the workspace can write one. When a teammate calls it (save_skill), the call waits for a person's approval. A name that a role's own skill has, or a command like stop, is taken.

post/api/v1/skills

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 skills save
MCP toolNone. Call it over REST or with the CLI.
Rate limit30 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
name*string

The skill's name, like cold-email: a message that starts with /cold-email asks a teammate to use it

At most 64 characters

description*string

When to use it, in one or two sentences: every teammate's list of skills shows it

At least 1 characters · At most 1024 characters

text*string

The steps, in markdown: what to do, in order, and what to check

At least 1 characters · At most 40000 characters

Response

200 · application/json
data*object
12 properties
name*string

The skill's name, like cold-email: a message that starts with /cold-email asks a teammate to use it

At most 64 characters

description*string

When to use it: what every teammate's list of skills shows

enabled*boolean

Off: no teammate sees it or opens it

source*enum<string>

person: a person wrote it. teammate: a teammate proposed it, and a person approved it. taught: a person taught it by doing the task once

personteammatetaught

author*object

Who made it: a person, an API key, or the teammate whose proposal a person approved

3 properties
type*enum<string>

personagentapi

id*string
name*string
teammate*string | null

A taught skill: the handle of the teammate whose browser showed it

uses*integer

How many runs used it: a person asked for it with /name, or a teammate opened it

lastUsedAt*string | null

When a run last used it. null when no run did

createdAt*string

ISO 8601 date and time

updatedAt*string

ISO 8601 date and time

text*string

The steps, in markdown

updatedBy*object

Who changed it last

3 properties
type*enum<string>

personagentapi

id*string
name*string

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.