Summary
Audit of src/providers/chatwoot.ts against the live chatwoot/chatwoot SDK source (app/javascript/entrypoints/sdk.js, app/javascript/sdk/IFrameHelper.js, app/javascript/widget/constants/sdkEvents.js) on 2026-04-16, performed because the Mintlify-based developers.chatwoot.com site no longer hosts the visitor SDK reference at the historical URLs.
Gaps found
Missing API surface
Events not bridged
Config options not exposed
Deprecations in our current code
Intentionally out of scope
- Client APIs (
/public/api/v1/inboxes/.../contacts) — these are server-to-server / mobile alternatives to the JS widget, not part of the visitor JS SDK.
- Admin/Platform/Application APIs surfaced under
developers.chatwoot.com/api-reference/*.
chatwoot:ready, chatwoot:on-message, chatwoot:on-unread-message-count-changed, chatwoot:error — already bridged.
setLabel / removeLabel / setLocale / setBubbleVisibility (toggleBubbleVisibility) / setUser / setCustomAttributes / setConversationCustomAttributes / toggle (show/hide) / reset (shutdown) — already exposed.
- The Mintlify-restructured
developers.chatwoot.com no longer publishes the visitor SDK reference at /sdk/javascript, /docs/product/channels/live-chat/sdk/*, or /help-center/sdk/* (all 404 / 502 / redirect to chatwoot.com root) — vendor source-of-truth is now the chatwoot/chatwoot repo itself.
Sources
Summary
Audit of
src/providers/chatwoot.tsagainst the livechatwoot/chatwootSDK source (app/javascript/entrypoints/sdk.js,app/javascript/sdk/IFrameHelper.js,app/javascript/widget/constants/sdkEvents.js) on 2026-04-16, performed because the Mintlify-based developers.chatwoot.com site no longer hosts the visitor SDK reference at the historical URLs.Gaps found
Missing API surface
deleteCustomAttribute(key)— vendor exposes$chatwoot.deleteCustomAttribute(key)but oursetAttributehas nodeletecounterpart for contact-scope attrs — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jsdeleteConversationCustomAttribute(key)— vendor exposes$chatwoot.deleteConversationCustomAttribute(key); needed to symmetrizesetAttribute({scope:"conversation"})— https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jspopoutChatWindow()— vendor first-class method to detach widget into its own window; not exposed — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jssetColorScheme(mode)— vendor exposes$chatwoot.setColorScheme('light'|'auto'|'dark'); oursetThemecurrently mutates.woot-widget-holderCSS instead of calling the official method — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jsEvents not bridged
chatwoot:opened— fires when widget opens (no detail payload); useful for analytics/auto-pause — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/widget/constants/sdkEvents.jschatwoot:closed— fires when widget closes (no detail payload); pairs with above — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/widget/constants/sdkEvents.jschatwoot:on-start-conversation— fires when a visitor starts a new conversation; useful for funnel/attribution — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/widget/constants/sdkEvents.jschatwoot:postback— fires on interactive button/postback in widget; not bridged — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/sdk/IFrameHelper.jsConfig options not exposed
type('standard' | 'expanded_bubble') — bubble design; only reachable via opaquesettingsblob, no typed field — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jswidgetStyle('standard' | 'flat') — widget chrome variant; same as above — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jsdarkMode('light' | 'auto' | 'dark') — first-class theming;setThemeshould consume this and the runtimesetColorScheme— https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/sdk/settingsHelper.jsposition('left' | 'right'),locale,useBrowserLanguage,hideMessageBubble,showPopoutButton,showUnreadMessagesDialog,launcherTitle,baseDomain— common visitor settings; only reachable through the opaquesettingspass-through, not onChatwootLoadOptions— https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jsDeprecations in our current code
setTheme()— our impl mutatescolor-schemeon.woot-widget-holderand admits "setWidgetColor may not exist"; vendor now shipssetColorScheme(darkMode)which is the correct call — https://github.com/chatwoot/chatwoot/blob/develop/app/javascript/entrypoints/sdk.jsIntentionally out of scope
/public/api/v1/inboxes/.../contacts) — these are server-to-server / mobile alternatives to the JS widget, not part of the visitor JS SDK.developers.chatwoot.com/api-reference/*.chatwoot:ready,chatwoot:on-message,chatwoot:on-unread-message-count-changed,chatwoot:error— already bridged.setLabel/removeLabel/setLocale/setBubbleVisibility(toggleBubbleVisibility) /setUser/setCustomAttributes/setConversationCustomAttributes/toggle(show/hide) /reset(shutdown) — already exposed.developers.chatwoot.comno longer publishes the visitor SDK reference at/sdk/javascript,/docs/product/channels/live-chat/sdk/*, or/help-center/sdk/*(all 404 / 502 / redirect to chatwoot.com root) — vendor source-of-truth is now thechatwoot/chatwootrepo itself.Sources