Skip to main content
The Tavus-hosted embed and widget render a full Magic Canvas conversation from a single HTML tag. The element joins the call, renders cards, and posts interactions back to Tavus; the host page contains no Canvas code.
  • <tavus-embed> renders the conversation inline and fills its container.
  • <tavus-widget> renders a floating launcher; clicking it opens the conversation.
Both share one engine and render in a shadow DOM, isolating page and element styles.

Quickstart

1

Create a deployment

Follow Deployments overview to create a widget or embed deployment in the PAL Maker. For installation, sizing, and attributes, see Widget and Embed.
2

Attach the Magic Canvas skill to the PAL

Attaching the skill enables every component with defaults. To disable a component or configure scheduling_embed (the one component that requires config to activate), add entries under config.components; see Canvas configuration.

Hosted client behavior

The hosted client handles everything the @tavus/cvi-ui integration requires you to wire up:
  • Rendering. Cards overlay the call within the element’s bounds and are cleaned up when the conversation moves on.
  • Interaction delivery. User interactions post to POST /v2/conversations/{conversation_id}/canvas/interactions. The endpoint is public during an active conversation.
  • Sandboxing. Components render in sandboxed iframes and load from Tavus-approved hosts only.
Card interactions are not emitted as host-page tavus:* events. For browser-side callbacks, use the onInteraction prop in the @tavus/cvi-ui integration. For server-side handling, fetch interaction history (requires your API key):
Conversations started by the hosted embed or widget have no callback_url, so under Zero Data Retention (ZDR) their Magic Canvas answers are neither stored nor delivered. To receive answers under ZDR, create the conversation through the API (POST /v2/conversations with a callback_url) and render it with @tavus/cvi-ui.

Local development override

Both elements accept the same attributes:
There is no API-key attribute. The deployment endpoints the element calls (/init, /start, /end) are public and scoped to the deployment. token is a preview token, not an API key. Never put a Tavus API key in page markup.
Override example (field names match the deployment configuration schema):
If deployment-id is omitted, the override is used as-is and nothing is fetched.

Host-page events

For lifecycle events, tool calls, and protocol interactions from your page, see Host communication.