Reference
Troupe Cloud platform reference
Every procedure of Troupe Cloud's platform contract. Troupe Cloud serves them over REST and RPC with the same mapping as the runtime contract; none is an MCP tool. Troupe Cloud also serves the open runtime contract: see the runtime protocol reference.
Groups
63 procedures in 15 groups; 0 are MCP tools.
| Group | Purpose | Procedures | MCP tools |
|---|---|---|---|
account | The caller's own identity, sign-in sessions and re-authentication. | 6 | 0 |
orgs | Organizations, the tenant. The creator becomes the first owner. | 5 | 0 |
members | An org's members and their roles. | 4 | 0 |
invitations | Invitations to join an org, sent and received. | 5 | 0 |
projects | Projects inside an org: what device sessions, runs and builds belong to. | 7 | 0 |
keys | Org API keys: scoped credentials for CI and other non-interactive callers. | 3 | 0 |
usage | Metered usage of an org, per period. | 1 | 0 |
quotas | An org's limits and what is in use, and the project limits an org admin sets within the org's. | 2 | 0 |
issuers | Trusted-issuer registrations: an external issuer's short-lived JWTs exchanged for Troupe tokens. | 5 | 0 |
connections | OIDC connections: signing people in to Troupe with an external OpenID Provider. | 3 | 0 |
runs | Cloud test runs: a troupe test run split into sandboxed shards, each driving its own device. | 4 | 0 |
builds | Builds of a repository ref or an uploaded tarball: probed in a sandbox, planned with a preset, built on a build machine. | 5 | 0 |
artifacts | What builds left: write-once objects with a server-computed SHA-256, installed by id or downloaded. | 3 | 0 |
uploads | Upload sessions: per-file, create-only, size-bound signed PUTs within a byte budget. | 2 | 0 |
credentials | Store signing credentials: an App Store Connect key, an Android upload keystore, held by the credentials service; reads return metadata only, and every change is trust-class. | 8 | 0 |
Also: shared schemas, scopes, errors.
Reading a procedure
- REST is
/v1/<group>/<operation-kebab>:GETwith query parameters when the procedure is read-only and its input is flat, otherwisePOSTwith a JSON body. RPC is/rpc/v2/<group>/<operation>. SendAuthorization: Bearer <token>andTroupe-Contract: 1.0. - MCP: the tool name is the id with
.replaced by_. Only procedures marked as tools are served on/mcpand bytroupe mcp. The hints become the tool's annotations. - Auth lists the scopes a caller must hold, all of them (scopes). Tenancy says what the input names and whose view it must be in.
- Requires names the capabilities the device must declare; the runtime checks them before it calls the platform and answers
CAPABILITY_UNSUPPORTEDotherwise. - Input is a strict object: an unknown key fails with
VALIDATION.?marks an optional field; comments give defaults and bounds. Output objects are read leniently: unknown keys are kept, and an enum written'a' | 'b' | …is open, so a client must handle values it does not know. - Errors: the letters are the implicit sets (U universal, S session, D drive, L locator, E environment), followed by the extra codes. Every surface carries the same error body (errors).
- Stability: an
experimentalprocedure may change or disappear in any minor version and is never an MCP tool; astableone changes only additively within its major.
All procedures
| Procedure | REST | Auth | MCP tool | Stability |
|---|---|---|---|---|
account.get | GET /v1/account/get | session | — | experimental |
account.sessions | GET /v1/account/sessions | account:read | — | experimental |
account.revokeSession | POST /v1/account/revoke-session | account:write | — | experimental |
account.reauthenticate | POST /v1/account/reauthenticate | account:write | — | experimental |
account.grants | GET /v1/account/grants | account:read | — | experimental |
account.revokeGrant | POST /v1/account/revoke-grant | account:write | — | experimental |
orgs.create | POST /v1/orgs/create | account:write | — | experimental |
orgs.list | GET /v1/orgs/list | session | — | experimental |
orgs.get | GET /v1/orgs/get | org:read | — | experimental |
orgs.update | POST /v1/orgs/update | org:manage | — | experimental |
orgs.setPlacementScope | POST /v1/orgs/set-placement-scope | org:manage | — | experimental |
members.list | GET /v1/members/list | org:read | — | experimental |
members.updateRole | POST /v1/members/update-role | org:manage | — | experimental |
members.remove | POST /v1/members/remove | org:manage | — | experimental |
members.leave | POST /v1/members/leave | account:write | — | experimental |
invitations.create | POST /v1/invitations/create | org:manage | — | experimental |
invitations.list | GET /v1/invitations/list | org:read | — | experimental |
invitations.revoke | POST /v1/invitations/revoke | org:manage | — | experimental |
invitations.received | GET /v1/invitations/received | account:read | — | experimental |
invitations.accept | POST /v1/invitations/accept | account:write | — | experimental |
projects.list | GET /v1/projects/list | projects:read | — | experimental |
projects.get | GET /v1/projects/get | projects:read | — | experimental |
projects.create | POST /v1/projects/create | projects:write | — | experimental |
projects.update | POST /v1/projects/update | projects:write | — | experimental |
projects.archive | POST /v1/projects/archive | projects:write | — | experimental |
projects.resolve | GET /v1/projects/resolve | projects:read | — | experimental |
projects.ensure | POST /v1/projects/ensure | projects:write | — | experimental |
keys.create | POST /v1/keys/create | keys:write | — | experimental |
keys.list | GET /v1/keys/list | keys:read | — | experimental |
keys.revoke | POST /v1/keys/revoke | keys:write | — | experimental |
usage.get | GET /v1/usage/get | usage:read | — | experimental |
quotas.get | GET /v1/quotas/get | usage:read | — | experimental |
quotas.setProject | POST /v1/quotas/set-project | org:manage | — | experimental |
issuers.create | POST /v1/issuers/create | org:manage | — | experimental |
issuers.list | GET /v1/issuers/list | org:manage | — | experimental |
issuers.update | POST /v1/issuers/update | org:manage | — | experimental |
issuers.suspend | POST /v1/issuers/suspend | org:manage | — | experimental |
issuers.remove | POST /v1/issuers/remove | org:manage | — | experimental |
connections.create | POST /v1/connections/create | org:manage | — | experimental |
connections.list | GET /v1/connections/list | org:manage | — | experimental |
connections.remove | POST /v1/connections/remove | org:manage | — | experimental |
credentials.list | GET /v1/credentials/list | signing:use | — | experimental |
credentials.get | GET /v1/credentials/get | signing:use | — | experimental |
credentials.uploadAscKey | POST /v1/credentials/upload-asc-key | org:manage | — | experimental |
credentials.createAndroidKeystore | POST /v1/credentials/create-android-keystore | org:manage | — | experimental |
credentials.uploadAndroidKeystore | POST /v1/credentials/upload-android-keystore | org:manage | — | experimental |
credentials.rotate | POST /v1/credentials/rotate | org:manage | — | experimental |
credentials.updateAllowList | POST /v1/credentials/update-allow-list | org:manage | — | experimental |
credentials.delete | POST /v1/credentials/delete | org:manage | — | experimental |
runs.create | POST /v1/runs/create | devices:acquire, runs:report | — | experimental |
runs.cancel | POST /v1/runs/cancel | devices:acquire | — | experimental |
runs.wait | GET /v1/runs/wait | runs:read | — | experimental |
runs.shards | GET /v1/runs/shards | runs:read | — | experimental |
builds.create | POST /v1/builds/create | builds:write | — | experimental |
builds.get | GET /v1/builds/get | builds:read | — | experimental |
builds.list | GET /v1/builds/list | builds:read | — | experimental |
builds.cancel | POST /v1/builds/cancel | builds:write | — | experimental |
builds.logs | GET /v1/builds/logs | builds:read | — | experimental |
artifacts.list | GET /v1/artifacts/list | artifacts:read | — | experimental |
artifacts.get | GET /v1/artifacts/get | artifacts:read | — | experimental |
artifacts.download | GET /v1/artifacts/download | artifacts:read | — | experimental |
uploads.grant | POST /v1/uploads/grant | builds:write | — | experimental |
uploads.complete | POST /v1/uploads/complete | builds:write | — | experimental |