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

# Quickstart

> Async Video API walkthrough—render a file from script or audio with a replica; not real-time CVI.

Tavus **Video Generation** is the same async, file-output product described in [Video overview](/sections/video/overview): you call the **Video API** and poll until a **downloadable video** is ready. It is **not** the [Conversational Video Interface (CVI)](/sections/conversational-video-interface/overview-cvi)—there is no live room, Daily room, or persona-driven real-time session here.

## Prerequisites

Before starting, ensure you have:

* A **`replica_id`** for the video. Fastest path: pick a **stock** replica ID from [Stock replicas](/sections/replica/stock-replicas) (each card lists the UUID). For your own likeness, see [Replica overview](/sections/replica/overview) and training docs.
* **Script** in **text** form, **or** **audio** as `.mp3` or `.wav` (hosted at a URL you can pass for the audio path).

**At a glance**

* **Create:** `POST https://tavusapi.com/v2/videos` with `replica_id` plus either **`script`** (text) or **`audio_url`** (and optional `callback_url`).
* **Status:** `GET https://tavusapi.com/v2/videos/{video_id}` — [Get Video](/api-reference/video-request/get-video).
* **While generating:** `status` is `generating`; when **`ready`**, `download_url` / `hosted_url` populate.

## Generate a video

<Steps>
  <Step title="Step 1: Generate Your Video">
    Use the following request to generate a video:

    <Note>
      You can also customize the video background to suit your needs. See the [Background Customizations](/sections/video/background-customizations) article for more details.
    </Note>

    <CodeGroup>
      ```sh Generate from Text theme={null}
      curl --request POST \
        --url https://tavusapi.com/v2/videos \
        --header 'Content-Type: application/json' \
        --header 'x-api-key: <api-key>' \
        --data '{
        "replica_id": "<replica_id>",
        "script": "<text_script>",
        "callback_url": ""
      }'
      ```

      ```sh Generate from Audio File theme={null}
      curl --request POST \
        --url https://tavusapi.com/v2/videos \
        --header 'Content-Type: application/json' \
        --header 'x-api-key: <api-key>' \
        --data '{
        "replica_id": "<replica_id>",
        "audio_url": "<audio_url>",
        "callback_url": ""
      }'
      ```
    </CodeGroup>
  </Step>

  <Step title="Step 2: Check Video Generation Status">
    You can monitor generation using the <a href="/api-reference/video-request/get-video" target="_blank" rel="noopener noreferrer">Get Video</a> endpoint:

    ```sh theme={null}
    curl --request GET \
      --url https://tavusapi.com/v2/videos/<video_id> \
      --header 'x-api-key: <api-key>'
    ```

    <Note>
      Replace `<api_key>` with your actual API key (see Step 1). Replace `<video_id>` with the ID returned when you created the video.
    </Note>

    If the video is still being generated, the response will include a `status` field set to `generating`.

    <CodeGroup>
      ```json Generate from Text theme={null}
      {
        "video_id": "<video_id>",
        "video_name": "replica_id: <replica_id> - June 24, 2025 - video: <video_id>",
        "status": "generating",
        "data": {
          "script": "<text_script>",
          "start_with_wave": true
        },
        "replica_id": "<replica_id>",
        "download_url": null,
        "hosted_url": "<hosted_url>",
        "stream_url": null,
        "status_details": "",
        "created_at": "Tue, 24 Jun 2025 07:01:57 GMT",
        "updated_at": "Tue, 24 Jun 2025 07:02:25 GMT",
        "generation_progress": "37/100"
      }
      ```

      ```json Generate from Audio File theme={null}
      {
        "video_id": "<video_id>",
        "video_name": "replica_id: <replica_id> - June 24, 2025 - video: <video_id>",
        "status": "generating",
        "data": {
          "audio_url": "<audio_url>",
          "start_with_wave": true
        },
        "replica_id": "<replica_id>",
        "download_url": null,
        "hosted_url": "<hosted_url>",
        "stream_url": null,
        "status_details": "",
        "created_at": "Tue, 24 Jun 2025 07:01:57 GMT",
        "updated_at": "Tue, 24 Jun 2025 07:02:25 GMT",
        "generation_progress": "37/100"
      }
      ```
    </CodeGroup>

    Once the video is fully generated, the response will return a `status` field set to `ready`.
  </Step>

  <Step title="Step 3: Accessing Your Video">
    Once generated, videos can be:

    * **Streamed or Downloaded**: Generated video is hosted on a shareable URL. If a callback is set, a download link is returned when the video generated.
    * **Embedded or Shared**: Use the provided links to distribute your videos across social media, internal tools, or customer platforms.
  </Step>
</Steps>
