---
title: "Update Chat Widget Config"
method: PUT
path: "/settings/chat-widget"
tags: ["Settings"]
---

# Update Chat Widget Config

`PUT /settings/chat-widget`

Update chat widget configuration for the current customer.

Legacy singleton endpoint: operates on the customer's default widget
(creating it on first update). Use /settings/chat-widgets for
multi-widget management.

## Request body

- UpdateChatWidgetConfigRequest — Update chat widget configuration request model
  - `enabled` boolean, nullable — Whether the chat widget is shown on the customer's website
  - `accent_color` string, nullable — Primary color hex code (e.g., #B5683C)
  - `secondary_color` string, nullable — Secondary accent color hex code. Set to null to auto-derive from accent color.
  - `position` string, nullable — Widget position: bottom-right or bottom-left
  - `greeting_message` string, nullable — The first message shown when a visitor opens the chat
  - `assistant_name` string, nullable — Displayed in the chat header
  - `system_prompt` string, nullable — Full system prompt override. Set to null to use assembled prompt from structured fields.
  - `persona_prompt` string, nullable — Personality/tone instructions
  - `law_firm_context` string, nullable — Firm-specific information. Set to null to fall back to Customer.law_firm_info_prompt.
  - `fields_to_collect` FieldToCollect[], nullable — Fields to collect from visitors with lead generation requirements
    - `key` string, required — Unique field identifier (e.g. 'name', 'phone', 'email')
    - `label` string, required — Human-readable label (e.g. 'Full Name', 'Phone Number')
    - `description` string, nullable — Hint for the AI on how to collect this field
    - `required_for_lead` boolean — Whether this field must be collected before a lead can be generated
  - `intake_goal` string, nullable — What to do after collecting info
  - `additional_instructions` string, nullable — Extra rules or context
  - `teaser_enabled` boolean, nullable — Whether to show a teaser message bubble
  - `teaser_message` string, nullable — Teaser message text
  - `teaser_delay_seconds` integer, nullable — Seconds before teaser appears
  - `show_online_status` boolean, nullable — Whether to show online indicator
  - `show_unread_badge` boolean, nullable — Whether to show unread badge on bubble
  - `tab_notification_enabled` boolean, nullable — Whether to flash unread count in tab title
  - `avatar_url` string, nullable — URL of agent avatar image
  - `avatar_video_url` string, nullable — URL of a silent looping video shown in place of the avatar image (header and launcher). Takes precedence over avatar_url.
  - `avatar_video_in_header` boolean, nullable — When false, the open panel's header shows the static avatar image and the avatar video only plays on the launcher bubble
  - `launcher_avatar_enabled` boolean, nullable — When true (and avatar_url is set), the floating launcher shows the avatar image inside an accent-colored ring instead of the default chat bubble icon
  - `intro_video_enabled` boolean, nullable — When true (and intro_video_url is set), opening the widget plays an intro video full-panel before transitioning into the chat
  - `intro_video_url` string, nullable — URL of the intro video (mp4/webm) played when the widget opens
  - `intro_video_autoplay_on_load` boolean, nullable — When true, desktop visitors see the muted intro video playing in the widget corner on page load; when false it only plays after they click the launcher
  - `attention_grabber_enabled` boolean, nullable — When true, a full-page modal asks visitors if they need help; Yes opens the chat directly, No dismisses it
  - `attention_grabber_message` string, nullable — Question shown in the attention grabber modal
  - `attention_grabber_delay_seconds` integer, nullable — Seconds before the attention grabber modal appears (1-120)
  - `idle_message` string, nullable — Message shown when visitor is idle
  - `idle_delay_seconds` integer, nullable — Seconds of inactivity before nudge (10-300)
  - `quick_exit_enabled` boolean, nullable — Privacy Quick Exit: the widget never persists the chat across page loads — the conversation is ended and reset on browser close/refresh
  - `mobile_bottom_offset_px` integer, nullable — Extra clearance in pixels between the widget and the bottom of the viewport on mobile (0-300). Null = none.
  - `chat_idle_timeout_minutes` integer, nullable — Minutes of inactivity before auto-completing a chat (1-60). Default: 10 minutes.
  - `allowed_origins` string[], nullable — Allowed origins for CORS. When empty or null, any origin can embed the widget.

## Response `200`

Successful Response

- ChatWidgetConfigResponse — Chat widget configuration response model
  - `customer_id` string, uuid, required
  - `enabled` boolean, required — Whether the chat widget is shown on the customer's website
  - `accent_color` string, required — Primary color for the bubble, header, and assistant messages
  - `secondary_color` string, nullable — Secondary accent color. When null, derived automatically from the accent color.
  - `position` string, required — Where the chat bubble appears on the page (bottom-right or bottom-left)
  - `greeting_message` string, required — The first message shown when a visitor opens the chat
  - `assistant_name` string, required — Displayed in the chat header
  - `system_prompt` string, nullable — Full system prompt override. When set, replaces the assembled prompt entirely.
  - `persona_prompt` string, nullable — Personality/tone instructions (e.g. 'You are Ashley, a warm and professional intake specialist')
  - `law_firm_context` string, nullable — Firm-specific information injected into the prompt. Falls back to Customer.law_firm_info_prompt if not set.
  - `fields_to_collect` FieldToCollect[], nullable — Fields to collect from visitors. Each field can be marked as required for lead generation.
    - `key` string, required — Unique field identifier (e.g. 'name', 'phone', 'email')
    - `label` string, required — Human-readable label (e.g. 'Full Name', 'Phone Number')
    - `description` string, nullable — Hint for the AI on how to collect this field
    - `required_for_lead` boolean — Whether this field must be collected before a lead can be generated
  - `intake_goal` string, nullable — What to do after collecting info (e.g. 'Let them know an attorney will follow up within 24 hours')
  - `additional_instructions` string, nullable — Extra rules or context for the AI assistant
  - `teaser_enabled` boolean — Whether to show a teaser message bubble next to the chat button
  - `teaser_message` string, nullable — Teaser message text. Falls back to greeting_message if not set.
  - `teaser_delay_seconds` integer — Seconds to wait before showing the teaser message
  - `show_online_status` boolean — Whether to show an online indicator on the chat bubble and header
  - `show_unread_badge` boolean — Whether to show an unread badge on the chat bubble
  - `tab_notification_enabled` boolean — Whether to flash unread count in the browser tab title
  - `avatar_url` string, nullable — URL of the agent avatar image for the header and messages
  - `avatar_video_url` string, nullable — URL of a silent looping video shown in place of the avatar image (header and launcher). Takes precedence over avatar_url.
  - `avatar_video_in_header` boolean — When false, the open panel's header shows the static avatar image and the avatar video only plays on the launcher bubble
  - `launcher_avatar_enabled` boolean — When true (and avatar_url is set), the floating launcher shows the avatar image inside an accent-colored ring instead of the default chat bubble icon
  - `intro_video_enabled` boolean — When true (and intro_video_url is set), opening the widget plays an intro video full-panel before transitioning into the chat
  - `intro_video_url` string, nullable — URL of the intro video (mp4/webm) played when the widget opens
  - `intro_video_autoplay_on_load` boolean — When true, desktop visitors see the muted intro video playing in the widget corner on page load; when false it only plays after they click the launcher
  - `attention_grabber_enabled` boolean — When true, a full-page modal asks visitors if they need help; Yes opens the chat directly, No dismisses it
  - `attention_grabber_message` string, nullable — Question shown in the attention grabber modal. Falls back to a default when not set.
  - `attention_grabber_delay_seconds` integer — Seconds to wait before showing the attention grabber modal
  - `idle_message` string, nullable — Message shown when visitor is idle. Leave empty to disable.
  - `idle_delay_seconds` integer, nullable — Seconds of inactivity before showing the idle nudge message
  - `quick_exit_enabled` boolean — Privacy Quick Exit: the widget never persists the chat across page loads — the conversation is ended and reset on browser close/refresh
  - `mobile_bottom_offset_px` integer, nullable — Extra clearance in pixels between the widget and the bottom of the viewport on mobile, for sites with a fixed bottom bar. Null = none.
  - `chat_idle_timeout_minutes` integer, nullable — Minutes of inactivity before a chat is auto-completed. Default: 10 minutes.
  - `allowed_origins` string[], nullable — Allowed origins for CORS. When empty or null, any origin can embed the widget.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/openintake/apis/fastapi.md) · [All operations](https://skmtc.dev/openintake/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openintake/fastapi/revisions/4a81645b59f6/schema)
