Skip to content

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

  • /plugins returns 404 → enable FEATURE_V3_PLUGINS=true and restart the API
  • Config write errors → check permissions on FAXBOT_CONFIG_PATH (default lives under the faxdata volume)

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":"..."}}'