openapi: 3.1.0 info: title: Faxbot API description: The first and only open-source, self-hostable fax API. Send faxes with a single function call. contact: name: Faxbot Support url: https://faxbot.net/ email: support@faxbot.net license: name: MIT url: https://github.com/dmontgomery40/faxbot/blob/main/LICENSE version: 1.0.0 paths: /health: get: summary: Health operationId: health_health_get responses: "200": description: Successful Response content: application/json: schema: type: object description: Health /health/ready: get: summary: Health Ready description: | Readiness probe. Returns 200 when core dependencies are ready. Checks: DB connectivity; backend configuration; storage configuration when inbound is enabled. operationId: health_ready_health_ready_get responses: "200": description: Successful Response content: application/json: schema: type: object /admin/config: get: summary: Get Admin Config description: | Return sanitized effective configuration for operators. Does not include secrets. Requires admin auth (bootstrap env key or keys:manage). operationId: get_admin_config_admin_config_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/providers: get: summary: Get Admin Providers operationId: get_admin_providers_admin_providers_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Admin Providers /admin/traits/validate: get: summary: Validate Traits Registry description: | Return provider traits registry with any schema issues identified. Clients and CI can use this to assert trait correctness. operationId: validate_traits_registry_admin_traits_validate_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/settings: get: summary: Get Admin Settings description: Return effective settings with sensitive values masked. operationId: get_admin_settings_admin_settings_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError put: summary: Update Admin Settings description: | Apply configuration updates in-process by setting environment variables and reloading settings. Note: For persistence across restarts, write these to your .env and restart the API. operationId: update_admin_settings_admin_settings_put parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/UpdateSettingsRequest responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/settings/validate: post: summary: Validate Settings description: Validate connectivity/non-destructive checks for the selected backend. operationId: validate_settings_admin_settings_validate_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/ValidateSettingsRequest responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/settings/reload: post: summary: Admin Reload Settings operationId: admin_reload_settings_admin_settings_reload_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Reload Settings /admin/restart: post: summary: Admin Restart description: Optional: restart the API process (for containerized deployments). Controlled by ADMIN_ALLOW_RESTART. operationId: admin_restart_admin_restart_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError "/admin/health-status": get: summary: Get Health Status operationId: get_health_status_admin_health_status_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Health Status "/admin/db-status": get: summary: Admin Db Status operationId: admin_db_status_admin_db_status_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Db Status /admin/plugins/http/install: post: summary: Install Http Manifest operationId: install_http_manifest_admin_plugins_http_install_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/ManifestIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Install Http Manifest /admin/plugins/http/validate: post: summary: Validate Http Manifest operationId: validate_http_manifest_admin_plugins_http_validate_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/ManifestValidateIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Validate Http Manifest "/admin/plugins/http/import-manifests": post: summary: Import Http Manifests description: | Bulk import provider manifests from JSON list or scraped markdown. For markdown, extracts JSON code fences and imports objects that look like manifests. operationId: import_http_manifests_admin_plugins_http_import_manifests_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/ImportManifestsIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/logs: get: summary: Admin Logs description: | Return recent audit logs from in-process ring buffer with simple filtering. For persistent logs, configure AUDIT_LOG_FILE and use external tooling; this endpoint focuses on interactive UI needs. operationId: admin_logs_admin_logs_get parameters: - name: q in: query required: false schema: title: Q type: - string - "null" description: Query parameter: q - name: event in: query required: false schema: title: Event type: - string - "null" description: Query parameter: event - name: since in: query required: false schema: title: Since type: - string - "null" description: Query parameter: since - name: limit in: query required: false schema: type: integer default: 200 title: Limit description: Query parameter: limit - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/logs/tail: get: summary: Admin Logs Tail description: | Tail the audit log file when AUDIT_LOG_FILE is configured. Returns last N lines (default 2000), filtered by substring and/or event name when logs are JSON. operationId: admin_logs_tail_admin_logs_tail_get parameters: - name: q in: query required: false schema: title: Q type: - string - "null" description: Query parameter: q - name: event in: query required: false schema: title: Event type: - string - "null" description: Query parameter: event - name: lines in: query required: false schema: type: integer default: 2000 title: Lines description: Query parameter: lines - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/actions: get: summary: Admin Actions List operationId: admin_actions_list_admin_actions_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Actions List /admin/actions/run: post: summary: Admin Actions Run operationId: admin_actions_run_admin_actions_run_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/RunActionIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Actions Run /admin/tunnel/status: get: summary: Admin Tunnel Status operationId: admin_tunnel_status_admin_tunnel_status_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/TunnelStatusOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Tunnel Status /admin/tunnel/config: post: summary: Admin Tunnel Config operationId: admin_tunnel_config_admin_tunnel_config_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/TunnelConfigIn responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/TunnelStatusOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Tunnel Config /admin/tunnel/test: post: summary: Admin Tunnel Test operationId: admin_tunnel_test_admin_tunnel_test_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/TunnelTestOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Tunnel Test /admin/tunnel/pair: post: summary: Admin Tunnel Pair operationId: admin_tunnel_pair_admin_tunnel_pair_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/PairOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Tunnel Pair "/admin/tunnel/register-sinch": post: summary: Admin Tunnel Register Sinch description: | Programmatically register the current public webhook URL with Sinch Fax. Non-HIPAA users may rely on Cloudflare Quick Tunnels; HIPAA users typically configure a stable PUBLIC_API_URL. This endpoint prefers the active tunnel URL when available and otherwise falls back to PUBLIC_API_URL. operationId: admin_tunnel_register_sinch_admin_tunnel_register_sinch_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/RegisterSinchOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/tunnel/cloudflared/logs: get: summary: Admin Tunnel Cloudflared Logs description: | Read last N lines from the Cloudflared log file on disk. This avoids shelling out and works with the sidecar volume mount. operationId: admin_tunnel_cloudflared_logs_admin_tunnel_cloudflared_logs_get parameters: - name: lines in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 50 title: Lines description: Query parameter: lines - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/inbound/callbacks: get: summary: Admin Inbound Callbacks operationId: admin_inbound_callbacks_admin_inbound_callbacks_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Inbound Callbacks /admin/inbound/simulate: post: summary: Admin Inbound Simulate operationId: admin_inbound_simulate_admin_inbound_simulate_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/SimulateInboundIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Inbound Simulate "/admin/inbound/purge-by-sid": delete: summary: Admin Purge Inbound By Sid description: | Admin-only utility to delete inbound_faxes and inbound_events by provider_sid. Intended for local/dev use to keep tests hermetic. operationId: admin_purge_inbound_by_sid_admin_inbound_purge_by_sid_delete parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/PurgeInboundBySidIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError "/admin/fax-jobs": get: summary: List Admin Jobs operationId: list_admin_jobs_admin_fax_jobs_get parameters: - name: status in: query required: false schema: title: Status type: - string - "null" description: Query parameter: status - name: backend in: query required: false schema: title: Backend type: - string - "null" description: Query parameter: backend - name: limit in: query required: false schema: type: integer maximum: 100 default: 50 title: Limit description: Query parameter: limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset description: Query parameter: offset - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: List Admin Jobs "/admin/fax-jobs/{job_id}": get: summary: Get Admin Job operationId: get_admin_job_admin_fax_jobs__job_id__get parameters: - name: job_id in: path required: true schema: type: string title: Job Id description: Path parameter: job_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Admin Job "/admin/fax-jobs/{job_id}/pdf": get: summary: Admin Get Job Pdf description: | Admin-only: download the outbound fax PDF for a job if present. Works for all backends; the API generates/keeps a PDF per job prior to sending. operationId: admin_get_job_pdf_admin_fax_jobs__job_id__pdf_get parameters: - name: job_id in: path required: true schema: type: string title: Job Id description: Path parameter: job_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError "/admin/fax-jobs/{job_id}/refresh": post: summary: Admin Refresh Job description: | Refresh job status via provider when supported (manifest providers preview). For manifest-based outbound providers that define get_status, polls provider and updates DB. operationId: admin_refresh_job_admin_fax_jobs__job_id__refresh_post parameters: - name: job_id in: path required: true schema: type: string title: Job Id description: Path parameter: job_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/diagnostics/run: post: summary: Run Diagnostics description: | Run bounded, non-destructive diagnostics. Backend‑isolated: only report checks relevant to the active outbound/inbound providers and required traits. operationId: run_diagnostics_admin_diagnostics_run_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/settings/export: get: summary: Export Settings Env description: Generate a .env snippet for current settings (secrets redacted). operationId: export_settings_env_admin_settings_export_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /admin/settings/persist: post: summary: Persist Settings description: | Write a .env file to a persisted location (default: /faxdata/faxbot.env). If content is not provided, the server will render a full export from current settings. operationId: persist_settings_admin_settings_persist_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/PersistSettingsIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /fax: post: summary: Send Fax operationId: send_fax_fax_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: "multipart/form-data": schema: $ref: #/components/schemas/Body_send_fax_fax_post responses: "202": description: Successful Response content: application/json: schema: $ref: #/components/schemas/FaxJobOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Send Fax /fax/{job_id}: get: summary: Get Fax operationId: get_fax_fax__job_id__get parameters: - name: job_id in: path required: true schema: type: string title: Job Id description: Path parameter: job_id - name: refresh in: query required: false schema: type: boolean default: false title: Refresh description: Query parameter: refresh - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/FaxJobOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Fax "/admin/api-keys": post: summary: Admin Create Api Key operationId: admin_create_api_key_admin_api_keys_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/CreateAPIKeyIn responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/CreateAPIKeyOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Create Api Key get: summary: Admin List Api Keys operationId: admin_list_api_keys_admin_api_keys_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: array items: $ref: #/components/schemas/APIKeyMeta title: Response Admin List Api Keys Admin Api Keys Get "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin List Api Keys "/admin/api-keys/{key_id}": delete: summary: Admin Revoke Api Key operationId: admin_revoke_api_key_admin_api_keys__key_id__delete parameters: - name: key_id in: path required: true schema: type: string title: Key Id description: Path parameter: key_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Revoke Api Key /admin/tunnel/wg/import: post: summary: Admin Wg Import Conf operationId: admin_wg_import_conf_admin_tunnel_wg_import_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: content: "multipart/form-data": schema: $ref: #/components/schemas/Body_admin_wg_import_conf_admin_tunnel_wg_import_post responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/WGImportOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Wg Import Conf /admin/tunnel/wg/conf: get: summary: Admin Wg Get Conf operationId: admin_wg_get_conf_admin_tunnel_wg_conf_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Wg Get Conf delete: summary: Admin Wg Delete Conf operationId: admin_wg_delete_conf_admin_tunnel_wg_conf_delete parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/WgDeleteOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Wg Delete Conf /admin/tunnel/wg/qr: post: summary: Admin Wg Qr description: Render the stored WireGuard configuration as a QR (SVG base64). operationId: admin_wg_qr_admin_tunnel_wg_qr_post parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/WgQrOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError "/admin/api-keys/{key_id}/rotate": post: summary: Admin Rotate Api Key operationId: admin_rotate_api_key_admin_api_keys__key_id__rotate_post parameters: - name: key_id in: path required: true schema: type: string title: Key Id description: Path parameter: key_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/RotateAPIKeyOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Admin Rotate Api Key /fax/{job_id}/pdf: get: summary: Get Fax Pdf description: | Serve PDF file for cloud backend (e.g., Phaxio) to fetch. No API auth; requires a valid, unexpired per-job token. operationId: get_fax_pdf_fax__job_id__pdf_get parameters: - name: job_id in: path required: true schema: type: string title: Job Id description: Path parameter: job_id - name: token in: query required: true schema: type: string title: Token description: Query parameter: token responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError "/phaxio-callback": post: summary: Phaxio Callback description: Handle Phaxio status callbacks. operationId: phaxio_callback_phaxio_callback_post responses: "200": description: Successful Response content: application/json: schema: type: object /inbound: get: summary: List Inbound operationId: list_inbound_inbound_get parameters: - name: to_number in: query required: false schema: title: To Number type: - string - "null" description: Query parameter: to_number - name: status in: query required: false schema: title: Status type: - string - "null" description: Query parameter: status - name: mailbox in: query required: false schema: title: Mailbox type: - string - "null" description: Query parameter: mailbox - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: array items: $ref: #/components/schemas/InboundFaxOut title: Response List Inbound Inbound Get "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: List Inbound /inbound/{inbound_id}: get: summary: Get Inbound operationId: get_inbound_inbound__inbound_id__get parameters: - name: inbound_id in: path required: true schema: type: string title: Inbound Id description: Path parameter: inbound_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: $ref: #/components/schemas/InboundFaxOut "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Inbound /inbound/{inbound_id}/pdf: get: summary: Get Inbound Pdf operationId: get_inbound_pdf_inbound__inbound_id__pdf_get parameters: - name: inbound_id in: path required: true schema: type: string title: Inbound Id description: Path parameter: inbound_id - name: token in: query required: false schema: title: Token type: - string - "null" description: Query parameter: token - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Inbound Pdf /_internal/asterisk/inbound: post: summary: Asterisk Inbound operationId: asterisk_inbound__internal_asterisk_inbound_post parameters: - name: x-internal-secret in: header required: false schema: title: X-Internal-Secret type: - string - "null" description: Header parameter: x-internal-secret requestBody: required: true content: application/json: schema: type: object additionalProperties: true title: Payload responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Asterisk Inbound "/phaxio-inbound": post: summary: Phaxio Inbound operationId: phaxio_inbound_phaxio_inbound_post responses: "200": description: Successful Response content: application/json: schema: type: object description: Phaxio Inbound "/sinch-inbound": post: summary: Sinch Inbound operationId: sinch_inbound_sinch_inbound_post responses: "200": description: Successful Response content: application/json: schema: type: object description: Sinch Inbound /webhooks/inbound: post: summary: Unified Inbound description: | Unified inbound endpoint with provider autodetect. - provider query param OR header auto-detect (X-Phaxio-Signature / X-Sinch-Signature) - Returns canonical event shape and enforces signature in strict mode. operationId: unified_inbound_webhooks_inbound_post parameters: - name: provider in: query required: false schema: title: Provider type: - string - "null" description: Query parameter: provider responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /plugins: get: summary: List Plugins operationId: list_plugins_plugins_get parameters: - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: List Plugins /plugins/{plugin_id}/config: get: summary: Get Plugin Config operationId: get_plugin_config_plugins__plugin_id__config_get parameters: - name: plugin_id in: path required: true schema: type: string title: Plugin Id description: Path parameter: plugin_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Get Plugin Config put: summary: Update Plugin Config operationId: update_plugin_config_plugins__plugin_id__config_put parameters: - name: plugin_id in: path required: true schema: type: string title: Plugin Id description: Path parameter: plugin_id - name: x-api-key in: header required: false schema: title: X-Api-Key type: - string - "null" description: API key for authentication requestBody: required: true content: application/json: schema: $ref: #/components/schemas/UpdatePluginConfigIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Update Plugin Config "/plugin-registry": get: summary: Plugin Registry operationId: plugin_registry_plugin_registry_get responses: "200": description: Successful Response content: application/json: schema: type: object description: Plugin Registry "/signalwire-callback": post: summary: Signalwire Callback description: | SignalWire Compatibility Fax Status callback handler. Verifies optional HMAC when configured and updates job status. operationId: signalwire_callback_signalwire_callback_post parameters: - name: job_id in: query required: false schema: title: Job Id type: - string - "null" description: Query parameter: job_id responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError /_internal/freeswitch/outbound_result: post: summary: Freeswitch Outbound Result operationId: freeswitch_outbound_result__internal_freeswitch_outbound_result_post parameters: - name: x-internal-secret in: header required: false schema: title: X-Internal-Secret type: - string - "null" description: Header parameter: x-internal-secret requestBody: required: true content: application/json: schema: $ref: #/components/schemas/FSOutboundResultIn responses: "200": description: Successful Response content: application/json: schema: type: object "422": description: Validation Error content: application/json: schema: $ref: #/components/schemas/HTTPValidationError description: Freeswitch Outbound Result components: schemas: APIKeyMeta: properties: key_id: type: string title: Key Id name: title: Name type: - string - "null" owner: title: Owner type: - string - "null" scopes: items: type: string type: array title: Scopes default: [] created_at: title: Created At format: date-time type: - string - "null" last_used_at: title: Last Used At format: date-time type: - string - "null" expires_at: title: Expires At format: date-time type: - string - "null" revoked_at: title: Revoked At format: date-time type: - string - "null" note: title: Note type: - string - "null" type: object required: - key_id title: APIKeyMeta Body_admin_wg_import_conf_admin_tunnel_wg_import_post: properties: file: title: File format: binary type: - string - "null" content: title: Content type: - string - "null" type: object title: Body_admin_wg_import_conf_admin_tunnel_wg_import_post Body_send_fax_fax_post: properties: to: type: string title: To file: type: string format: binary title: File type: object required: - to - file title: Body_send_fax_fax_post CreateAPIKeyIn: properties: name: title: Name type: - string - "null" owner: title: Owner type: - string - "null" scopes: title: Scopes items: type: string type: - array - "null" expires_at: title: Expires At format: date-time type: - string - "null" note: title: Note type: - string - "null" type: object title: CreateAPIKeyIn CreateAPIKeyOut: properties: key_id: type: string title: Key Id token: type: string title: Token name: title: Name type: - string - "null" owner: title: Owner type: - string - "null" scopes: items: type: string type: array title: Scopes default: [] expires_at: title: Expires At format: date-time type: - string - "null" type: object required: - key_id - token title: CreateAPIKeyOut FSOutboundResultIn: properties: job_id: title: Job Id type: - string - "null" fax_status: title: Fax Status type: - string - "null" fax_result_text: title: Fax Result Text type: - string - "null" fax_result_code: title: Fax Result Code type: - string - "null" fax_document_transferred_pages: title: Fax Document Transferred Pages type: - integer - "null" uuid: title: Uuid type: - string - "null" type: object title: FSOutboundResultIn FaxJobOut: properties: id: type: string title: Id to: type: string title: To status: type: string title: Status error: title: Error type: - string - "null" pages: title: Pages type: - integer - "null" backend: type: string title: Backend default: sip provider_sid: title: Provider Sid type: - string - "null" created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - to - status - created_at - updated_at title: FaxJobOut HTTPValidationError: properties: detail: items: $ref: #/components/schemas/ValidationError type: array title: Detail type: object title: HTTPValidationError ImportManifestsIn: properties: items: title: Items items: additionalProperties: true type: object type: - array - "null" markdown: title: Markdown type: - string - "null" source: title: Source type: - string - "null" type: object title: ImportManifestsIn InboundFaxOut: properties: id: type: string title: Id fr: title: Fr type: - string - "null" to: title: To type: - string - "null" status: type: string title: Status backend: type: string title: Backend pages: title: Pages type: - integer - "null" size_bytes: title: Size Bytes type: - integer - "null" created_at: title: Created At format: date-time type: - string - "null" received_at: title: Received At format: date-time type: - string - "null" updated_at: title: Updated At format: date-time type: - string - "null" mailbox: title: Mailbox type: - string - "null" type: object required: - id - status - backend title: InboundFaxOut ManifestIn: properties: manifest: additionalProperties: true type: object title: Manifest type: object required: - manifest title: ManifestIn ManifestValidateIn: properties: manifest: additionalProperties: true type: object title: Manifest credentials: title: Credentials additionalProperties: true type: - object - "null" settings: title: Settings additionalProperties: true type: - object - "null" to: title: To type: - string - "null" file_url: title: File Url type: - string - "null" from_number: title: From Number type: - string - "null" render_only: title: Render Only default: true type: - boolean - "null" type: object required: - manifest title: ManifestValidateIn PairOut: properties: code: type: string title: Code expires_at: type: string format: date-time title: Expires At type: object required: - code - expires_at title: PairOut PersistSettingsIn: properties: content: title: Content type: - string - "null" path: title: Path type: - string - "null" type: object title: PersistSettingsIn PurgeInboundBySidIn: properties: provider_sid: type: string title: Provider Sid type: object required: - provider_sid title: PurgeInboundBySidIn RegisterSinchOut: properties: success: type: boolean title: Success webhook_url: title: Webhook Url type: - string - "null" provider_response: title: Provider Response additionalProperties: true type: - object - "null" error: title: Error type: - string - "null" type: object required: - success title: RegisterSinchOut RotateAPIKeyOut: properties: key_id: type: string title: Key Id token: type: string title: Token type: object required: - key_id - token title: RotateAPIKeyOut RunActionIn: properties: id: type: string title: Id type: object required: - id title: RunActionIn SimulateInboundIn: properties: backend: title: Backend type: - string - "null" fr: title: Fr type: - string - "null" to: title: To type: - string - "null" pages: title: Pages default: 1 type: - integer - "null" status: title: Status default: received type: - string - "null" type: object title: SimulateInboundIn TunnelConfigIn: properties: enabled: type: boolean title: Enabled default: false provider: type: string title: Provider default: none cloudflare_custom_domain: title: Cloudflare Custom Domain type: - string - "null" wireguard_endpoint: title: Wireguard Endpoint type: - string - "null" wireguard_server_public_key: title: Wireguard Server Public Key type: - string - "null" wireguard_client_ip: title: Wireguard Client Ip type: - string - "null" wireguard_dns: title: Wireguard Dns type: - string - "null" tailscale_auth_key: title: Tailscale Auth Key type: - string - "null" tailscale_hostname: title: Tailscale Hostname type: - string - "null" type: object title: TunnelConfigIn TunnelStatusOut: properties: enabled: type: boolean title: Enabled provider: type: string title: Provider status: type: string title: Status public_url: title: Public Url type: - string - "null" local_ip: title: Local Ip type: - string - "null" last_checked: title: Last Checked format: date-time type: - string - "null" error_message: title: Error Message type: - string - "null" type: object required: - enabled - provider - status title: TunnelStatusOut TunnelTestOut: properties: ok: type: boolean title: Ok message: title: Message type: - string - "null" target: title: Target type: - string - "null" type: object required: - ok title: TunnelTestOut UpdatePluginConfigIn: properties: enabled: title: Enabled type: - boolean - "null" settings: title: Settings additionalProperties: true type: - object - "null" type: object title: UpdatePluginConfigIn UpdateSettingsRequest: properties: backend: title: Backend type: - string - "null" outbound_backend: title: Outbound Backend type: - string - "null" inbound_backend: title: Inbound Backend type: - string - "null" require_api_key: title: Require Api Key type: - boolean - "null" enforce_public_https: title: Enforce Public Https type: - boolean - "null" public_api_url: title: Public Api Url type: - string - "null" fax_disabled: title: Fax Disabled type: - boolean - "null" max_file_size_mb: title: Max File Size Mb type: - integer - "null" enable_persisted_settings: title: Enable Persisted Settings type: - boolean - "null" database_url: title: Database Url type: - string - "null" feature_v3_plugins: title: Feature V3 Plugins type: - boolean - "null" feature_plugin_install: title: Feature Plugin Install type: - boolean - "null" enable_mcp_sse: title: Enable Mcp Sse type: - boolean - "null" require_mcp_oauth: title: Require Mcp Oauth type: - boolean - "null" oauth_issuer: title: Oauth Issuer type: - string - "null" oauth_audience: title: Oauth Audience type: - string - "null" oauth_jwks_url: title: Oauth Jwks Url type: - string - "null" enable_mcp_http: title: Enable Mcp Http type: - boolean - "null" phaxio_api_key: title: Phaxio Api Key type: - string - "null" phaxio_api_secret: title: Phaxio Api Secret type: - string - "null" phaxio_status_callback_url: title: Phaxio Status Callback Url type: - string - "null" phaxio_verify_signature: title: Phaxio Verify Signature type: - boolean - "null" sinch_project_id: title: Sinch Project Id type: - string - "null" sinch_api_key: title: Sinch Api Key type: - string - "null" sinch_api_secret: title: Sinch Api Secret type: - string - "null" sinch_base_url: title: Sinch Base Url type: - string - "null" sinch_auth_method: title: Sinch Auth Method type: - string - "null" sinch_auth_base_url: title: Sinch Auth Base Url type: - string - "null" signalwire_space_url: title: Signalwire Space Url type: - string - "null" signalwire_project_id: title: Signalwire Project Id type: - string - "null" signalwire_api_token: title: Signalwire Api Token type: - string - "null" signalwire_fax_from_e164: title: Signalwire Fax From E164 type: - string - "null" documo_api_key: title: Documo Api Key type: - string - "null" documo_base_url: title: Documo Base Url type: - string - "null" documo_use_sandbox: title: Documo Use Sandbox type: - boolean - "null" ami_host: title: Ami Host type: - string - "null" ami_port: title: Ami Port type: - integer - "null" ami_username: title: Ami Username type: - string - "null" ami_password: title: Ami Password type: - string - "null" fax_station_id: title: Fax Station Id type: - string - "null" inbound_enabled: title: Inbound Enabled type: - boolean - "null" inbound_retention_days: title: Inbound Retention Days type: - integer - "null" inbound_token_ttl_minutes: title: Inbound Token Ttl Minutes type: - integer - "null" asterisk_inbound_secret: title: Asterisk Inbound Secret type: - string - "null" phaxio_inbound_verify_signature: title: Phaxio Inbound Verify Signature type: - boolean - "null" sinch_inbound_basic_user: title: Sinch Inbound Basic User type: - string - "null" sinch_inbound_basic_pass: title: Sinch Inbound Basic Pass type: - string - "null" audit_log_enabled: title: Audit Log Enabled type: - boolean - "null" max_requests_per_minute: title: Max Requests Per Minute type: - integer - "null" storage_backend: title: Storage Backend type: - string - "null" s3_bucket: title: S3 Bucket type: - string - "null" s3_prefix: title: S3 Prefix type: - string - "null" s3_region: title: S3 Region type: - string - "null" s3_endpoint_url: title: S3 Endpoint Url type: - string - "null" s3_kms_key_id: title: S3 Kms Key Id type: - string - "null" inbound_list_rpm: title: Inbound List Rpm type: - integer - "null" inbound_get_rpm: title: Inbound Get Rpm type: - integer - "null" tunnel_provider: title: Tunnel Provider type: - string - "null" type: object title: UpdateSettingsRequest ValidateSettingsRequest: properties: backend: type: string title: Backend phaxio_api_key: title: Phaxio Api Key type: - string - "null" phaxio_api_secret: title: Phaxio Api Secret type: - string - "null" sinch_project_id: title: Sinch Project Id type: - string - "null" sinch_api_key: title: Sinch Api Key type: - string - "null" sinch_api_secret: title: Sinch Api Secret type: - string - "null" ami_host: title: Ami Host type: - string - "null" ami_port: title: Ami Port type: - integer - "null" ami_username: title: Ami Username type: - string - "null" ami_password: title: Ami Password type: - string - "null" type: object required: - backend title: ValidateSettingsRequest ValidationError: properties: loc: items: type: - string - integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type type: object required: - loc - msg - type title: ValidationError WGImportOut: properties: ok: type: boolean title: Ok type: object required: - ok title: WGImportOut WgDeleteOut: properties: ok: type: boolean title: Ok type: object required: - ok title: WgDeleteOut WgQrOut: properties: png_base64: title: Png Base64 type: - string - "null" svg_base64: title: Svg Base64 type: - string - "null" type: object title: WgQrOut servers: - url: http://localhost:8080 description: Local development server - url: https://api.faxbot.net description: Production server