Skip to main content

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:

PluginWhat it doesValues
datahubSends workflow lineage, models, AutoML runs and drift results to your DataHub catalogdatahubBaseUrl, authMode and the settings its schema lists
stripe-app-paymentsLets 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"
}
FieldTypeDescription
_idstringThe instance's id
pluginIdstringWhich plugin
scopestringall (single-tenant: one instance for the whole platform) or org (one per organization)
organizationIdstring | nullIts organization (null with scope all)
enabledbooleanWhether it is on
statusstringactive or disabled
featuresobjectEach feature id and whether it is on
configobjectIts settings, by configuration field key. Secret fields (tokens) are stored encrypted and never returned
statsobjectWhat the plugin has done (DataHub: lineageEmitted, modelsEmitted, lastEventAt, lastError)
installedBystringWho installed it
createdAt, updatedAtstringISO 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

ParameterTypeRequiredDescription
limitintegerNoResults per page
cursorstringNometa.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

FieldTypeRequiredDescription
pluginIdstringYesThe plugin (GET /plugins)
valuesobjectNoIts configuration, by field key; every required field must be given
featuresobjectNoFeature ids to turn on or off (the rest take their defaults)
organizationIdstringNoMulti-tenant administrators only: the organization to install it for (default: your own)

Response 201 Created: the instance.

StatusWhen
400 validation-errorA required configuration field is missing
404 not-foundNo 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)

FieldTypeDescription
enabledbooleanWhether the plugin is on
valuesobjectConfiguration fields to change, by key
featuresobjectFeature ids to turn on or off

Response 200 OK: the instance.

StatusWhen
409 invalid-statestripe-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

StatusWhen
409 invalid-statestripe-app-payments while an app still charges for access