Technical docs

Settings

Overview

Support reference for `/org-settings`.

Routes and tabs

  • `/org-settings` redirects to `/org-settings/organization`
  • Tabs:
  • `Organization`
  • `Webchat`
  • `API Keys`
  • Shared shell:
  • layout title: `Settings`
  • description: `Manage your organization settings and customizations.`

Organization

  • Page title: `Organization`
  • Description: `Manage your organization's general settings`
  • Current editable items:
  • `Organization Name`
  • `Debug Mode`
  • `Logo` upload is present but disabled with `Coming soon`.
  • Save button label: `Save`
  • Permission note:
  • the frontend enables editing only for org `admin` / `owner` users, plus developer users via `canAccessTool({ isOrgAdmin: true })`
  • the backend `PUT /api/organizations/{id}` independently checks org role and rejects non-admin members with `403`
  • Backend/data flow:
  • the page only sends `name` or `is_debug_mode`
  • the route is `PUT /api/organizations/{id}`
  • the broader update payload also supports provider API keys and `description`, but those fields are not exposed on this page
  • websocket refresh comes through `organization.updated`

Webchat

  • Focus: appearance settings plus live preview.
  • Widget domain choices:
  • `alloy.cx`
  • `alloy.ws`
  • Theme choices:
  • `System`
  • `Light`
  • `Dark`
  • `Custom`
  • Section labels:
  • `Appearance`
  • `Widget domain`
  • `Theme`
  • `Live Preview`
  • Current UI controls:
  • minimized widget: `Bubble color`, `Icon color`
  • maximized widget: `Chat background`, `Primary color`
  • customer messages: `Bubble color`, `Text color`
  • agent messages: `Bubble color`, `Text color`
  • `Custom CSS` textarea
  • `System` mode preview tabs for `light` and `dark`
  • Footer actions:
  • `Reset to defaults`
  • `Save changes`
  • Confirmed backend values:
  • `mode`: `system`, `light`, `dark`, `custom`
  • `widgetDomain`: `default`, `proxy`
  • Permission note:
  • widget settings are organization-scoped and authorized by backend checks
  • Backend/data flow:
  • `GET /api/organizations/{id}/settings/webchat-widget-settings` returns `{ settings, defaults }`
  • `POST /api/organizations/{id}/settings/webchat-widget-settings` upserts the stored delta and returns merged `{ settings, defaults }`
  • reset-to-defaults is implemented as `POST` with an empty body
  • defaults include additional runtime fields not currently editable in the page:
  • `opacity`
  • `primaryTextColor`
  • `secondaryTextColor`
  • `borderColor`
  • `systemMessageColor`
  • those extra fields are still part of the backend schema and are consumed by the widget runtime if present
  • Preview/runtime notes:
  • the preview loads `${NEXT_PUBLIC_API_URL}/widget/alloy-webchat-widget.js`
  • it initializes the widget with the org `public_api_key`
  • `widgetDomain: proxy` is used by backend snippet generation to switch from `API_DOMAIN` to `API_PROXY_DOMAIN`

API Keys

  • Page title: `API Keys`
  • Description: `Manage your API keys and provider credentials`
  • Cards:
  • `Providers API Keys`
  • `Alloy API Keys`
  • Provider rows:
  • `OpenAI`
  • `OpenRouter`
  • `Google`
  • `DeepSeek`
  • `Anthropic`
  • Provider key actions:
  • type key
  • `Save API Key`
  • `Copy to clipboard` after save
  • `Clear API Key`
  • Saved provider keys stay masked in the input.
  • Alloy key rows:
  • `Public`
  • `Private`
  • Alloy key behavior:
  • public key is shown directly and can be copied
  • private key stays masked in the UI and is fetched only when the user clicks copy
  • Permission note:
  • there is no frontend role gate on this page
  • provider key save and clear still go through `PUT /api/organizations/{id}`, which requires org `owner` or `admin`
  • private Alloy key copy is available from the API Keys page for authorized organization users
  • Backend/data flow:
  • provider credentials save and clear through `PUT /api/organizations/{id}`
  • runtime uses a matching saved provider key before falling back to the Alloy system key for the same provider
  • usage with org-saved provider keys is still written to token history and cost reporting, but it does not reduce org `available_tokens`
  • org state on this page stays in sync through `organization.updated`

Not in this settings shell

  • `models` and `voices` are separate tools, not `/org-settings/*`
  • `/system-settings` is separate from org settings

Start building your AI team