Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Apps

Connect an app

Connects a service to this workspace with its API key, which Troopy checks with the service and stores sealed. Troopy only reads. GitHub connects from Settings instead: it installs Troopy's GitHub App on the repos you pick. For Stripe, use a restricted key (rk_live_ or rk_test_) with Read access to Customers, Subscriptions, Invoices and Charges. To have Troopy answer disputes, add Read and Write access to Disputes and Write access to Files: the evidence of a dispute is the one thing that Troopy writes in Stripe. For PostHog (US or EU cloud), use a personal API key (phx_) with Query read and Project read; send project when the key reaches more than one project. Connecting again replaces the key. Needs an owner or admin.

post/api/v1/apps/{provider}

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 apps connect
MCP toolNone. Call it over REST or with the CLI.
Rate limit10 calls in 60 seconds, for each key

Path parameters

provider*enum<string>

The app, like stripe

stripeposthoggithubnotionhunterlemonsqueezypolarpaddledodopaymentssearchconsolemetaadsgooglecalendargeminiopenaifalreplicate

Body

application/json
key*string

The service's API key

At least 8 characters · At most 300 characters

projectinteger

PostHog: the project's ID, when the key reaches more than one

scopestring

Lemon Squeezy: the ID of the store. Polar: the ID of the organization. Then Troopy reads only that one

modelstring

An image provider: the model that makes the pictures, when not its default

Response

200 · application/json
data*object
11 properties
provider*enum<string>

The app, like stripe

stripeposthoggithubnotionhunterlemonsqueezypolarpaddledodopaymentssearchconsolemetaadsgooglecalendargeminiopenaifalreplicate

name*string
status*enum<string>

connectednot_connected

mode*enum<string> | null

For Stripe: whether the key reads test or live data

testlive

account*string | null

For PostHog: the project it reads, like Viraloop (US). For an image provider: its model

pictures*boolean

An image provider: whether the workspace makes its pictures with this one

hint*string | null

The key's last four characters

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

personagentapi

id*string
name*string
connectedAt*string | null
lastUsedAt*string | null
choices*array<object> | null

What the connection can read, and what a person chose of it. Search Console has properties, and Meta Ads has ad accounts. null for the other services

3 properties
id*string
label*string
chosen*boolean

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.
404 not_foundCheck the path and any id in it. Every operation is listed in /api/v1/openapi.json.
429 rate_limitedWait the number of seconds in Retry-After, then retry.