Plugins API
A plugin extends Strongly itself and runs no pod of its own: installing one records an instance with its configuration, and the platform starts using it. Two plugins exist:
| Plugin | What it does | Values |
|---|---|---|
datahub | Sends workflow lineage, models, AutoML runs and drift results to your DataHub catalog | datahubBaseUrl, authMode and the settings its schema lists |
stripe-app-payments | Lets app owners charge for access to their apps with their own Stripe account (an app's Auth tab gains a Paid access card) | none |
Who may manage plugins: in a single-tenant deployment, administrators only; in a multi-tenant
deployment, administrators and developers, each developer for their own organization. Anyone
else is refused with 403. All endpoints require authentication via the X-API-Key header and
the scope shown.
Instance Object
{
"_id": "Xk3pR9vQ2mT7aLwYe",
"pluginId": "datahub",
"scope": "org",
"organizationId": "org_xyz",
"enabled": true,
"status": "active",
"features": { "lineage": true, "modelSync": true },
"config": { "datahubBaseUrl": "http://datahub-gms:8080", "authMode": "pat" },
"stats": { "lineageEmitted": 120, "modelsEmitted": 8 },
"installedBy": "user_123",
"createdAt": "2026-10-11T09:00:00.000Z",
"updatedAt": "2026-10-11T09:00:00.000Z"
}
| Field | Type | Description |
|---|---|---|
_id | string | The instance's id |
pluginId | string | Which plugin |
scope | string | all (single-tenant: one instance for the whole platform) or org (one per organization) |
organizationId | string | null | Its organization (null with scope all) |
enabled | boolean | Whether it is on |
status | string | active or disabled |
features | object | Each feature id and whether it is on |
config | object | Its settings, by configuration field key. Secret fields (tokens) are stored encrypted and never returned |
stats | object | What the plugin has done (DataHub: lineageEmitted, modelsEmitted, lastEventAt, lastError) |
installedBy | string | Who installed it |
createdAt, updatedAt | string | ISO 8601 |
GET /api/v1/plugins
The installable plugins, each with id, displayName, description, configSchema (each field's
key, label, type, required, default, help) and features (each id, label,
default).
Scope: marketplace:read
Response 200 OK: every plugin, in one list.
GET /api/v1/plugins/instances
The installed plugins you may see: as an administrator every instance, as a developer (multi-tenant) your organization's.
Scope: marketplace:read
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Results per page |
cursor | string | No | meta.nextCursor of the previous page |
Response 200 OK: a page of instances, newest first.
POST /api/v1/plugins/instances
Install a plugin. Installing one that is already installed replaces its configuration and turns it on.
Scope: marketplace:deploy
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
pluginId | string | Yes | The plugin (GET /plugins) |
values | object | No | Its configuration, by field key; every required field must be given |
features | object | No | Feature ids to turn on or off (the rest take their defaults) |
organizationId | string | No | Multi-tenant administrators only: the organization to install it for (default: your own) |
Response 201 Created: the instance.
| Status | When |
|---|---|
400 validation-error | A required configuration field is missing |
404 not-found | No plugin has that id |
GET /api/v1/plugins/instances/:id
One installed plugin.
Scope: marketplace:read
Response 200 OK: the instance.
PATCH /api/v1/plugins/instances/:id
Turn an installed plugin on or off, or change its configuration or features. Turning it off keeps it installed with its configuration.
Scope: marketplace:deploy
Request Body (every field optional)
| Field | Type | Description |
|---|---|---|
enabled | boolean | Whether the plugin is on |
values | object | Configuration fields to change, by key |
features | object | Feature ids to turn on or off |
Response 200 OK: the instance.
| Status | When |
|---|---|
409 invalid-state | stripe-app-payments is being turned off while an app still charges for access: turn off paid access on each app first |
DELETE /api/v1/plugins/instances/:id
Uninstall a plugin.
Scope: marketplace:deploy
Response 204 No Content
| Status | When |
|---|---|
409 invalid-state | stripe-app-payments while an app still charges for access |