Curated Plugin Registry¶
The Plugins tab uses these discovery endpoints when FEATURE_V3_PLUGINS=true.
Plugins Overview :material-http: HTTP Manifest Docs Plugin Config File Plugin Builder
Endpoints (admin scope required)¶
GET /plugins
: List installed plugins with manifests and current enabled/config values
GET /plugins/{id}/config
: Return enabled and settings for a plugin
PUT /plugins/{id}/config
: Validate and persist via the JSON config store
GET /plugin-registry
: Serve the curated registry JSON for UI search
Config store¶
Path
: FAXBOT_CONFIG_PATH (default config/faxbot.config.json)
Writes
: Atomic writes with .bak backups; roll back to last known‑good on validation/startup failure
Security & permissions¶
Scopes
: admin:plugins:read, admin:plugins:write
Who can write
: Only keys with keys:manage may change plugin configs
Rate limits : Per‑key RPM: mirror inbound list/get defaults for reads (stricter for writes)
Dynamic install (optional)¶
Default
: Keep FEATURE_PLUGIN_INSTALL=false
When enabled : Use a strict allowlist and checksums (signatures if provided); non‑interactive, sandboxed install only
HIPAA : Leave remote install disabled for HIPAA profiles
Admin Console behavior¶
Plugins tab
: Reads /plugins and renders schema‑driven forms
Backend isolation : Only the active outbound provider’s help is shown; switching providers is a guided flow (no mixed instructions)
Notes¶
- Backends remain isolated across docs and UI; Phaxio users never see SIP/Asterisk instructions
- Inbound cloud callbacks remain core HTTP endpoints that delegate to plugin handlers; HMAC/signature verification is enforced in core
Troubleshooting¶
/pluginsreturns 404 → enableFEATURE_V3_PLUGINS=trueand restart the API- Config write errors → check permissions on
FAXBOT_CONFIG_PATH(default lives under thefaxdatavolume)
Quick examples¶
{
"providers": [
{
"id": "phaxio",
"name": "Phaxio (Cloud)",
"type": "outbound",
"version": "1.0.0",
"manifest": {
"actions": { "send_fax": { "method": "POST", "url": "https://api.phaxio.com/..." } },
"allowed_domains": ["api.phaxio.com"]
}
}
]
}
{
"plugins": [
{
"id": "phaxio",
"enabled": true,
"settings": { "api_key": "***", "api_secret": "***" },
"type": "outbound"
}
]
}
BASE="http://localhost:8080"
API_KEY="your_admin_api_key"
curl -sS -X PUT "$BASE/plugins/phaxio/config" \
-H "X-API-Key: $API_KEY" -H 'content-type: application/json' \
-d '{"enabled":true, "settings": {"api_key":"...","api_secret":"..."}}'