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

# Dialog erstellen

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

Wandelt eine Liste von Text- und Stimm-ID-Paaren in Sprache (Dialog) um und gibt Audio zurück.

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) — Wenn enable_logging auf false gesetzt ist, wird für die Anfrage der Zero-Retention-Modus verwendet. Dadurch sind Verlaufsfunktionen für diese Anfrage nicht verfügbar, einschließlich Request Stitching. Der Zero-Retention-Modus darf nur von Enterprise-Kunden verwendet werden.

### Body (application/json)

This endpoint expects a Body_Text_to_dialogue__multi_voice__v1_text_to_dialogue_post.

- `inputs` (list of DialogueInput, required) — Eine Liste von Dialogeingaben, die jeweils Text und eine Stimme-ID enthalten, die in Sprache umgewandelt werden. Die maximale Anzahl eindeutiger Stimme-IDs beträgt 10. Halten Sie für eine zuverlässige Generierung die Gesamtzeichenzahl aller `inputs[].text`-Werte pro Anfrage bei höchstens 2.000 Zeichen. Längere Anfragen können bei Streaming-Antworten vorzeitig enden oder einen Validierungsfehler zurückgeben.
- `model_id` (string, optional, default: eleven_v3) — Kennung des zu verwendenden Modells. Sie können Modelle mit GET /v1/models abfragen. Das Modell muss Text to Speech unterstützen. Dies können Sie über die Eigenschaft can_do_text_to_speech prüfen.
- `language_code` (string, optional, nullable) — Sprachcode (ISO 639-1), mit dem eine Sprache für das Modell und die Textnormalisierung erzwungen wird. Unterstützt das Modell den angegebenen Sprachcode nicht, wird er ignoriert. Dieser Parameter wird für multilingual_v2-Modelle nicht unterstützt.
- `settings` (ToDialogueSettingsResponseModel, optional, nullable) — Einstellungen zur Steuerung der Dialoggenerierung.
- `previous_text` (string, optional, nullable) — Der Text, der dieser Generierung unmittelbar vorausgeht und zur Konditionierung des Modells für prosodische Kontinuität verwendet wird. Es können maximal 100 Zeichen gesendet werden. Nicht von jedem Modell unterstützt.
- `future_text` (string, optional, nullable) — Der Text, der unmittelbar auf diese Generierung folgt und zur Konditionierung des Modells für prosodische Kontinuität verwendet wird. Es können maximal 100 Zeichen gesendet werden. Nicht von jedem Modell unterstützt.
- `pronunciation_dictionary_locators` (list of PronunciationDictionaryVersionLocatorRequestModel, optional, nullable) — Eine Liste von Aussprachewörterbuch-Referenzen (id, version_id), die auf den Text angewendet werden. Sie werden der Reihe nach angewendet. Pro Anfrage sind bis zu 3 Referenzen möglich.
- `seed` (integer, optional, nullable) — Falls angegeben, bemüht sich unser System um eine deterministische Generierung, sodass wiederholte Anfragen mit demselben Seed und denselben Parametern dasselbe Ergebnis liefern sollten. Determinismus wird nicht garantiert. Muss eine Ganzzahl zwischen 0 und 4294967295 sein.
- `apply_text_normalization` (enum, optional, default: auto) — Dieser Parameter steuert die Textnormalisierung mit drei Modi: 'auto', 'on' und 'off'. Bei 'auto' entscheidet das System automatisch, ob die Textnormalisierung angewendet wird, z. B. zum Ausschreiben von Zahlen. Bei 'on' wird die Textnormalisierung immer angewendet, bei 'off' übersprungen.
  - Allowed values: `auto`, `on`, `off`
- `use_pvc_as_ivc` (boolean, optional, default: false) — Gibt an, ob die IVC-Version einer professionellen Stimme verwendet werden soll. Dies kann die Ausdruckskraft verbessern und die Latenz verringern.
- `previous_request_ids` (list of string, optional, nullable) — Eine Liste der request_ids von Dialoggenerierungen vor dieser Generierung. Wird verwendet, um das Modell auf Kontinuität zu konditionieren, wenn eine große Aufgabe auf mehrere Anfragen aufgeteilt wird. Es können maximal 3 request_ids gesendet werden. Die letzte request_id ist das Audio, das der aktuellen Anfrage am nächsten liegt. Wird nicht von jedem Modell unterstützt.
- `next_request_ids` (list of string, optional, nullable) — Eine Liste der request_ids von Dialoggenerierungen nach dieser Generierung. Hilfreich, um die Kontinuität beizubehalten, wenn ein Clip in der Mitte einer Sequenz neu generiert wird. Es können maximal 3 request_ids gesendet werden. Die erste request_id ist das Audio, das der aktuellen Anfrage am nächsten liegt. Wird nicht von jedem Modell unterstützt.
- `audio_effects` (EffectsSpec-Input, optional, nullable) — Audioeffekte, die auf das generierte Audio angewendet werden. Unbekannte IDs geben 404 zurück, wobei `param` das Feld benennt. Hall (`environment_id` mit `send_level` über 0) und ein `pan` ungleich null erzeugen Stereo-Audio und werden bei den Ausgabeformaten `ulaw_*`, `alaw_*` und `pcm_*` mit 400 abgelehnt. Effekte ändern die Kosten der Anfrage nicht.

## Response

### 200

Die generierte Audiodatei

- File download.

## Errors

### 422 Unprocessable Entity Error

Validierungsfehler

- `detail` (list of ValidationError, optional)

## Types

### DialogueInput

- `text` (string, required) — Der in Sprache umzuwandelnde Text.
- `voice_id` (string, required) — Die ID der für die Generierung zu verwendenden Stimme.

### ToDialogueSettingsResponseModel

- `stability` (double, optional, nullable, default: 0.5) — Legt die Stabilität der Stimme und die Zufälligkeit zwischen den einzelnen Generierungen fest. Niedrigere Werte ermöglichen ein breiteres emotionales Spektrum. Höhere Werte können zu einer monotonen Stimme mit begrenzter Emotionalität führen.
- `similarity` (double, optional, nullable, default: 0.75) — Legt fest, wie stark das Modell bei der Generierung gesteuert wird. Höhere Werte lassen das Modell der Stimme genauer folgen, verringern jedoch die Variation. Nicht von allen Modellen unterstützt.

### PronunciationDictionaryVersionLocatorRequestModel

- `pronunciation_dictionary_id` (string, required) — Die ID des Aussprachewörterbuchs.
- `version_id` (string, optional, nullable) — Die ID der Version des Aussprachewörterbuchs. Wenn nicht angegeben, wird die neueste Version verwendet.

### EffectsSpec-Input

Audioeffekte für generierte Sprache: ein Filter-Preset, wahrgenommene Distanz, eine Hallumgebung, ein Hintergrundgeräuschbett und Stereo-Panning. Lassen Sie alle Felder auf den Standardwerten, um unbearbeitetes Audio zu erhalten.

- `filter_preset_id` (string, optional, nullable) — ID eines Filter-Presets, das den Klang der Stimme verändert, etwa `phone` oder `old_radio`. Gültige IDs erhalten Sie mit `GET /v1/audio-effects/catalog`.
- `distance` (double, optional, default: 0) — Wie weit die sprechende Person vom Mikrofon entfernt klingt, von 0 (nah, unverändert) bis 1 (weit). Höhere Werte dämpfen tiefe und hohe Frequenzen und verschieben bei festgelegter Umgebung die Balance von der trockenen Stimme zum Hall.
- `environment_id` (string, optional, nullable) — ID einer Hallumgebung, die die Stimme in einem Raum platziert, etwa `small_room` oder `hall`. Gültige IDs erhalten Sie mit `GET /v1/audio-effects/catalog`. Hall wird in Stereo gerendert und fügt nach Ende der Sprache einen Nachhall von bis zu mehreren Sekunden hinzu.
- `background_noise_id` (string, optional, nullable) — ID eines unter die Stimme gelegten Hintergrundgeräuschbetts in Schleife, etwa `cafe` oder `keyboard`. Gültige IDs erhalten Sie mit `GET /v1/audio-effects/catalog`.
- `send_level` (double, optional, default: 1) — Wie viel der Stimme in den Hall fließt, von 0 (nichts) bis 1 (vollständig). Gilt nur, wenn `environment_id` festgelegt ist; 0 deaktiviert den Hall.
- `pan` (double, optional, default: 0) — Stereoposition der Stimme: von -1 (ganz links) über 0 (Mitte) bis 1 (ganz rechts). Nur die Stimme wird im Stereopanorama positioniert; Hall und Hintergrundgeräusche bleiben mittig.

### ValidationError

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

### ValidationErrorLocItems

## 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()
```