Skip to content

Plugins

  • Overview
    Architecture and provider slots.
    Stay here

  • Curated Registry
    Discover vetted providers.
    Browse

  • :material-http: HTTP Manifest Providers
    Describe providers declaratively.
    Guide

  • Plugin Config File
    Resolved config formats and locations.
    Reference

  • SIP Provider Plugins
    Self‑hosted telephony adapters.
    Read

  • Home Assistant Sample
    Integrate with your smart home.
    Example

Faxbot v3 introduces runtime‑switchable provider plugins backed by a single resolved config file. Initially supported slots are outbound (send faxes) and storage (inbound artifact storage). Inbound cloud callbacks remain core endpoints that delegate to plugin‑specific handlers; signature verification stays in core.

  • Outbound: exactly one active provider (e.g., phaxio, sinch, sip, documo, signalwire, or an HTTP manifest provider)
  • Storage: local or S3/S3‑compatible (MinIO) for inbound PDFs

Feature flags and config - Enable discovery endpoints: set FEATURE_V3_PLUGINS=true on the API - Optional dynamic install (off by default): FEATURE_PLUGIN_INSTALL=true (strict allowlist & checksums required) - Resolved config file path: FAXBOT_CONFIG_PATH (default config/faxbot.config.json)

Admin Console integration - Plugins tab lists installed providers with enable/disable toggles - Each provider shows schema‑driven settings and “Learn more” links - UI surfaces only the currently selected outbound provider’s guidance (backend isolation)

Learn more - Curated Registry - HTTP Manifest Providers


Manifests available (examples)

These example manifests live in the repo and can be used as starting points.

  • id faxplus — Fax.Plus
  • id ringcentral — RingCentral — Try it
  • id interfax — InterFAX — Try it
  • id sfax — Sfax (Consensus)
  • id pamfax — PamFax
  • id dropbox_fax — Dropbox Fax
{
  "id": "ringcentral",
  "name": "RingCentral Fax API",
  "auth": { "scheme": "bearer" },
  "traits": {
    "kind": "cloud",
    "requires_ghostscript": true,
    "requires_tiff": false,
    "supports_inbound": false,
    "inbound_verification": "none",
    "needs_storage": false,
    "outbound_status_only": false
  },
  "actions": {
    "send_fax": {
      "method": "POST",
      "url": "https://platform.ringcentral.com/restapi/v1.0/account/~/extension/~/fax",
      "body": { "kind": "multipart", "template": "request={\\"to\\":[{\\"phoneNumber\\":\\"{{to}}\\"}]}&attachment={{file}}" },
      "response": { "faxId": "id" }
    },
    "get_status": {
      "method": "GET",
      "url": "https://platform.ringcentral.com/restapi/v1.0/account/~/message-store/{{fax_id}}",
      "body": { "kind": "none", "template": "" },
      "response": { "status": "messageStatus", "sentPages": "faxPageCount" }
    }
  },
  "allowed_domains": ["platform.ringcentral.com"],
  "timeout_ms": 15000
}
{
  "id": "interfax",
  "name": "InterFAX API",
  "auth": { "scheme": "basic" },
  "actions": {
    "send_fax": {
      "method": "POST",
      "url": "https://rest.interfax.net/outbound/faxes?faxNumber={{to}}",
      "headers": { "Content-Location": "{{file_url}}", "Content-Type": "application/pdf" },
      "body": { "kind": "none", "template": "" },
      "response": { "faxId": "id" }
    },
    "get_status": {
      "method": "GET",
      "url": "https://rest.interfax.net/outbound/faxes/{{fax_id}}",
      "body": { "kind": "none", "template": "" },
      "response": { "status": "status" }
    }
  },
  "allowed_domains": ["rest.interfax.net"]
}