Corner bubble
Default launcher. A mic button in the bottom corner. Click it to open the agent.
Your website UI
Keep your own card or button. Click it and the agent starts speaking.
Ready-made card
Drop a tap-to-talk card anywhere on the page. It stays there. It does not follow scroll.
Setup in the dashboard
- Open Settings → Web Embed.
- Turn Enable website embed on (Pro plan).
- Click Generate key and copy the
tvk_pk_…value. - Add 1 entry per website domain (e.g.
https://www.acme.com) to authorize it, and pick a Default Fallback Agent. Localhost is always allowed for testing. - Copy the snippet for Corner bubble, Your website UI, or Ready-made card.
data-agent-id. If you omit it, the default fallback agent for that domain is used. Requested agents must belong to your workspace or the session is rejected.
Existing installs that only set data-public-key, data-agent-id, and data-position keep the corner bubble. Custom UI and the ready-made card are opt-in with data-ui.
Calls, billing, and webhooks
Conversations are stored in Call Logs with originweb embed.
Billing uses those call logs the same way as other voice minutes (duration and tokens). If the workspace has a webhook URL under Settings → Developer API, the usual post-call webhook still fires. The payload includes origin: "web embed".
Multiple websites
- One domain, many agents: add 1 domain entry (e.g.
https://www.acme.com). Passdata-agent-id="AGENT_UUID"on each snippet. If it is omitted, the Default Fallback Agent for that domain is used. - Many domains: add an entry per domain under Settings → Web Embed.
- Agents must belong to your workspace. Other workspaces’ IDs are rejected with
403 Forbidden.
Domain allowlist
The public key only works on origins you list. Use:- A full origin:
https://www.acme.com - A host:
acme.com - A wildcard subdomain:
*.acme.com
Script attributes
Regenerating the widget key
Regenerate key on Web Embed replaces the stored key. Updatedata-public-key on every website that embeds the agent.