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

# Avatar Voice and TTS Providers

> Understand how avatar-bound voices and TTS providers work in the open Video Synthesis API

The open Video Synthesis API does not use a single global voice catalog for video generation tasks.

Instead, when you submit `textContent`, NavTalk uses the **voice already bound to the selected avatar**.

## How TTS Selection Works

When you call `POST /api/open/v1/video-compose/submit` with:

* `textContent`
* `avatarId`

the service performs these steps:

1. Loads the avatar by `avatarId`
2. Reads the avatar's configured `voiceKey`
3. Reads the avatar's configured provider
4. Generates the speech audio with that provider
5. Uploads the generated audio and uses it for video synthesis

## Supported Providers

The current open video workflow supports avatar-bound TTS from:

* OpenAI
* ElevenLabs
* Cartesia

## What This Means for API Users

* You do not need to pass a separate `voice` parameter when using `textContent`
* The avatar determines which voice is used
* Different avatars may use different providers and different voice keys
* The same `textContent` may sound different when submitted with different `avatarId` values

## Recommended Workflow

For predictable results:

1. Create or select an avatar that already has the correct voice configuration
2. Reuse that `avatarId` for your video tasks
3. Submit only `textContent` and the optional face-control parameters

## When `voice` Appears in Responses

The `/status` and `/list` responses may include:

* `voice`
* `voiceName`

These fields reflect the avatar-bound voice that was used for the task.

## When TTS Is Not Used

You do not need avatar-bound voice configuration when you submit:

* `audioFile`
* `audioUrl`

In those cases, NavTalk uses the supplied audio directly and skips TTS generation.

<Note>
  If you use `textContent`, `avatarId` is required. A plain `characterFile` or `characterUrl` is not enough for TTS, because the service needs an avatar-linked provider and voice key.
</Note>
