> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tavus.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Deployments Overview

> Learn how Tavus Deployments let you ship a fully managed conversational AI experience with a single script tag - no backend or API key required in the browser.

## 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.                                      |

The widget and embed are Web Components served from a CDN. They render inside a shadow DOM, so your page styles and the Tavus UI never interfere with each other, and they work in any stack - plain HTML, React, Next.js, Vue, or anything else that renders HTML.

<Info>
  Deployments are configured visually in the [PAL Maker](https://maker.tavus.io/dev). 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.
</Info>

## How it works

1. You create a deployment in the PAL Maker and choose a PAL, a channel, and customizations.
2. You add the script tag and custom element to your page with the deployment's ID.
3. On load, the element fetches its configuration from `/v2/deployments/:id/init` and renders the experience.
4. 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.

Because the deployment ID is safe to expose publicly, there is no backend route to build and no key to protect. Abuse is handled server-side with origin restrictions, call limits, and bot protection - see [Protecting your deployment](#protecting-your-deployment).

PALs with a [Magic Canvas](/sections/conversational-video-interface/magic-canvas/overview) skill render cards automatically in hosted widget and embed deployments - no extra integration code on your page.

## Quick start

<Tabs>
  <Tab title="Widget">
    ```html theme={null}
    <!doctype html>
    <html>
      <body>
        <tavus-widget deployment-id="YOUR_DEPLOYMENT_ID"></tavus-widget>
        <script src="https://unpkg.com/@tavus/widget"></script>
      </body>
    </html>
    ```
  </Tab>

  <Tab title="Embed">
    ```html theme={null}
    <!doctype html>
    <html>
      <body>
        <div style="width: 720px; aspect-ratio: 16 / 9;">
          <tavus-embed deployment-id="YOUR_DEPLOYMENT_ID"></tavus-embed>
        </div>
        <script src="https://unpkg.com/@tavus/embed"></script>
      </body>
    </html>
    ```
  </Tab>
</Tabs>

Replace `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`. |

All customization - theme, modality, text, launcher appearance, call limits - is configured on the deployment in the [PAL Maker](https://maker.tavus.io/dev). The element picks up saved changes on the next page load, with no markup changes.

## 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](https://www.cloudflare.com/products/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

<CardGroup cols={2}>
  <Card title="Widget" icon="message-bot" href="/sections/deployments/widget">
    Add a floating conversation launcher to any page.
  </Card>

  <Card title="Embed" icon="window" href="/sections/deployments/embed">
    Render the conversation inline in your layout, including React and Next.js.
  </Card>

  <Card title="Landing page" icon="link" href="/sections/deployments/landing-page">
    Share a hosted conversation link - no website required.
  </Card>

  <Card title="Host communication" icon="tower-broadcast" href="/sections/deployments/host-communication">
    Listen to lifecycle events and send interactions from your page.
  </Card>
</CardGroup>

Management and browser endpoints are documented in the [Deployments API](/api-reference/deployments/create-deployment) reference.

## FAQs

<AccordionGroup>
  <Accordion title="Do I need a backend or an API key?" defaultOpen="true">
    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](/sections/integrations/embedding-cvi).
  </Accordion>

  <Accordion title="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](#protecting-your-deployment).
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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](/sections/integrations/embedding-cvi) when you need full control over conversation creation, the call UI, or room state.
  </Accordion>
</AccordionGroup>
