Embeddable webchat
Put an agent on your own website with a couple of script tags — isolated from your styles, locked to your origins.
1. Include the script
<script src="https://cdn.akili.io/embed/webchat.v1.js" defer></script>The widget is a zero-dependency bundle around 15 KB gzipped, and it renders inside Shadow DOM — your site's CSS can't break it, and it can't leak styles into your site.
2. Initialize it
<script>
window.Akili.init({
agentId: "agt_your_agent_id",
publicKey: "pk_live_...", // an identifier, not a secret
accentColor: "#0052ff",
position: "bottom-right",
headerText: "Ask us anything"
});
</script>Configuration reference
| Option | What it does |
|---|---|
| agentId | Which agent answers — build and version it like any other agent. |
| publicKey | Public identifier for your workspace. Safe to ship in HTML; the real gate is the origin allowlist. |
| accentColor / position / headerText / avatar | Basic theming. Full token-based theming and branding packs are available; white-label is a paid entitlement. |
| visitor metadata | Optional context about the visitor your agent can use. |
How it stays yours
- Origins are allowlisted server-side — the widget only works on domains you've registered, no matter who copies your embed code.
- Sessions use short-lived signed tokens scoped to the origin, with per-visitor daily caps.
- Events (opened, closed, conversation started, message) are exposed on a bus for your own analytics.
Human handoff
When a conversation needs a person, the widget emits handoff events (requested, accepted, resolved) your systems can subscribe to — the agent doesn't pretend to be support staff it isn't.
CMS guides
Step-by-step embed guides exist for WordPress, Wix, and Webflow in the in-app docs. The widget speaks ten languages — English, Kiswahili, Spanish, French, German, Portuguese, Italian, Japanese, Chinese, and Arabic.