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

# Transmitir voz

POST https://api.elevenlabs.io/v1/text-to-speech/{voice_id}/stream
Content-Type: application/json

Convierte texto en voz con la voz que elijas y devuelve el audio como un flujo de audio.

Reference: https://elevenlabs.io/docs/api-reference/text-to-speech/stream

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

### Path parameters

- `voice_id` (string, required) — ID de la voz que se utilizará. Usa la ruta de API [Obtener voces](/docs/api-reference/voices/search) para mostrar todas las voces disponibles.

### Query parameters

- `enable_logging` (boolean, optional, default: true) — When enable_logging is set to false zero retention mode will be used for the request. This will mean history features are unavailable for this request, including request stitching. Zero retention mode may only be used by enterprise customers.
- `optimize_streaming_latency` (integer, optional, nullable, deprecated) — Puedes activar optimizaciones de latencia a costa de cierta calidad. La mejor latencia final posible varía según el modelo. Valores posibles: 0 - modo predeterminado (sin optimizaciones de latencia) 1 - optimizaciones de latencia normales (aproximadamente el 50 % de la mejora de latencia posible con la opción 3) 2 - optimizaciones de latencia intensas (aproximadamente el 75 % de la mejora de latencia posible con la opción 3) 3 - optimizaciones de latencia máximas 4 - optimizaciones de latencia máximas, pero también con el normalizador de texto desactivado para reducir aún más la latencia (mejor latencia, pero puede pronunciar incorrectamente, por ejemplo, números y fechas). El valor predeterminado es None.
- `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 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: `mp3_22050_32`, `mp3_24000_48`, `mp3_44100_32`, `mp3_44100_64`, `mp3_44100_96`, `mp3_44100_128`, `mp3_44100_192`, `pcm_8000`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_32000`, `pcm_44100`, `pcm_48000`, `ulaw_8000`, `alaw_8000`, `opus_48000_32`, `opus_48000_64`, `opus_48000_96`, `opus_48000_128`, `opus_48000_192`

### Body (application/json)

This endpoint expects a Body_text_to_speech_stream.

- `text` (string, required) — El texto que se convertirá en voz.
- `model_id` (string, optional, default: eleven_multilingual_v2) — Identificador del modelo que se utilizará; puedes consultarlos mediante GET /v1/models. El modelo debe admitir Texto a Voz; puedes comprobarlo mediante la propiedad can_do_text_to_speech.
- `language_code` (string, optional, nullable) — Código de idioma (ISO 639-1) usado para aplicar un idioma al modelo y a la normalización del texto. Si el modelo no admite el código de idioma proporcionado, se ignorará. Este parámetro no es compatible con los modelos multilingual_v2.
- `voice_settings` (VoiceSettingsResponseModel, optional, nullable) — Ajustes de voz que anulan los ajustes almacenados para la voz indicada. Solo se aplican a la solicitud indicada.
- `pronunciation_dictionary_locators` (list of PronunciationDictionaryVersionLocatorRequestModel, optional, nullable) — Una lista de localizadores de diccionarios de pronunciación (id, version_id) que se aplicarán al texto. Se aplicarán en orden. Puedes incluir hasta 3 localizadores por solicitud
- `seed` (integer, optional, nullable) — Si se especifica, nuestro sistema hará todo lo posible para realizar el muestreo de forma determinista, de modo que las solicitudes repetidas con la misma semilla y parámetros deberían devolver el mismo resultado. No se garantiza el determinismo. Debe ser un número entero entre 0 y 4294967295.
- `previous_text` (string, optional, nullable) — El texto anterior al de la solicitud actual. Puede utilizarse para mejorar la continuidad de la voz al concatenar varias generaciones o para influir en la continuidad de la voz en la generación actual.
- `next_text` (string, optional, nullable) — El texto posterior al de la solicitud actual. Puede utilizarse para mejorar la continuidad de la voz al concatenar varias generaciones o para influir en la continuidad de la voz en la generación actual.
- `previous_request_ids` (list of string, optional, nullable) — Una lista de request_id de las muestras generadas antes de esta generación. Puede utilizarse para mejorar la continuidad de la voz al dividir una tarea grande en varias solicitudes. Los resultados serán mejores si se usa el mismo modelo en todas las generaciones. Si se envían tanto previous_text como previous_request_ids, se ignorará previous_text. Se pueden enviar un máximo de 3 request_ids.
- `next_request_ids` (list of string, optional, nullable) — Una lista de request_id de las muestras posteriores a esta generación. next_request_ids es especialmente útil para mantener la continuidad de la voz al regenerar una muestra que haya tenido problemas de calidad de audio. Por ejemplo, si has generado 3 clips de voz y quieres mejorar el clip 2, indicar el ID de solicitud del clip 3 como next_request_id (y el del clip 1 como previous_request_id) ayudará a mantener un flujo natural en la voz combinada. Los resultados serán mejores si se usa el mismo modelo en todas las generaciones. Si se envían tanto next_text como next_request_ids, se ignorará next_text. Se pueden enviar un máximo de 3 request_ids.
- `use_pvc_as_ivc` (boolean, optional, default: false) — Si se usa la versión IVC de una voz profesional. Esto puede mejorar la expresividad y reducir la latencia.
- `apply_text_normalization` (enum, optional, default: auto) — Este parámetro controla la normalización de texto con tres modos: 'auto', 'on' y 'off'. Cuando se configura como 'auto', el sistema decidirá automáticamente si aplica la normalización de texto (por ejemplo, escribir los números con letras). Con 'on', la normalización de texto siempre se aplicará, mientras que con 'off' se omitirá.
  - Allowed values: `auto`, `on`, `off`
- `apply_language_text_normalization` (boolean, optional, default: false) — Este parámetro controla la normalización de texto del idioma. Ayuda a pronunciar correctamente el texto en algunos idiomas compatibles. ADVERTENCIA: este parámetro puede aumentar considerablemente la latencia de la solicitud. Actualmente solo es compatible con japonés.
- `audio_effects` (EffectsSpec-Input, optional, nullable) — Efectos de audio aplicados al audio generado. Los ID desconocidos devuelven un 404 con `param` indicando el nombre del campo. La reverberación (`environment_id` con `send_level` superior a 0) y un valor de `pan` distinto de cero producen audio estéreo y se rechazan con un 400 en los formatos de salida `ulaw_*`, `alaw_*` y `pcm_*`. Los efectos no modifican el coste de la solicitud.

## Response

### 200

Datos de audio en streaming.

- Streaming response of `string`.

## Errors

### 422 Unprocessable Entity Error

Error de validación

- `detail` (list of ValidationError, optional)

## Types

### VoiceSettingsResponseModel

- `stability` (double, optional, nullable, default: 0.5) — Determina la estabilidad de la voz y la aleatoriedad entre cada generación. Los valores más bajos introducen un rango emocional más amplio en la voz. Los valores más altos pueden dar como resultado una voz monótona y con una emoción limitada.
- `use_speaker_boost` (boolean, optional, nullable, default: true) — Este ajuste aumenta la similitud con el hablante original. Utilizarlo requiere una carga de procesamiento ligeramente mayor, lo que a su vez aumenta la latencia.
- `similarity_boost` (double, optional, nullable, default: 0.75) — Determina hasta qué punto la IA debe ajustarse a la voz original al intentar replicarla.
- `style` (double, optional, nullable, default: 0) — Determina la exageración del estilo de la voz. Este ajuste intenta amplificar el estilo del hablante original. Consume recursos computacionales adicionales y puede aumentar la latencia si se establece en un valor distinto de 0.
- `speed` (double, optional, nullable, default: 1) — Ajusta la velocidad de la voz. Un valor de 1.0 es la velocidad predeterminada; los valores inferiores a 1.0 ralentizan la voz y los superiores a 1.0 la aceleran.

### PronunciationDictionaryVersionLocatorRequestModel

- `pronunciation_dictionary_id` (string, required) — El ID del diccionario de pronunciación.
- `version_id` (string, optional, nullable) — El ID de la versión del diccionario de pronunciación. Si no se proporciona, se usará la versión más reciente.

### EffectsSpec-Input

Efectos de audio aplicados a la voz generada: un ajuste preestablecido de filtro, distancia percibida, un entorno de reverberación, una capa de ruido de fondo y panoramización estéreo. Deja todos los campos con sus valores predeterminados para obtener audio sin procesar.

- `filter_preset_id` (string, optional, nullable) — ID de un ajuste preestablecido de filtro que modifica el timbre de la voz, como `phone` u `old_radio`. Consulta los ID válidos con `GET /v1/audio-effects/catalog`.
- `distance` (double, optional, default: 0) — A qué distancia del micrófono suena el hablante, de 0 (cerca, sin cambios) a 1 (lejos). Los valores más altos atenúan las frecuencias graves y agudas y, cuando se configura un entorno, desplazan el equilibrio de la voz sin efectos hacia la reverberación.
- `environment_id` (string, optional, nullable) — ID de un entorno de reverberación que sitúa la voz en un espacio, como `small_room` o `hall`. Consulta los ID válidos con `GET /v1/audio-effects/catalog`. La reverberación se procesa en estéreo y añade una cola de hasta varios segundos después de que termine la voz.
- `background_noise_id` (string, optional, nullable) — ID de una capa de ruido de fondo reproducida en bucle bajo la voz, como `cafe` o `keyboard`. Consulta los ID válidos con `GET /v1/audio-effects/catalog`.
- `send_level` (double, optional, default: 1) — Qué cantidad de voz se envía a la reverberación, de 0 (ninguna) a 1 (toda). Solo se aplica cuando se configura `environment_id`; 0 desactiva la reverberación.
- `pan` (double, optional, default: 0) — Posición estéreo de la voz, de -1 (completamente a la izquierda), pasando por 0 (centro), hasta 1 (completamente a la derecha). Solo se aplica panoramización a la voz; la reverberación y el ruido de fondo permanecen centrados.

### ValidationError

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

### ValidationErrorLocItems

## Examples

**Request**

```json
{
  "text": "The first move is what sets everything in motion.",
  "model_id": "eleven_multilingual_v2"
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/text-to-speech/JBFqnCBsd6RMkjVDRZzb/stream"

querystring = {"output_format":"mp3_44100_128"}

payload = {
    "text": "The first move is what sets everything in motion.",
    "model_id": "eleven_multilingual_v2"
}
headers = {
    "xi-api-key": "xi-api-key",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/text-to-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128';
const options = {
  method: 'POST',
  headers: {'xi-api-key': 'xi-api-key', 'Content-Type': 'application/json'},
  body: '{"text":"The first move is what sets everything in motion.","model_id":"eleven_multilingual_v2"}'
};

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-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128"

	payload := strings.NewReader("{\n  \"text\": \"The first move is what sets everything in motion.\",\n  \"model_id\": \"eleven_multilingual_v2\"\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-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128")

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  \"text\": \"The first move is what sets everything in motion.\",\n  \"model_id\": \"eleven_multilingual_v2\"\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-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128")
  .header("xi-api-key", "xi-api-key")
  .header("Content-Type", "application/json")
  .body("{\n  \"text\": \"The first move is what sets everything in motion.\",\n  \"model_id\": \"eleven_multilingual_v2\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/text-to-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128', [
  'body' => '{
  "text": "The first move is what sets everything in motion.",
  "model_id": "eleven_multilingual_v2"
}',
  '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-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128");
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  \"text\": \"The first move is what sets everything in motion.\",\n  \"model_id\": \"eleven_multilingual_v2\"\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 = [
  "text": "The first move is what sets everything in motion.",
  "model_id": "eleven_multilingual_v2"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/text-to-speech/JBFqnCBsd6RMkjVDRZzb/stream?output_format=mp3_44100_128")! 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()
```