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

# Text to Dialogue mit Zeitstempeln

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

Dialog aus Text mit präzisen Zeitinformationen auf Zeichenebene für die Audio-Text-Synchronisierung erstellen.

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

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

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

Erfolgreiche Antwort

- `audio_base64` (string, required) — Base64-kodierte Audiodaten
- `voice_segments` (list of VoiceSegment, required) — Stimmsegmente für das Audio
- `alignment` (CharacterAlignmentResponseModel, optional, nullable) — Zeitstempelinformationen für jedes Zeichen im Originaltext
- `normalized_alignment` (CharacterAlignmentResponseModel, optional, nullable) — Zeitstempelinformationen für jedes Zeichen im normalisierten Text

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

### VoiceSegment

- `voice_id` (string, required) — Die für dieses Segment verwendete Stimmen-ID
- `start_time_seconds` (double, required) — Startzeit dieses Sprachsegments
- `end_time_seconds` (double, required) — Endzeit dieses Sprachsegments
- `character_start_index` (integer, required) — Startindex im Zeichen-Array
- `character_end_index` (integer, required) — Endindex im Zeichen-Array (exklusiv)
- `dialogue_input_index` (integer, required) — Zeile des Dialogs (Skripts), zu dem dieses Segment gehört.

### CharacterAlignmentResponseModel

- `characters` (list of string, required)
- `character_start_times_seconds` (list of double, required)
- `character_end_times_seconds` (list of double, required)

### ValidationError

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

### ValidationErrorLocItems

## Examples

**Request**

```json
{
  "inputs": [
    {
      "text": "Hello, how are you?",
      "voice_id": "bYTqZQo3Jz7LQtmGTgwi"
    },
    {
      "text": "I'm doing well, thank you!",
      "voice_id": "6lCwbsX1yVjD49QmpkTR"
    }
  ]
}
```

**Response**

```json
{
  "audio_base64": "base64_encoded_audio_string",
  "voice_segments": [
    {
      "voice_id": "21m00Tcm4TlvDq8ikWAM",
      "start_time_seconds": 0,
      "end_time_seconds": 0.5,
      "character_start_index": 0,
      "character_end_index": 5,
      "dialogue_input_index": 0
    },
    {
      "voice_id": "VEDscrYI8uIMttlO2Ztu",
      "start_time_seconds": 0.5,
      "end_time_seconds": 0.7,
      "character_start_index": 5,
      "character_end_index": 7,
      "dialogue_input_index": 1
    }
  ],
  "alignment": {
    "characters": [
      "H",
      "e",
      "l",
      "l",
      "o",
      "H",
      "i"
    ],
    "character_start_times_seconds": [
      0,
      0.1,
      0.2,
      0.3,
      0.4,
      0.5,
      0.6
    ],
    "character_end_times_seconds": [
      0.1,
      0.2,
      0.3,
      0.4,
      0.5,
      0.6,
      0.7
    ]
  },
  "normalized_alignment": {
    "characters": [
      "H",
      "e",
      "l",
      "l",
      "o",
      "H",
      "i"
    ],
    "character_start_times_seconds": [
      0,
      0.1,
      0.2,
      0.3,
      0.4,
      0.5,
      0.6
    ],
    "character_end_times_seconds": [
      0.1,
      0.2,
      0.3,
      0.4,
      0.5,
      0.6,
      0.7
    ]
  }
}
```

**SDK Code**

```python
import requests

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

payload = { "inputs": [
        {
            "text": "Hello, how are you?",
            "voice_id": "bYTqZQo3Jz7LQtmGTgwi"
        },
        {
            "text": "I'm doing well, thank you!",
            "voice_id": "6lCwbsX1yVjD49QmpkTR"
        }
    ] }
headers = {"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/with-timestamps';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"inputs":[{"text":"Hello, how are you?","voice_id":"bYTqZQo3Jz7LQtmGTgwi"},{"text":"I\'m doing well, thank you!","voice_id":"6lCwbsX1yVjD49QmpkTR"}]}'
};

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/with-timestamps"

	payload := strings.NewReader("{\n  \"inputs\": [\n    {\n      \"text\": \"Hello, how are you?\",\n      \"voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\"\n    },\n    {\n      \"text\": \"I'm doing well, thank you!\",\n      \"voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\n    }\n  ]\n}")

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

	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/with-timestamps")

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

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"inputs\": [\n    {\n      \"text\": \"Hello, how are you?\",\n      \"voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\"\n    },\n    {\n      \"text\": \"I'm doing well, thank you!\",\n      \"voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\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/with-timestamps")
  .header("Content-Type", "application/json")
  .body("{\n  \"inputs\": [\n    {\n      \"text\": \"Hello, how are you?\",\n      \"voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\"\n    },\n    {\n      \"text\": \"I'm doing well, thank you!\",\n      \"voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\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/with-timestamps', [
  'body' => '{
  "inputs": [
    {
      "text": "Hello, how are you?",
      "voice_id": "bYTqZQo3Jz7LQtmGTgwi"
    },
    {
      "text": "I\'m doing well, thank you!",
      "voice_id": "6lCwbsX1yVjD49QmpkTR"
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/text-to-dialogue/with-timestamps");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"inputs\": [\n    {\n      \"text\": \"Hello, how are you?\",\n      \"voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\"\n    },\n    {\n      \"text\": \"I'm doing well, thank you!\",\n      \"voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = ["inputs": [
    [
      "text": "Hello, how are you?",
      "voice_id": "bYTqZQo3Jz7LQtmGTgwi"
    ],
    [
      "text": "I'm doing well, thank you!",
      "voice_id": "6lCwbsX1yVjD49QmpkTR"
    ]
  ]] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/text-to-dialogue/with-timestamps")! 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()
```