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

# Diseñar una voz.

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

Diseña una voz mediante un prompt. Este método devuelve una lista de previsualizaciones de voz. Cada previsualización tiene un generated_voice_id y una muestra de la voz como audio mp3 codificado en base64. Para crear una voz, utiliza el generated_voice_id de la previsualización que prefieras con la ruta de API /v1/text-to-voice.

Reference: https://elevenlabs.io/docs/api-reference/text-to-voice/design

## 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) — 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 VoiceDesignRequestModel.

- `voice_description` (string, required) — Descripción que se utilizará para la voz creada.
- `model_id` (enum, optional, default: eleven_multilingual_ttv_v2) — Modelo que se utilizará para la generación de voz. Valores posibles: eleven_multilingual_ttv_v2, eleven_ttv_v3.
  - Allowed values: `eleven_multilingual_ttv_v2`, `eleven_ttv_v3`
- `text` (string, optional, nullable) — Texto que se generará; su longitud debe estar entre 100 y 1000 caracteres.
- `auto_generate_text` (boolean, optional, default: false) — Indica si se debe generar automáticamente un texto adecuado para la descripción de la voz.
- `loudness` (double, optional, default: 0.5) — Controla el nivel de volumen de la voz generada. -1 es el nivel más bajo, 1 el más alto y 0 corresponde aproximadamente a -24 LUFS.
- `seed` (integer, optional, nullable) — Número aleatorio que controla la generación de voz. La misma semilla con las mismas entradas produce la misma voz.
- `guidance_scale` (double, optional, default: 5) — Controla hasta qué punto la IA sigue el prompt. Los valores más bajos dan a la IA más libertad creativa, mientras que los más altos la obligan a ceñirse más al prompt. Los valores altos pueden hacer que la voz suene artificial o robótica. Recomendamos utilizar prompts más largos y detallados con una escala de orientación más baja.
- `stream_previews` (boolean, optional, default: false) — Determina si las previsualizaciones de Texto a Voz deben incluirse en la respuesta. Si es true, solo se devolverán los ID generados, que después podrán transmitirse mediante la ruta de API /v1/text-to-voice/:generated_voice_id/stream.
- `should_enhance` (boolean, optional, default: false) — Indica si se debe mejorar la descripción de la voz mediante IA para añadir más detalle y mejorar la calidad de generación de voz. Cuando está activado, el sistema ampliará automáticamente los prompts sencillos para convertirlos en descripciones de voz más detalladas. El valor predeterminado es False.
- `remixing_session_id` (string, optional, nullable) — El ID de la sesión de remezcla.
- `remixing_session_iteration_id` (string, optional, nullable) — El ID de la iteración de la sesión de remix a la que se deben adjuntar estas generaciones. Si no se proporciona, se creará una nueva iteración.
- `quality` (double, optional, nullable) — Una calidad más alta produce una mejor voz, pero con menos variedad.
- `reference_audio_base64` (string, optional, nullable) — Audio de referencia que se utilizará para la generación de voz. El audio debe estar codificado en base64. Solo compatible con el modelo eleven_ttv_v3.
- `prompt_strength` (double, optional, nullable) — Controla el equilibrio entre el prompt y el audio de referencia al generar muestras de voz. 0 significa que el prompt apenas influye y 1 que el audio de referencia apenas influye. Solo es compatible con el modelo eleven_ttv_v3.

## Response

### 200

Respuesta correcta.

- `previews` (list of VoicePreviewResponseModel, required) — Las vistas previas de las voces generadas.
- `text` (string, required) — El texto utilizado para previsualizar las voces.

## Errors

### 409 Conflict Error

Ya hay una generación en curso para esta vista previa. Vuelve a intentar la solicitud.

- `any`

### 422 Unprocessable Entity Error

Error de validación

- `detail` (list of ValidationError, optional)

## Types

### VoicePreviewResponseModel

- `audio_base_64` (string, required) — El audio de la vista previa codificado en base64.
- `generated_voice_id` (string, required) — El ID de la voz generada. Úsalo para crear una voz a partir de la vista previa.
- `media_type` (string, required) — El tipo de medio de la vista previa.
- `duration_secs` (double, required) — La duración de la vista previa en segundos.
- `language` (string, required, nullable) — El idioma de la vista previa.

### ValidationError

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

### ValidationErrorLocItems

## Examples

**Request**

```json
{
  "voice_description": "A sassy squeaky mouse"
}
```

**Response**

```json
{
  "previews": [
    {
      "audio_base_64": "string",
      "generated_voice_id": "string",
      "media_type": "string",
      "duration_secs": 1.1,
      "language": "string"
    }
  ],
  "text": "string"
}
```

**SDK Code**

```python
import requests

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

payload = { "voice_description": "A sassy squeaky mouse" }
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-voice/design';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"voice_description":"A sassy squeaky mouse"}'
};

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-voice/design"

	payload := strings.NewReader("{\n  \"voice_description\": \"A sassy squeaky mouse\"\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-voice/design")

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  \"voice_description\": \"A sassy squeaky mouse\"\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-voice/design")
  .header("Content-Type", "application/json")
  .body("{\n  \"voice_description\": \"A sassy squeaky mouse\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/text-to-voice/design', [
  'body' => '{
  "voice_description": "A sassy squeaky mouse"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/text-to-voice/design");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"voice_description\": \"A sassy squeaky mouse\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = ["voice_description": "A sassy squeaky mouse"] as [String : Any]

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

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