Skip to main content
The webchat widget puts a Feather assistant on your website as a chat bubble — no backend of your own required. You create a widget, allow-list the domains it may run on, and embed a small loader script. Widget conversations are ordinary chat conversations on the webchat_widget surface.

Create a widget

Create a widget bound to an assistant (or a team). The theme, copy, behavior, and limits objects are free-form configuration for appearance and behavior.
Response
The public_key is safe to expose in the browser — it identifies the widget without granting API access.

Allow-list your domains

The widget only runs on domains you verify. Add a domain, then prove ownership with a DNS TXT record.
1

Add the domain

The response returns a verification_token to publish as a DNS TXT record on the hostname.
2

Verify ownership

After adding the TXT record, ask Feather to check it:
Once verification_state is verified, the widget will load on that domain.

Embed the loader

Add the loader script to your page and point it at your widget’s public_key. The loader injects the chat bubble and runs the conversation in a sandboxed iframe.
The browser never sees your API key. The widget mints its own short-lived, origin-checked sessions and enforces your allowed domains and per-widget limits. If you enable the voice test mode in the widget’s behavior config, the widget can also start a browser voice call.

Operate the widget

Disabling the widget, removing a domain, or calling kill revokes issued browser sessions. Use kill if a public_key is ever leaked, then rotate it.

Next steps

Channels

How the webchat surface relates to chat, SMS, voice, and email.

Build your first assistant

Create and activate the assistant your widget will talk to.