# Ultravox

> Ultravox is a voice orchestration platform that connects multiple text-to-speech providers through a unified interface. Using Custom Voices, Ultravox can call external TTS APIs such as Faseeh and use those voices seamlessly inside Ultravox workflows. All you need is an active Faseeh (Munsit) account and an active Ultravox account.

## Get your key and voice ID

Two things to collect from the Faseeh side before you touch Ultravox:

| Step | What to do |
| --- | --- |
| **1 · Create an API key** | Log in to your Faseeh account and navigate to the [API / Developer section](https://app.munsit.com/en/api-keys). Create a new API key and copy it — it will be used inside Ultravox. |
| **2 · Copy the Voice ID** | Go to the [Voices section](/text-to-speech/voices), select the voice you want, and use the button that copies the **Voice ID**. Save it for later. |

> Keep the API key secure. It goes into your Ultravox custom-voice configuration, so treat that configuration as a secret too.

## Add a Custom Voice in Ultravox

In the Ultravox dashboard: open **Voices** from the navigation, click **Custom Voice**, then **Add Custom Voice**. Fill in the two identity fields:

| Field | Best practice |
| --- | --- |
| **Voice Name** | Use the same name as the voice in Faseeh — it makes the voice easier to identify and manage later. |
| **Description** | A short description: language, dialect, gender, or intended use case. |

## Configure the Custom Voice request

Copy the configuration below into Ultravox. Replace the redacted API key with your Faseeh key, and `YOUR_ar-najdi-male-2` with the Voice ID you copied.

```
{
  "url": "https://api.munsit.com/api/v1/text-to-speech/faseeh-v1-preview",
  "headers": {
    "x-api-key": "REDACTED",
    "Content-Type": "application/json"
  },
  "body": {
    "text": "{text}",
    "stability": 0.5,
    "speed": 1.0,
    "streaming": true,
    "voice_id": "YOUR_ar-najdi-male-2"
  },
  "responseSampleRate": 24000
}
```

## Request details

**Authentication:** Munsit requires API key authentication using the `x-api-key` header. **Path parameter:** `model_id` (string, required) — the model identifier used for text-to-speech generation. The body fields:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `voice_id` | string | required | The Munsit voice ID used for synthesis. |
| `text` | string | required | The Arabic text to convert into speech — Ultravox substitutes it via the `{text}` placeholder. |
| `stability` | number | required | A value between 0.0 and 1.0. Higher values produce more consistent output. |
| `speed` | number | optional | A value between 0.7 and 1.2. Default is 1.0. |
| `streaming` | boolean | required | Must be `false` to receive a complete WAV file response. |

> Prefer watching it done? There's a step-by-step video walkthrough of this setup on YouTube.

## Where next

The Ultravox custom voice is a thin wrapper over the standard synthesis endpoint — everything about it applies here.

- [Synthesize API](/text-to-speech/synthesize) — The endpoint your Ultravox custom voice calls. — `POST /text-to-speech/{model_id}`

- [Browse voices](/text-to-speech/voices) — Preview voices and copy IDs for new custom voices. — `GET /voices`

- [VAPI](/integrations/vapi) — The custom-voice pattern on VAPI's webhook. — `guide`

- [Voice cloning](/text-to-speech/voice-cloning) — Clone a voice, then wire its ID into Ultravox. — `POST /voices/clone`
