Plugins API Reference (BFF-facing)
Endpoints
GET /api/plugins/manifests→PluginManifest[](scoped by tenant host)GET /api/plugins/bundle?entry=<id>&id=<id>→ ESM bundle filePOST /api/plugins/refresh→ reload manifests from configPOST /api/plugins/quarantine/{id}→ quarantine a pluginPOST /api/plugins/unquarantine/{id}→ reverse quarantine
Headers
- Baseline response headers (bundles):
Content-Type: text/javascript; charset=utf-8ETag: sha256-<hex>Cache-Control: public, max-age=31536000, immutableX-Content-Type-Options: nosniffCross-Origin-Resource-Policy: same-origin
- Caching correctness:
Vary: Cookie, X-Plugin-Idon manifests/bundles
- Enforcement signals:
X-Plugin-Quarantined: 1(403) when blockedX-Allowlist-Violation: 1(403) when allow-list failsX-Integrity-Error: 1(409) on hash mismatch
See also: Canonical plugin reference ./experience_plugins and Ops Runbook ./ops-runbook.