Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Skills

Add a skill pack

Adds a pack of skills from a public GitHub repository, on at once, at the commit its default branch is at. Each skill is a folder with a SKILL.md. Its skills become instructions for every teammate: add only repositories you trust. A workspace adds 20 packs at most, and adds or syncs 10 an hour. Needs an owner or admin.

post/api/v1/skill-packs

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 packs add
MCP toolNone. Call it over REST or with the CLI.
Rate limit10 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
url*string

The repository, like https://github.com/owner/repo

At least 3 characters · At most 300 characters

folderstring

The folder that holds the skill folders, like skills/marketing. Leave it out to find it

At most 200 characters

Response

200 · application/json
data*object
14 properties
key*string

The pack, as owner__repo of its GitHub repository, like coreyhaines31__marketingskills

At most 150 characters

name*string

The repository's name, like marketingskills

repo*string

owner/repo on GitHub

folder*string

The folder of the repository that holds the skill folders, or several folders apart by commas; empty for the top

sha*string

The commit that the pack reads

builtIn*boolean

Ships with Troopy: it follows Troopy's updates, and can't be removed

enabled*boolean

On: every teammate sees its skills that are on

author*string
license*string | null

The SPDX id of its license, like MIT

stars*integer | null

Its stars on GitHub when it was added or synced

about*string
skills*array<object>
4 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
on*boolean

Teammates see it: the pack is on, and nobody turned the skill off, and no skill before it has its name

shadowed*boolean

Off because a skill of the workspace, or of a pack before it, has its name

warnings*array<string>

What Troopy left out when it read the pack, and why

syncedAt*string | null

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.