Skip to content

Settings

The Settings area (/settings/) is the single location for organization-wide configuration, your personal account, API access, module enablement, and integration wiring. Every sub-page is reachable from the collapsible left sidebar inside Settings or directly by URL.

Access requires the settings:read permission. Installing or removing plugins additionally requires settings:admin. Super-admins and admins have both by default.


URL slugSectionWhat you configure
generalOrganizationOrg name, description, timezone, date format, language
appearanceOrganizationTheme, accent color, animation toggle
ssoSecurity & AccessOIDC / LDAP identity providers
api-keysSecurity & AccessCreate and revoke scoped API keys
oauth2-appsSecurity & AccessRegister OAuth2 applications for Auth Code flow
aiIntegrationsAI provider credentials and governance
notificationsIntegrationsNotification preferences and channel subscriptions
modulesSystemPer-module enable/disable
systemSystemLive infrastructure health and version info

The General tab lets you update the fields that were set during the setup wizard. Changes are written immediately via PATCH /organizations/{id}.

FieldNotes
Organization nameDisplayed in the UI header and org-management pages
DescriptionFreeform; shown on the organization detail page
TimezoneUsed for scheduled-task time display and log timestamps
Date formatAffects all date columns across the UI
LanguageSets the default locale for this organization; individual users can override in their browser

Appearance settings are stored in browser-local Zustand persist and apply immediately without a page reload.

SettingOptions
ThemeLight / Dark / System
Accent colorA set of preset palette choices
AnimationsToggle route transition animations on or off

These settings are per-browser, not per-user-account. They do not sync across devices.


Your profile is not inside the Settings sidebar - it is accessed from the user menu at the top-right of the TopBar.

Click your name in the user menu, then Profile. The dialog exposes:

ActionAPI call
Change display namePATCH /users/{id}
Change email addressPATCH /users/{id}
Change passwordPOST /auth/password
Delete accountNot available as a self-service action. DELETE /users/{id} requires admin role and explicitly rejects the caller’s own ID - any attempt to delete your own account returns 400 Cannot delete yourself. Account deletion must be requested from an administrator.
  1. Open the user menu → ProfileChange Password.
  2. Enter your current password, then a new password meeting all five rules.
  3. Submit - all existing sessions (including the current one) are invalidated. You will be signed out and prompted to log in again with your new password. All API keys are also revoked and must be recreated.

Password rules (enforced client-side and server-side):

RuleMinimum
Length12 characters
Uppercase letters1
Lowercase letters1
Digits1
Special characters1
  1. Open the user menu → Profile.
  2. The dialog shows your current MFA status. Click Enable.
  3. Scan the QR code with an authenticator app (Google Authenticator, Authy, etc.).
  4. Enter the six-digit code to confirm enrollment.
  5. Copy your backup codes now. They are shown exactly once.

To re-enroll or disable MFA after initial setup, go through the same profile dialog. The MFA “Manage” link in the profile dialog references /settings/security/ - note that security is not a valid Settings tab; the working path is through the profile dialog itself.


API keys let external scripts, CI pipelines, and integrations authenticate without a user session. Each key acts as a hard permission ceiling: it cannot grant more access than the creating user’s own permissions, even if the creator is a super-admin.

  1. Go to Settings → API Keys.
  2. Click Create API Key.
  3. Give the key a descriptive name (you will see only the name later, not the key value).
  4. Select a permission scope from the list of available scopes.
  5. Optionally set an expiry date.
  6. Click Create - copy the full key value now.

Pass the key in the Authorization header:

Authorization: Bearer <your-api-key>

The key is subject to the same rate limits as interactive sessions (600 requests/minute per principal by default, 5/minute for auth endpoints).

Click the Revoke action on any key row. Revocation is immediate - any in-flight request using that key will receive 401 on its next attempt.

Key endpoints:

MethodPathPurpose
GET/api/v1/api-keysList your API keys (names and metadata, no secrets)
POST/api/v1/api-keysCreate a new key
DELETE/api/v1/api-keys/{key_id}Revoke a key

The OAuth2 Apps tab lets you register client applications that use the Authorization Code flow to obtain user-scoped tokens on behalf of your users. This is intended for first-party tooling and trusted internal apps.

FieldNotes
App nameShown in the consent prompt
Redirect URIsOne per line; must match exactly during the auth flow
ScopesThe maximum scopes the app is permitted to request

After registration, you receive a client_id and a client_secret. The secret is shown once at registration time.


The SSO tab embeds SSOSettingsPage and manages identity provider (IdP) records for your organization.

ProtocolStatus
OIDC (OpenID Connect)Working
LDAPWorking
SAML501-gated - not available
  1. Click Add Provider and select OIDC.
  2. Enter an IdP name (shown on the login page), the discovery URL (e.g. https://accounts.google.com/.well-known/openid-configuration) or manual endpoint URLs, client ID, and client secret.
  3. Click Save, then Test to verify the configuration.
  4. A button for this IdP now appears on the /login page.

Users who authenticate via OIDC are redirected to /auth/sso/callback, which validates the state parameter, completes the login, and routes them onward. If MFA is also required, the callback handles the MFA-pending state before navigating to the dashboard.

  1. Click Add Provider and select LDAP.
  2. Enter the LDAP server URL, bind DN, bind password, base DN for user search, and the attribute to map to FreeSDN username.
  3. Save and test.

LDAP users are authenticated against the directory on every login; FreeSDN does not cache LDAP passwords.


The Modules tab shows a table of every module available to your organization with its current enabled/disabled state. Toggle a module by clicking the switch in its row.

ColumnMeaning
Module nameHuman-readable name and internal ID
StatusEnabled / Disabled
VersionModule version string
ActionsClick the row to open the module detail page

What changes when you disable a module:

SurfaceEffect
Sidebar nav itemsHidden immediately for all users in the org
Direct URL navigationShows a “Module Disabled” page - no crash or blank
Backend API endpointsStill respond; the frontend simply stops calling them
Stored dataRetained - disabling is not deletion
Re-enablingImmediate; data and settings are restored

Disabling does not require a server restart.

Module detail page - /settings/modules/{moduleId}/

Section titled “Module detail page - /settings/modules/{moduleId}/”

Click any module row to open its detail page. Here you can:

  • Read the module description and see which adapters it uses
  • View the current version and adapter registration status
  • Enable, disable, or request a reload of the module

Gated: settings:read for viewing; the enable/disable toggle and reload button require org_admin role or above.


The Notifications tab controls personal notification preferences for the currently logged-in user. It does not manage notification providers (those live at /notification-providers/) - it controls how and when notifications are delivered to you.

Setting groupWhat you configure
General preferencesDefault severity threshold for alerts to notify you
Quiet hoursTime window during which non-critical notifications are suppressed
Category × channel matrixWhich event categories (alerts, security, system, agent, backup, …) go to which channels (in-app, email, Slack, etc.)
Digest settingsBatch notifications into a periodic digest instead of per-event delivery
Provider summaryRead-only view of which providers are active for your org

Changes are saved per-user and do not affect other users’ preferences.

The bell icon in the TopBar opens an in-app notification drawer with:

  • Active and Archive tabs
  • Unread badge count
  • Per-notification mark-as-read, dismiss, and click-to-navigate (goes to the notification’s action_url)
  • Mark-all-read, clear-all
  • “Load more” pagination for older notifications

Notifications are backed by /notifications/ endpoints. They are org-scoped and respect the site filter.


The AI tab configures LLM provider credentials and governs when and how the AI Assistant is permitted to make external API calls.

FreeSDN enforces a three-layer AI governance hierarchy:

LayerScopeDefault
Global kill-switchPlatform-wideOff - AI features inactive until enabled
Per-org policyPer organizationDISABLED / LOCAL_ONLY / CLOUD_APPROVED
PII redactionEvery cloud callActive - PII is stripped before data leaves the instance
ProviderTypeNotes
OpenAICloudRequires an OpenAI API key; base URL overrideable for Azure / compatible endpoints
AnthropicCloudRequires an Anthropic API key
OllamaLocalRequires a running Ollama instance accessible from the FreeSDN API container; set base URL

FreeSDN communicates with all three via httpx directly - no vendor SDK packages are bundled.

  1. Go to Settings → AI.
  2. Select the provider tab (OpenAI / Anthropic / Ollama).
  3. Enter the API key (OpenAI / Anthropic) or base URL (Ollama).
  4. Optionally set the default model name.
  5. Click Test Connectivity to verify the credential before saving.

If the test fails, the credential is not saved. Check that the API key is valid and that the FreeSDN API container has outbound network access to the provider endpoint.


The System tab is read-only. It displays a live snapshot of infrastructure health sourced from GET /enterprise/health/infrastructure:

SectionWhat you see
PlatformFreeSDN version, Python runtime version, FastAPI version
Library versionsSQLAlchemy, Pydantic, Celery, and other key dependencies
PostgreSQLVersion, connection pool stats
Redis / ValkeyVersion, connection status
CeleryActive workers, beat scheduler status
UptimeAPI process uptime
Route countsTotal registered routes, active modules, registered adapters

This page is useful for verifying that a deployment is running the expected version and that all backing services are reachable. It does not allow changes.


Integrations that wire FreeSDN to external systems live across two places:

LocationWhat you wire
/settings/sso/Identity providers (OIDC, LDAP)
/settings/ai/LLM providers (OpenAI, Anthropic, Ollama)
/integrations/Guided typed integrations (n8n, Slack, PagerDuty, and others), each backed by a Webhook record with delivery history and dead-letter queue replay
/notification-providers/Notification channel providers (Email, Slack, SMS, Teams, Webhook) - global only (hidden in nav when a specific site is selected; any authenticated user can view providers, but creating/editing/deleting requires org_admin or above)
/webhooks/Raw webhook CRUD and delivery history
/fabric/Universal app-interconnect (event → step-chain Connections across modules)

PermissionWho needs itWhat it gates
settings:readRequired for all /settings/* pagesView any settings tab, manage API keys
org_admin role (or above)Required to change module stateEnable / disable modules for the organization (POST /modules/org/{id}/enable and /disable)
settings:adminRequired for plugins and marketplaceInstall / remove plugins; browse and install marketplace extensions
user:readUsers pageView and manage other users (separate from Settings)
role:readRoles pageView the role and permission matrix (separate from Settings)

A user with viewer role (tier 10) does not have settings:read and will be redirected to /unauthorized when navigating to /settings/.


  • Add notification providers for your team’s channels (Slack, email, PagerDuty) at the /notification-providers/ page before configuring alert rules.
  • Create API keys for any scripts or pipelines that need programmatic access - see the API reference for available endpoints and authentication details.
  • Register SSO if your organization uses an OIDC-compatible identity provider so users can log in without a local password.
  • Review module enablement after adding new controllers - if you add a Proxmox host, enable Compute / Hypervisor here before navigating to /hypervisor/.
  • Configure AI governance before enabling the AI Assistant for any user - set the global kill-switch, choose a per-org policy, and verify PII redaction is active for any cloud provider.