Admin Console¶
The Admin Console lets you manage keys, jobs, inbound inbox, diagnostics, and settings without editing .env by hand.
- Local‑only by default; access is restricted to loopback in current builds
 - Works with any backend (Phaxio, Sinch, SIP/Asterisk, SignalWire)
 - Provides copy‑ready configuration after validation
 
Usage¶
- Access at 
http://localhost:8080/admin/ui/when the API is running - If you see 404, set 
ENABLE_LOCAL_ADMIN=true(or setADMIN_UI_DIR=/app/admin_ui_dist) and restart - Explore tabs for Dashboard, Send, Jobs, Inbound, Keys, Settings, Diagnostics
 
Plugins (preview)¶
- When enabled by the server, a Plugins tab appears to help operators view installed providers and persist an outbound selection to the server’s config file. This does not change the running backend immediately; apply changes during maintenance windows.
 - Enable by setting 
FEATURE_V3_PLUGINS=trueon the API. The tab uses/pluginsand related endpoints with admin authentication. 
Demo (Simulated)¶
- Hosted demo with simulated data: https://faxbot.net/admin-demo/
 - No external calls; intended for showcasing the workflow
 
Live Apply & Export¶
- Setup Wizard: choose a backend (Phaxio/Sinch/SIP), enter credentials, pick security defaults (require API key, enforce HTTPS, audit logging), then click “Apply & Reload”.
 - Changes apply in‑process immediately.
 - Click “Generate .env” to export a snippet for persistence across restarts.
 - Settings: quick edits for backend/security and selected provider fields.
 - Click “Apply & Reload” to take effect immediately.
 - Backend/storage changes may require a restart to initialize provider clients (e.g., Asterisk AMI) or swap storage drivers safely.
 
Persisted Settings (v2)¶
- Enable loading of a server-side .env on startup: toggle “Load persisted .env at startup” in Settings (sets ENABLE_PERSISTED_SETTINGS=true).
 - Save the current configuration to a persisted file by clicking “Save .env to server”.
 - Default path: /faxdata/faxbot.env (lives on the 
faxdatavolume). - You can still export and download the .env if you prefer manual review.
 - Notes
 - When enabled, the API loads values from the persisted file before constructing settings, overriding process environment.
 - Keep this feature local-only and behind the Admin Console gate.
 
Restart (Optional)¶
- If 
ADMIN_ALLOW_RESTART=true, the Diagnostics page shows a “Restart API” button. - This triggers a controlled process exit so your container manager (e.g., Docker) restarts the API.
 - If the flag is not set, the button returns “Restart not allowed”.
 
Storage (S3)¶
- To use S3 for inbound artifacts, set 
STORAGE_BACKEND=s3and S3 values (S3_BUCKET,S3_REGION, optionalS3_PREFIX,S3_ENDPOINT_URL,S3_KMS_KEY_ID). - IAM credentials must come from the runtime (environment or role). The Admin Console does not store or display secrets.
 - Validate S3:
 - Enable 
ENABLE_S3_DIAGNOSTICS=trueon the API to allow Diagnostics toHeadBucketand surfacechecks.storage.accessible. - Otherwise, Diagnostics will show only presence checks.
 - Best practice: apply settings, then run Diagnostics to verify access, and perform an end‑to‑end inbound test.
 
Dashboard & Diagnostics¶
- Dashboard shows the live backend (phaxio/sinch/sip) and simple queue stats. After applying settings, it reflects the new backend.
 - Diagnostics runs a comprehensive check (backend credentials/config, storage, inbound flags, security posture) and shows recommendations.
 
Under the Hood¶
- The console reads settings from 
GET /admin/settingsand health fromGET /admin/health-status - “Apply & Reload” calls 
PUT /admin/settingsthenPOST /admin/settings/reload - Persisted settings writes a server‑side 
.envviaPOST /admin/settings/persist(when enabled) - Jobs table uses admin‑scoped endpoints (
/admin/fax-jobs*) with masked phone numbers 
Inbound Controls (v2)¶
- Toggle inbound receiving on/off and configure retention/token TTL in Settings.
 - Backend-specific auth:
 - SIP/Asterisk: set 
ASTERISK_INBOUND_SECRETfor the private/_internal/asterisk/inboundroute. - Phaxio: enable HMAC verification for inbound webhooks.
 - Sinch: configure Basic auth and/or HMAC verification for inbound callbacks.
 
Outbound PDFs (v2)¶
- From Jobs, open a job to view details and download the outbound PDF (admin-only). The API generates a PDF per job before dispatching to the selected backend.
 
MCP (v2)¶
- Embedded Python MCP SSE server is available under 
/mcp/sse. - In the UI (MCP tab), enable SSE and optionally require OAuth/JWT.
 - Health check: “SSE Healthy” chip reflects 
/mcp/sse/healthstatus. - “Claude Desktop Config” block provides a copy‑ready config snippet.
 - Notes
 - For HIPAA, enable OAuth/JWT and configure issuer/audience/JWKS.
 - When disabled, SSE runs without auth for local development only.
 - Changing MCP flags requires an API restart (use Restart in UI).