> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Créer un dialogue

POST https://api.elevenlabs.io/v1/text-to-dialogue
Content-Type: application/json

Convertit une liste de paires texte et ID vocal en parole (dialogue) et renvoie l'audio.

Reference: https://elevenlabs.io/docs/api-reference/text-to-dialogue/convert

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Query parameters

- `output_format` (enum, optional, default: mp3_44100_128) — Output format of the generated audio. Formatted as codec_sample_rate_bitrate. So an mp3 with 22.05kHz sample rate at 32kbs is represented as mp3_22050_32. MP3 with 192kbps bitrate requires you to be subscribed to Creator tier or above. PCM and WAV formats with 44.1kHz sample rate requires you to be subscribed to Pro tier or above. Note that the μ-law format (sometimes written mu-law, often approximated as u-law) is commonly used for Twilio audio inputs.
  - Allowed values: `alaw_8000`, `mp3_22050_32`, `mp3_24000_48`, `mp3_44100_128`, `mp3_44100_192`, `mp3_44100_32`, `mp3_44100_64`, `mp3_44100_96`, `opus_48000_128`, `opus_48000_192`, `opus_48000_32`, `opus_48000_64`, `opus_48000_96`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_32000`, `pcm_44100`, `pcm_48000`, `pcm_8000`, `ulaw_8000`, `wav_16000`, `wav_22050`, `wav_24000`, `wav_32000`, `wav_44100`, `wav_48000`, `wav_8000`
- `enable_logging` (boolean, optional, default: true) — Lorsque enable_logging est défini sur false, le mode zéro rétention est utilisé pour la requête. Les fonctionnalités d’historique, y compris l’enchaînement des requêtes, ne sont alors pas disponibles pour cette requête. Le mode zéro rétention est réservé aux clients Enterprise.

### Body (application/json)

This endpoint expects a Body_Text_to_dialogue__multi_voice__v1_text_to_dialogue_post.

- `inputs` (list of DialogueInput, required) — Liste d’entrées de dialogue, chacune contenant du texte et un ID de voix qui sera converti en parole. Le nombre maximal d’ID de voix uniques est de 10. Pour une génération fiable, maintenez le nombre total de caractères dans l’ensemble des valeurs `inputs[].text` à 2 000 caractères ou moins par requête. Les requêtes plus longues peuvent se terminer prématurément dans les réponses en streaming ou renvoyer une erreur de validation.
- `model_id` (string, optional, default: eleven_v3) — Identifiant du modèle à utiliser. Vous pouvez consulter les modèles avec GET /v1/models. Le modèle doit prendre en charge la synthèse vocale, ce que vous pouvez vérifier avec la propriété can_do_text_to_speech.
- `language_code` (string, optional, nullable) — Code de langue (ISO 639-1) utilisé pour imposer une langue au modèle et à la normalisation du texte. Si le modèle ne prend pas en charge le code de langue fourni, celui-ci sera ignoré. Ce paramètre n'est pas pris en charge par les modèles multilingual_v2.
- `settings` (ToDialogueSettingsResponseModel, optional, nullable) — Paramètres contrôlant la génération de dialogues.
- `previous_text` (string, optional, nullable) — Le texte qui précède immédiatement cette génération, utilisé pour conditionner le modèle afin d’assurer la continuité prosodique. Un maximum de 100 caractères peut être envoyé. Cette fonctionnalité n’est pas prise en charge par tous les modèles.
- `future_text` (string, optional, nullable) — Le texte qui suit immédiatement cette génération, utilisé pour conditionner le modèle afin d’assurer la continuité prosodique. Un maximum de 100 caractères peut être envoyé. Cette fonctionnalité n’est pas prise en charge par tous les modèles.
- `pronunciation_dictionary_locators` (list of PronunciationDictionaryVersionLocatorRequestModel, optional, nullable) — Liste des localisateurs de dictionnaires de prononciation (id, version_id) à appliquer au texte. Ils seront appliqués dans l'ordre. Vous pouvez inclure jusqu'à 3 localisateurs par requête.
- `seed` (integer, optional, nullable) — Si spécifié, notre système fera de son mieux pour échantillonner de manière déterministe, afin que des requêtes répétées avec la même graine et les mêmes paramètres renvoient le même résultat. Le déterminisme n’est pas garanti. Doit être un entier compris entre 0 et 4294967295.
- `apply_text_normalization` (enum, optional, default: auto) — Ce paramètre contrôle la normalisation du texte selon trois modes : « auto », « on » et « off ». Lorsqu’il est défini sur « auto », le système décide automatiquement d’appliquer ou non la normalisation du texte, par exemple en écrivant les nombres en toutes lettres. Avec « on », la normalisation est toujours appliquée, tandis qu’avec « off », elle est ignorée.
  - Allowed values: `auto`, `on`, `off`
- `previous_request_ids` (list of string, optional, nullable) — Liste des request_ids des générations de dialogue précédant celle-ci. Utilisée pour conditionner le modèle afin d'assurer la continuité lorsqu'une tâche importante est divisée en plusieurs requêtes. Vous pouvez envoyer au maximum 3 request_ids. Le dernier request_id correspond à l'audio le plus proche de la requête actuelle. Cette fonctionnalité n'est pas prise en charge par tous les modèles.
- `next_request_ids` (list of string, optional, nullable) — Liste des request_ids des générations de dialogue suivant celle-ci. Utile pour maintenir la continuité lors de la régénération d'un extrait au milieu d'une séquence. Vous pouvez envoyer au maximum 3 request_ids. Le premier request_id correspond à l'audio le plus proche de la requête actuelle. Cette fonctionnalité n'est pas prise en charge par tous les modèles.
- `audio_effects` (EffectsSpec-Input, optional, nullable) — Effets audio appliqués à l’audio généré. Les ID inconnus renvoient une erreur 404, avec `param` indiquant le champ concerné. La réverbération (`environment_id` avec un `send_level` supérieur à 0) et un `pan` non nul produisent un audio stéréo et sont rejetés avec une erreur 400 pour les formats de sortie `ulaw_*`, `alaw_*` et `pcm_*`. Les effets ne modifient pas le coût de la requête.
- `use_pvc_as_ivc` (boolean, optional, nullable, deprecated) — Indique s'il faut utiliser la version IVC d'une voix professionnelle. Cela peut améliorer l'expressivité et réduire la latence.

## Response

### 200

Le fichier audio généré

- File download.

## Errors

### 422 Unprocessable Entity Error

Erreur de validation

- `detail` (list of ValidationError, optional)

## Types

### DialogueInput

- `text` (string, required) — Le texte à convertir en parole.
- `voice_id` (string, required) — L’ID de la voix à utiliser pour la génération.

### ToDialogueSettingsResponseModel

- `stability` (double, optional, nullable, default: 0.5) — Détermine la stabilité de la voix et le niveau d’aléa entre chaque génération. Des valeurs plus faibles offrent une palette émotionnelle plus large. Des valeurs plus élevées peuvent produire une voix monotone aux émotions limitées.
- `similarity` (double, optional, nullable, default: 0.75) — Détermine à quel point le modèle est guidé pendant la génération. Des valeurs plus élevées permettent au modèle de respecter davantage la voix, au détriment de la variation. Cette option n’est pas prise en charge par tous les modèles.
- `clone_strength` (double, optional, nullable) — Contrôle la proximité entre la voix et les échantillons de clonage de voix professionnel, de 0 (faible) à 1 (élevée). Nous recommandons la valeur 0 pour la plupart des cas d'utilisation. Augmentez cette valeur uniquement si vous rencontrez des problèmes avec les paramètres par défaut. S'applique uniquement aux clonages de voix professionnels affinés pour le modèle v4 sélectionné.

### PronunciationDictionaryVersionLocatorRequestModel

- `pronunciation_dictionary_id` (string, required) — L’ID du dictionnaire de prononciation.
- `version_id` (string, optional, nullable) — L’ID de la version du dictionnaire de prononciation. S’il n’est pas fourni, la dernière version sera utilisée.

### EffectsSpec-Input

Effets audio appliqués à la parole générée : un préréglage de filtre, une distance perçue, un environnement de réverbération, un fond sonore et un panoramique stéréo. Laissez chaque champ à sa valeur par défaut pour obtenir un audio non traité.

- `filter_preset_id` (string, optional, nullable) — ID d’un préréglage de filtre qui colore la voix, tel que `phone` ou `old_radio`. Répertoriez les ID valides avec `GET /v1/audio-effects/catalog`.
- `distance` (double, optional, default: 0) — Distance à laquelle le locuteur semble se trouver du microphone, de 0 (proche, inchangée) à 1 (loin). Des valeurs plus élevées atténuent les basses et hautes fréquences et, lorsqu’un environnement est défini, déplacent l’équilibre de la voix sèche vers la réverbération.
- `environment_id` (string, optional, nullable) — ID d’un environnement de réverbération qui place la voix dans un espace, tel que `small_room` ou `hall`. Répertoriez les ID valides avec `GET /v1/audio-effects/catalog`. La réverbération est produite en stéréo et ajoute une traîne pouvant durer plusieurs secondes après la fin de la parole.
- `background_noise_id` (string, optional, nullable) — ID d’un fond sonore diffusé en boucle sous la voix, tel que `cafe` ou `keyboard`. Répertoriez les ID valides avec `GET /v1/audio-effects/catalog`.
- `send_level` (double, optional, default: 1) — Quantité de voix envoyée vers la réverbération, de 0 (aucune) à 1 (totale). S’applique uniquement lorsque `environment_id` est défini ; 0 désactive la réverbération.
- `pan` (double, optional, default: 0) — Position stéréo de la voix, de -1 (complètement à gauche) à 1 (complètement à droite), en passant par 0 (au centre). Seule la voix est panoramiquée ; la réverbération et le bruit de fond restent centrés.

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### ValidationErrorLocItems

- string
- integer

## Examples

**Request**

```json
{
  "inputs": [
    {
      "text": "[giggling] Knock knock",
      "voice_id": "JBFqnCBsd6RMkjVDRZzb"
    },
    {
      "text": "[curious] Who is there?",
      "voice_id": "Aw4FAjKCGjjNkVhN1Xmq"
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/text-to-dialogue"

payload = { "inputs": [
        {
            "text": "[giggling] Knock knock",
            "voice_id": "JBFqnCBsd6RMkjVDRZzb"
        },
        {
            "text": "[curious] Who is there?",
            "voice_id": "Aw4FAjKCGjjNkVhN1Xmq"
        }
    ] }
headers = {
    "xi-api-key": "xi-api-key",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/text-to-dialogue';
const options = {
  method: 'POST',
  headers: {'xi-api-key': 'xi-api-key', 'Content-Type': 'application/json'},
  body: '{"inputs":[{"text":"[giggling] Knock knock","voice_id":"JBFqnCBsd6RMkjVDRZzb"},{"text":"[curious] Who is there?","voice_id":"Aw4FAjKCGjjNkVhN1Xmq"}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/text-to-dialogue"

	payload := strings.NewReader("{\n  \"inputs\": [\n    {\n      \"text\": \"[giggling] Knock knock\",\n      \"voice_id\": \"JBFqnCBsd6RMkjVDRZzb\"\n    },\n    {\n      \"text\": \"[curious] Who is there?\",\n      \"voice_id\": \"Aw4FAjKCGjjNkVhN1Xmq\"\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("xi-api-key", "xi-api-key")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/text-to-dialogue")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["xi-api-key"] = 'xi-api-key'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"inputs\": [\n    {\n      \"text\": \"[giggling] Knock knock\",\n      \"voice_id\": \"JBFqnCBsd6RMkjVDRZzb\"\n    },\n    {\n      \"text\": \"[curious] Who is there?\",\n      \"voice_id\": \"Aw4FAjKCGjjNkVhN1Xmq\"\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/text-to-dialogue")
  .header("xi-api-key", "xi-api-key")
  .header("Content-Type", "application/json")
  .body("{\n  \"inputs\": [\n    {\n      \"text\": \"[giggling] Knock knock\",\n      \"voice_id\": \"JBFqnCBsd6RMkjVDRZzb\"\n    },\n    {\n      \"text\": \"[curious] Who is there?\",\n      \"voice_id\": \"Aw4FAjKCGjjNkVhN1Xmq\"\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/text-to-dialogue', [
  'body' => '{
  "inputs": [
    {
      "text": "[giggling] Knock knock",
      "voice_id": "JBFqnCBsd6RMkjVDRZzb"
    },
    {
      "text": "[curious] Who is there?",
      "voice_id": "Aw4FAjKCGjjNkVhN1Xmq"
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'xi-api-key' => 'xi-api-key',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/text-to-dialogue");
var request = new RestRequest(Method.POST);
request.AddHeader("xi-api-key", "xi-api-key");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"inputs\": [\n    {\n      \"text\": \"[giggling] Knock knock\",\n      \"voice_id\": \"JBFqnCBsd6RMkjVDRZzb\"\n    },\n    {\n      \"text\": \"[curious] Who is there?\",\n      \"voice_id\": \"Aw4FAjKCGjjNkVhN1Xmq\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "xi-api-key": "xi-api-key",
  "Content-Type": "application/json"
]
let parameters = ["inputs": [
    [
      "text": "[giggling] Knock knock",
      "voice_id": "JBFqnCBsd6RMkjVDRZzb"
    ],
    [
      "text": "[curious] Who is there?",
      "voice_id": "Aw4FAjKCGjjNkVhN1Xmq"
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/text-to-dialogue")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```