Overview
A deployment is a hosted, pre-configured Tavus experience that you publish from the PAL Maker and drop into any website. Tavus manages the full conversation lifecycle - validating the deployment, creating the conversation, and running the call - so your page never touches API keys or needs custom code. Each deployment is published to one of three channels:| Channel | What it is | Best for |
|---|---|---|
| Widget | A floating launcher that expands into a conversation popup. Added with <tavus-widget>. | Adding an AI assistant to an existing site with one tag. |
| Embed | An inline conversation surface that lives inside your layout. Added with <tavus-embed>. | Demos, product pages, and experiences that should feel native to the page. |
| Landing page | A standalone conversation page fully hosted by Tavus. | Sharing a link - no website required. |
Deployments are configured visually in the PAL Maker. Everything you set there - theme, modality, text, call limits - is fetched by the element at load time. No code changes are needed to update a live deployment.
How it works
- You create a deployment in the PAL Maker and choose a PAL, a channel, and customizations.
- You add the script tag and custom element to your page with the deployment’s ID.
- On load, the element fetches its configuration from
/v2/deployments/:id/initand renders the experience. - When a visitor starts a conversation, Tavus creates and manages it server-side - including usage limits and bot protection - and streams the call into the element.
Quick start
- Widget
- Embed
YOUR_DEPLOYMENT_ID with the ID shown for your deployment in the PAL Maker.
Attributes
Both elements accept the same attribute:| Attribute | Type | Description |
|---|---|---|
deployment-id | string | The Tavus deployment ID. The element fetches its configuration from /v2/deployments/:id/init. |
Protecting your deployment
Your deployment ID is visible in your page’s HTML, so deployments come with built-in protections - all configured in the PAL Maker, with no work needed on your page:- Allowed origins - restrict a deployment to the origins (domains) you specify. The element only initializes on pages served from an allowed origin; requests from anywhere else are rejected, so copying your deployment ID onto another site does nothing.
- Call limits - cap daily and total conversations. When a limit is reached, or the PAL is busy, the element renders an unavailable screen whose title, description, and call-to-action are configurable per cause.
- Bot protection - public deployments can require a Cloudflare Turnstile challenge before a conversation starts, blocking automated abuse of your conversation quota. The element handles the challenge flow automatically and it stays invisible for most real visitors.
Next steps
Widget
Add a floating conversation launcher to any page.
Embed
Render the conversation inline in your layout, including React and Next.js.
Landing page
Share a hosted conversation link - no website required.
Host communication
Listen to lifecycle events and send interactions from your page.
FAQs
Do I need a backend or an API key?
Do I need a backend or an API key?
No. The deployment ID is the only identifier the page needs, and it is safe to expose. Tavus creates and manages the conversation server-side. If you want full programmatic control over conversations instead, use the CVI APIs and embedding paths.
My deployment ID is visible in the page source - can someone steal it?
My deployment ID is visible in the page source - can someone steal it?
The ID itself grants nothing sensitive, and you can lock it down further. Restrict the deployment to your origins so it only works on your domains, set daily and total call limits, and enable bot protection to require a Cloudflare Turnstile challenge before each conversation. See Protecting your deployment.
Will the element clash with my site's CSS?
Will the element clash with my site's CSS?
No. The widget and embed render inside an open shadow DOM with their own bundled styles. Page styles do not leak in, and Tavus styles do not leak out.
When should I use a deployment vs. embedding CVI directly?
When should I use a deployment vs. embedding CVI directly?
Use a deployment when you want a managed, configurable experience with no backend work. Use direct CVI embedding when you need full control over conversation creation, the call UI, or room state.

