EzFlowEzFlow Docs
Chatflows

Web Chat Widget

Embed a branded AI chat widget on your website, powered by a chatflow.

The web chat widget is an embeddable <script> that drops a branded chat bubble on any website. Conversations are handled by one of your chatflows, so the same bot logic that powers WhatsApp and Slack answers visitors on your site.

Plan requirement

Chatflows and web chat widgets are available on paid plans only. Each plan allows a set number of chatflows and widgets per workspace; the Free plan includes none. When you reach your plan's limit, creating a new chatflow or widget prompts an upgrade. Existing chatflows and widgets keep working if you downgrade — only new ones are blocked.

Create a widget

  1. Build (or pick) a chatflow to power the conversation.
  2. Go to Chat Widgets → New, give it a name, choose the chatflow, and add your allowed origins (the domains permitted to embed it).

Embed it

Copy the snippet from the widget's Customize page and paste it before </body>:

<script>
  (function(w,d){var s=d.createElement('script');
    s.src='https://api.ezflows.app/api/v1/chat/widget.js';s.async=1;
    s.setAttribute('data-widget-id','YOUR_WIDGET_ID');d.head.appendChild(s);
  })(window,document);
</script>

The widget only renders on origins you've allow-listed — it won't appear on other sites.

Customize (the Studio)

The Customize page is a live studio: change settings on the left and see the widget update on the right. You can set:

  • Brand — bot avatar, widget title, and subtitle/status line.
  • Colors — primary and accent colors, header style (solid / gradient / glass), light / dark / auto theme, and brand presets.
  • Layout — bubble position (bottom-right / bottom-left), corner radius, and launcher icon.
  • Content — the welcome message shown before the first reply.

Click Save and embedded widgets pick up the changes automatically.

Allowed origins

Allowed origins are the exact domains permitted to load and talk to the widget (for example https://acme.com). Requests from any other origin are rejected, and the widget renders nothing there.

On this page