Documentation menu
These are pre-release docs from the main branch.

API reference

39 operations in plugins. Raw spec: openapi.json.

GET/api/v1/plugins/catalog

GET /api/plugins/catalog — the marketplace registry.

Responses

StatusDescription
200

Security: bearer

POST/api/v1/plugins/catalog

POST /api/plugins/catalog — publish a catalog entry with its first version. Operator action on a self-hosted core (the catalog is global); audited, and the manifest is validated against the closed capability vocabulary and the pinned interface version BEFORE any row exists.

Request body

PublishCatalogEntryRequest

Responses

StatusDescription
201
409

Security: bearer

GET/api/v1/plugins/catalog/{slug}

GET /api/plugins/catalog/{slug}.

Parameters

NameInTypeRequiredDescription
slugpathstringYes

Responses

StatusDescription
200
404

Security: bearer

POST/api/v1/plugins/catalog/{slug}/revoke

POST /api/plugins/catalog/{slug}/revoke — the registry kill switch. Denies new installs and marks every existing install revoked (deny-by-default: a revoked plugin never runs); one `plugin.install_revoked` event per affected install.

Parameters

NameInTypeRequiredDescription
slugpathstringYes

Request body

RevokeCatalogEntryRequest

Responses

StatusDescription
200
404
409

Security: bearer

POST/api/v1/plugins/catalog/{slug}/versions

POST /api/plugins/catalog/{slug}/versions — append a version to a live entry (revoked entries accept no new versions).

Parameters

NameInTypeRequiredDescription
slugpathstringYes

Request body

AppendVersionRequest

Responses

StatusDescription
201
404
409

Security: bearer

GET/api/v1/plugins/distribution/agent-skills

GET /api/plugins/distribution/agent-skills — the ACTIVE version of every org skill, with its provenance.

Responses

StatusDescription
200

Security: bearer

POST/api/v1/plugins/distribution/agent-skills/{id}/enabled

POST /api/plugins/distribution/agent-skills/{id}/enabled — the skills half's enable gate (deny-by-default: enable is an explicit owner/admin action on the active version row; version rows other than the active one are never enabled).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

RefuseStagedRequest

Responses

StatusDescription
204
404

Security: bearer

GET/api/v1/plugins/distribution/publishers

GET /api/plugins/distribution/publishers — the org's publisher registry (vouched history included; `verified` = the active badge).

Responses

StatusDescription
200

Security: bearer

POST/api/v1/plugins/distribution/publishers

POST /api/plugins/distribution/publishers — admin vouches a publisher identity on the org's behalf (re-vouch flips a revoked row back; a double-verify conflicts).

Request body

VerifyPublisherRequest

Responses

StatusDescription
200
409

Security: bearer

DELETE/api/v1/plugins/distribution/publishers/{id}

DELETE /api/plugins/distribution/publishers/{id} — withdraws the vouch; the badge disappears and the row persists as history.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404

Security: bearer

GET/api/v1/plugins/distribution/ratings

GET /api/plugins/distribution/ratings — the org's ratings, optionally narrowed to one artifact release.

Parameters

NameInTypeRequiredDescription
source_urlquerystringNo
artifact_digestquerystringNo

Responses

StatusDescription
200

Security: bearer

PUT/api/v1/plugins/distribution/ratings

PUT /api/plugins/distribution/ratings — upserts the caller's rating on one artifact release (one per user per release; re-rate wins).

Request body

PutRatingRequest

Responses

StatusDescription
200
400
409

Security: bearer

GET/api/v1/plugins/distribution/staged

GET /api/plugins/distribution/staged — pending + terminal rows. Owners/admins see everything; plain members see only their OWN uploads (the deny-by-default staged visibility).

Responses

StatusDescription
200

Security: bearer

POST/api/v1/plugins/distribution/staged/github

POST /api/plugins/distribution/staged/github — the pinned GitHub pull: the manifest is fetched AT THE PINNED COMMIT (never HEAD), the digest is computed over the fetched bytes, the pin is recorded on the staged row; a no-pin call is refused.

Request body

StageFromGithubRequest

Responses

StatusDescription
201
404
422

Security: bearer

POST/api/v1/plugins/distribution/staged/registry

POST /api/plugins/distribution/staged/registry — a public marketplace registry entry (static JSON, git-tag pinned, code-signature/digest shape: the BUILD-PROMPT v1 fixture). The SERVER fetches and the adapter validates BEFORE anything registers.

Request body

StageFromRegistryRequest

Responses

StatusDescription
201
404
422

Security: bearer

POST/api/v1/plugins/distribution/staged/skill

POST /api/plugins/distribution/staged/skill — skills from free/open community marketplaces/repo APIs (`skill_community`: the server refetches the manifest and digest-verifies it before the row exists) and manual member uploads (`manual_upload`: inline manifest). Skill content is UNTRUSTED RAG-class data — staged, never executed.

Request body

StageSkillRequest

Responses

StatusDescription
201
404
422

Security: bearer

POST/api/v1/plugins/distribution/staged/zip

POST /api/plugins/distribution/staged/zip — the local zip import. ALL the sandbox validation (manifest schema, artifact digest, size/entry caps, exactly one root manifest.json, traversal safety) runs BEFORE the row exists; the declared capability list rides into the SAME consent screen.

Request body

array<integer>

Responses

StatusDescription
201
400
413
422

Security: bearer

POST/api/v1/plugins/distribution/staged/{id}/approve

POST /api/plugins/distribution/staged/{id}/approve — the owner/admin review. Approve MINTS but remains deny-by-default: a plugin adopt is created DISABLED (a public-registry source lands the SAME staged pipeline — browsing is help, not bypass); a skill lands disabled until enabled. Grants must subset the staged manifest's declared set.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

ApproveStagedRequest

Responses

StatusDescription
200
404
409

Security: bearer

POST/api/v1/plugins/distribution/staged/{id}/refuse

POST /api/plugins/distribution/staged/{id}/refuse — the reviewer declines: terminal for the staged row (the uploader may re-stage a fresh upload). A typed note is required.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

RefuseStagedRequest

Responses

StatusDescription
200
404
409

Security: bearer

GET/api/v1/plugins/distribution/theme-packs

GET /api/plugins/distribution/theme-packs — the org's installed theme packs (ADR 0009 V1 distribution; restyle-only manifests).

Responses

StatusDescription
200

Security: bearer

DELETE/api/v1/plugins/distribution/theme-packs/{slug}

DELETE /api/plugins/distribution/theme-packs/{slug} — uninstall. Refused while the pack is the org's active theme (repoint the typed `appearance.theme` setting first).

Parameters

NameInTypeRequiredDescription
slugpathstringYesinstalled pack slug

Responses

StatusDescription
204
404
409

Security: bearer

GET/api/v1/plugins/installed

GET /api/plugins/installed — this org's adoptions.

Responses

StatusDescription
200

Security: bearer

POST/api/v1/plugins/installed

POST /api/plugins/installed — adopt a catalog entry at a pinned version. Created DISABLED (deny-by-default); enabling is a separate explicit admin action.

Request body

InstallPluginRequest

Responses

StatusDescription
201
404
409

Security: bearer

PATCH/api/v1/plugins/installed/{id}

PATCH /api/plugins/installed/{id} — enable/disable, upgrade the pinned version, or adjust the grant set. Widening grants re-validates against the NEW pinned manifest. Revoked installs are terminal.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

UpdateInstallRequest

Responses

StatusDescription
200
404
409

Security: bearer

DELETE/api/v1/plugins/installed/{id}

DELETE /api/plugins/installed/{id} — uninstall (the adoption row goes away; re-install is a fresh adoption).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
204
404

Security: bearer

POST/api/v1/plugins/installed/{id}/discard-update

POST /api/plugins/installed/{id}/discard-update — abandon the pending re-consent (the OLD version keeps running; the pending columns clear).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
204
404

Security: bearer

GET/api/v1/plugins/installed/{id}/provenance

GET /api/plugins/installed/{id}/provenance — the append-only `{source_kind, source_url, fetched_ref, artifact_digest, uploader}` for one install. The chain SURVIVES terminal uninstalls (no cascade).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404

Security: bearer

POST/api/v1/plugins/installed/{id}/revoke

POST /api/plugins/installed/{id}/revoke — the org's own kill switch for ONE install.

Distinct from disabling (reversible, grants untouched) and from the catalog-wide revocation (which cascades to every tenant's installs). Revoke is terminal, the reason is required, and execution stops at the parent's gate: `authorize_invocation` refuses a revoked status, and the artifact load path refuses before it reads a byte.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

RevokeInstallRequest

Responses

StatusDescription
200
404
409

Security: bearer

POST/api/v1/plugins/installed/{id}/rollback

POST /api/plugins/installed/{id}/rollback — move the pin back to the previous digest.

A rollback is a POINTER MOVE: version, digest and grants return to what they were before the last update, and no bytes are fetched. The old module is still in the store because keys are content-addressed, so an update wrote a new key rather than overwriting the old one. One step, not a toggle: the parked target is cleared, so a second rollback answers `409` until the update is re-consented. That is deliberate — the operator should say which bytes they want, not ping-pong between two.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404
409

Security: bearer

GET/api/v1/plugins/installed/{id}/settings

GET /api/plugins/installed/{id}/settings — the render source: the pinned manifest's declared JSON-Schema + the validated config.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404

Security: bearer

PATCH/api/v1/plugins/installed/{id}/settings

PATCH /api/plugins/installed/{id}/settings — the config is validated against the pinned manifest's schema AT THE WRITE BOUNDARY (the typed-registry doctrine: no hand-authored per-plugin pages, and a plugin with no declared schema gets consent/enable/disable only — this endpoint refuses its config writes). Every write is audited.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

PutInstallSettingsRequest

Responses

StatusDescription
200
404
409
422

Security: bearer

GET/api/v1/plugins/installed/{id}/update

GET /api/plugins/installed/{id}/update — the pending-state read (the consent screen shows exactly what consent would do).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404

Security: bearer

POST/api/v1/plugins/installed/{id}/update

POST /api/plugins/installed/{id}/update — propose the update: the candidate version lands in the pending columns while the OLD version keeps running; the response IS the re-consent diff the consent screen renders.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

ProposeUpdateRequest

Responses

StatusDescription
200
404
409

Security: bearer

GET/api/v1/plugins/surface/automation-actions

GET /api/plugins/surface/automation-actions — the org's registered plugin automation action kinds (the automations editor lists them alongside the built-ins).

Responses

StatusDescription
200

Security: bearer

GET/api/v1/plugins/surface/field-validators

GET /api/plugins/surface/field-validators — the org's registered plugin schema validators for board custom fields.

Responses

StatusDescription
200

Security: bearer

GET/api/v1/plugins/surface/report-renders

GET /api/plugins/surface/report-renders — the org's registered plugin render kinds for the report builder.

Responses

StatusDescription
200

Security: bearer

GET/api/v1/plugins/surface/widgets

GET /api/plugins/surface/widgets — the org's registered plugin widgets (dashboard + ticket-pane slots), enabled installs only.

Responses

StatusDescription
200

Security: bearer