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

# Crear pódcast

POST https://api.elevenlabs.io/v1/studio/podcasts
Content-Type: application/json

Crea y convierte automáticamente un proyecto de pódcast. Actualmente, nosotros cubrimos el coste del LLM, pero se te cobrará la generación de audio. En el futuro, se te cobrarán tanto los costes del LLM como los de generación de audio.

Reference: https://elevenlabs.io/docs/api-reference/studio/create-podcast

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

### Headers

- `safety-identifier` (string, optional, nullable) — Se usa para moderación. Tu espacio de trabajo debe estar incluido en la lista de permitidos para usar esta función.

### Body (application/json)

This endpoint expects a Body_Create_podcast_v1_studio_podcasts_post.

- `model_id` (string, required) — El ID del modelo que se usará para este proyecto de Studio. Puedes consultar GET /v1/models para enumerar todos los modelos disponibles.
- `mode` (BodyCreatePodcastV1StudioPodcastsPostMode, required) — El tipo de pódcast que se generará. Puede ser 'conversation', una interacción entre dos voces, o 'bulletin', un monólogo.
- `source` (BodyCreatePodcastV1StudioPodcastsPostSource, required) — El contenido de origen del podcast.
- `quality_preset` (enum, optional, nullable) — Output quality of the generated audio. Must be one of: 'standard' - standard output format, 128kbps with 44.1kHz sample rate. 'high' - high quality output format, 192kbps with 44.1kHz sample rate and major improvements on our side. 'ultra' - ultra quality output format, 192kbps with 44.1kHz sample rate and highest improvements on our side. 'ultra_lossless' - ultra quality output format, 705.6kbps with 44.1kHz sample rate and highest improvements on our side in a fully lossless format. If not provided, defaults to the highest quality preset available on your subscription tier.
  - Allowed values: `standard`, `high`, `ultra`, `ultra_lossless`
- `duration_scale` (enum, optional, default: default) — Duración del pódcast generado. Debe ser una de las siguientes: short - produce pódcasts de menos de 3 minutos. default - produce pódcasts de aproximadamente 3 a 7 minutos. long - produce pódcasts de más de 7 minutos.
  - Allowed values: `short`, `default`, `long`
- `language` (string, optional, nullable) — Un idioma opcional del proyecto de Studio. Código de idioma de dos letras (ISO 639-1).
- `intro` (string, optional, nullable) — El texto de introducción que siempre se añadirá al inicio del pódcast.
- `outro` (string, optional, nullable) — El texto de cierre que siempre se añadirá al final del podcast.
- `instructions_prompt` (string, optional, nullable) — Prompt de instrucciones adicionales para la generación del pódcast, que se usa para ajustar su estilo y tono.
- `highlights` (list of string, optional, nullable) — Un breve resumen o los aspectos destacados del contenido del proyecto de Studio, con puntos clave o temas. Debe tener entre 10 y 70 caracteres.
- `callback_url` (string, optional, nullable) — Una URL a la que llamará nuestro servicio cuando se convierta el proyecto de Studio. La solicitud contendrá un objeto JSON con el estado de la conversión. Mensajes: 1. Cuando el proyecto se haya convertido correctamente: \{ type: "project\_conversion\_status", event\_timestamp: 1234567890, data: \{ request\_id: "1234567890", project\_id: "21m00Tcm4TlvDq8ikWAM", conversion\_status: "success", project\_snapshot\_id: "22m00Tcm4TlvDq8ikMAT", error\_details: None, } } 2. Cuando falle la conversión del proyecto: \{ type: "project\_conversion\_status", event\_timestamp: 1234567890, data: \{ request\_id: "1234567890", project\_id: "21m00Tcm4TlvDq8ikWAM", conversion\_status: "error", project\_snapshot\_id: None, error\_details: "Error details if conversion failed" } } 3. Cuando el capítulo se haya convertido correctamente: \{ type: "chapter\_conversion\_status", event\_timestamp: 1234567890, data: \{ request\_id: "1234567890", project\_id: "21m00Tcm4TlvDq8ikWAM", chapter\_id: "22m00Tcm4TlvDq8ikMAT", conversion\_status: "success", chapter\_snapshot\_id: "23m00Tcm4TlvDq8ikMAV", error\_details: None, } } 4. Cuando falle la conversión del capítulo: \{ type: "chapter\_conversion\_status", event\_timestamp: 1234567890, data: \{ request\_id: "1234567890", project\_id: "21m00Tcm4TlvDq8ikWAM", chapter\_id: "22m00Tcm4TlvDq8ikMAT", conversion\_status: "error", chapter\_snapshot\_id: None, error\_details: "Error details if conversion failed" } }
- `apply_text_normalization` (enum, optional, nullable) — Este parámetro controla la normalización de texto con cuatro modos: 'auto', 'on', 'apply_english' y 'off'. Cuando se establece en 'auto', el sistema decidirá automáticamente si aplicar la normalización de texto (por ejemplo, escribir los números con letras). Con 'on', la normalización de texto se aplicará siempre, mientras que con 'off' se omitirá. 'apply_english' funciona igual que 'on', pero asumirá que el texto está en inglés.
  - Allowed values: `auto`, `on`, `off`, `apply_english`

## Response

### 200

Respuesta correcta.

- `project` (ProjectResponseModel, required) — El proyecto asociado al podcast creado.

## Errors

### 422 Unprocessable Entity Error

Error de validación

- `detail` (list of ValidationError, optional)

## Types

### BodyCreatePodcastV1StudioPodcastsPostMode

El tipo de pódcast que se generará. Puede ser 'conversation', una interacción entre dos voces, o 'bulletin', un monólogo.

### BodyCreatePodcastV1StudioPodcastsPostSource

El contenido de origen del podcast.

### ProjectResponseModel

- `project_id` (string, required) — El ID del proyecto.
- `name` (string, required) — El nombre del proyecto.
- `create_date_unix` (integer, required) — La fecha de creación del proyecto.
- `created_by_user_id` (string, required, nullable) — El ID de usuario que creó el proyecto.
- `default_title_voice_ref_id` (string, required) — El ID de referencia de voz de proyecto predeterminado para títulos.
- `default_paragraph_voice_ref_id` (string, required) — El ID de referencia de voz de proyecto predeterminado para párrafos.
- `default_model_id` (string, required) — El ID del modelo predeterminado.
- `can_be_downloaded` (boolean, required) — Indica si el proyecto se puede descargar.
- `volume_normalization` (boolean, required) — Indica si el proyecto usa normalización de volumen.
- `state` (enum, required) — El estado del proyecto.
  - Allowed values: `creating`, `default`, `converting`, `in_queue`
- `access_level` (enum, required) — El nivel de acceso del proyecto.
  - Allowed values: `admin`, `editor`, `commenter`, `viewer`
- `quality_check_on` (boolean, required, deprecated) — Indica si el control de calidad está activado para este proyecto.
- `quality_check_on_when_bulk_convert` (boolean, required, deprecated) — Indica si el control de calidad está activado en el proyecto al convertir en bloque.
- `default_title_voice_id` (string, required, deprecated) — El ID de voz predeterminado para títulos.
- `default_paragraph_voice_id` (string, required, deprecated) — El ID de voz predeterminado para párrafos.
- `last_conversion_date_unix` (integer, optional, nullable) — La fecha de la última conversión del proyecto.
- `title` (string, optional, nullable) — El título del proyecto.
- `author` (string, optional, nullable) — El autor del proyecto.
- `description` (string, optional, nullable) — La descripción del proyecto.
- `genres` (list of string, optional, nullable) — Lista de géneros del proyecto.
- `cover_image_url` (string, optional, nullable) — La URL de la imagen de portada del proyecto.
- `target_audience` (enum, optional, nullable) — El público objetivo del proyecto.
  - Allowed values: `children`, `young adult`, `adult`, `all ages`
- `language` (string, optional, nullable) — Código de idioma de dos letras (ISO 639-1) del idioma del proyecto.
- `content_type` (string, optional, nullable) — El tipo de contenido del proyecto; por ejemplo, 'Novel' o 'Short Story'
- `original_publication_date` (string, optional, nullable) — La fecha de publicación original del proyecto.
- `mature_content` (boolean, optional, nullable) — Indica si el proyecto contiene contenido para adultos.
- `isbn_number` (string, optional, nullable) — El número ISBN del proyecto.
- `fiction` (enum, optional, nullable) — Indica si el proyecto es ficción.
  - Allowed values: `fiction`, `non-fiction`
- `creation_meta` (ProjectCreationMetaResponseModel, optional, nullable) — Los metadatos de creación del proyecto.
- `source_type` (enum, optional, nullable) — El tipo de origen del proyecto.
  - Allowed values: `blank`, `book`, `article`, `genfm`, `video`, `screenplay`
- `chapters_enabled` (boolean, optional, nullable, default: true) — Indica si los capítulos están activados para el proyecto.
- `captions_enabled` (boolean, optional, nullable, default: true) — Indica si los subtítulos están activados para el proyecto.
- `caption_style` (CaptionStyleModel, optional, nullable) — Estilo global que se aplicará a todos los subtítulos.
- `caption_style_template_overrides` (map from string to CaptionStyleModel, optional, nullable) — Cambios de estilo realizados en las plantillas proporcionadas.
- `public_share_id` (string, optional, nullable) — El ID público para compartir el proyecto.
- `aspect_ratio` (enum, optional, nullable) — La relación de aspecto del proyecto.
  - Allowed values: `16:9`, `9:16`, `4:5`, `1:1`
- `agent_settings` (StudioAgentSettingsModel, optional, nullable) — Ajustes del proyecto relacionados con el agente

### ValidationError

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

### PodcastConversationMode

- `type` ("conversation", required) — El tipo de pódcast que se creará.
- `conversation` (PodcastConversationModeData, required) — Los ajustes de voz para la conversación.

### PodcastBulletinMode

- `type` ("bulletin", required) — El tipo de pódcast que se creará.
- `bulletin` (PodcastBulletinModeData, required) — Los ajustes de voz para el boletín.

### PodcastTextSource

- `type` ("text", required) — El tipo de fuente que se creará.
- `text` (string, required) — El texto a partir del que se creará el pódcast.

### PodcastURLSource

- `type` ("url", required) — El tipo de fuente que se creará.
- `url` (string, required) — La URL a partir de la que se creará el pódcast.

### ProjectCreationMetaResponseModel

- `creation_progress` (double, required) — El progreso de la creación del proyecto.
- `status` (enum, required) — El estado de la acción de creación del proyecto.
  - Allowed values: `draft`, `pending`, `creating`, `finished`, `failed`
- `type` (enum, required) — El tipo de acción de creación de proyecto.
  - Allowed values: `blank`, `generate_podcast`, `auto_assign_voices`, `dub_video`, `import_speech`

### CaptionStyleModel

- `template` (CaptionStyleTemplateModel, optional, nullable)
- `text_font` (string, optional, nullable)
- `text_scale` (double, optional, nullable)
- `text_color` (string, optional, nullable)
- `text_align` (enum, optional, nullable)
  - Allowed values: `start`, `center`, `end`
- `text_style` (enum, optional, nullable)
  - Allowed values: `normal`, `italic`
- `text_weight` (enum, optional, nullable)
  - Allowed values: `normal`, `bold`, `900`
- `text_transform` (enum, optional, nullable)
  - Allowed values: `none`, `uppercase`
- `text_blend_mode` (enum, optional, nullable)
  - Allowed values: `normal`, `difference`, `multiply`
- `text_shadow` (StudioTextStyleShadowModel, optional, nullable)
- `text_outline` (StudioTextStyleOutlineModel, optional, nullable)
- `background_enabled` (boolean, optional, nullable)
- `background_color` (string, optional, nullable)
- `background_opacity` (double, optional, nullable)
- `background_blur` (double, optional, nullable)
- `background_border_radius` (double, optional, nullable)
- `word_highlights_enabled` (boolean, optional, nullable)
- `word_highlights_color` (string, optional, nullable)
- `word_highlights_background_color` (string, optional, nullable)
- `word_highlights_opacity` (double, optional, nullable)
- `word_highlights_border_radius` (double, optional, nullable)
- `word_highlights_blur` (double, optional, nullable)
- `section_animation` (CaptionStyleSectionAnimationModel, optional, nullable)
- `word_animation` (CaptionStyleWordAnimationModel, optional, nullable)
- `character_animation` (CaptionStyleCharacterAnimationModel, optional, nullable)
- `cursor_enabled` (boolean, optional, nullable)
- `width_pct` (double, optional, nullable)
- `horizontal_placement` (CaptionStyleHorizontalPlacementModel, optional, nullable)
- `vertical_placement` (CaptionStyleVerticalPlacementModel, optional, nullable)
- `auto_break_enabled` (boolean, optional, nullable)
- `max_lines_per_section` (integer, optional, nullable)
- `max_words_per_line` (integer, optional, nullable)

### StudioAgentSettingsModel

- `tool_settings` (map from string to StudioAgentToolSettingsModel, optional)

### ValidationErrorLocItems

### PodcastConversationModeData

- `host_voice_id` (string, required) — El ID de la voz anfitriona.
- `guest_voice_id` (string, required) — El ID de la voz invitada.

### PodcastBulletinModeData

- `host_voice_id` (string, required) — El ID de la voz anfitriona.

### CaptionStyleTemplateModel

- `key` (string, required)
- `label` (string, required)
- `requires_high_fps` (boolean, optional, default: false)

### StudioTextStyleShadowModel

- `enabled` (boolean, required)
- `color` (string, required)
- `opacity` (double, required)
- `blur` (double, required)
- `offset_x` (double, required)
- `offset_y` (double, required)

### StudioTextStyleOutlineModel

- `enabled` (boolean, required)
- `color` (string, required)
- `opacity` (double, required)
- `width` (double, required)

### CaptionStyleSectionAnimationModel

- `enter_type` (enum, required)
  - Allowed values: `none`, `fade`, `scale`, `pop`, `slide_up`, `slide_down`, `slam`, `scale_down`, `slide_in`
- `exit_type` (enum, required)
  - Allowed values: `none`, `fade`, `scale`, `pop`, `slide_up`, `slide_down`, `slam`, `scale_down`, `slide_in`

### CaptionStyleWordAnimationModel

- `enter_type` (enum, required)
  - Allowed values: `none`, `fade`, `scale`, `pop`, `slide_up`, `slide_down`, `slam`, `scale_down`, `slide_in`
- `exit_type` (enum, required)
  - Allowed values: `none`, `fade`, `scale`, `pop`, `slide_up`, `slide_down`, `slam`, `scale_down`, `slide_in`

### CaptionStyleCharacterAnimationModel

- `enter_type` (enum, required)
  - Allowed values: `none`, `fade`, `typewriter`
- `exit_type` (enum, required)
  - Allowed values: `none`, `fade`

### CaptionStyleHorizontalPlacementModel

- `align` (enum, required)
  - Allowed values: `left`, `center`, `right`
- `translate_pct` (double, required)

### CaptionStyleVerticalPlacementModel

- `align` (enum, required)
  - Allowed values: `top`, `center`, `bottom`
- `translate_pct` (double, required)

### StudioAgentToolSettingsModel

- `skip_confirmation` (boolean, optional, default: false)

## Examples

**Request**

```json
{
  "model_id": "eleven_multilingual_v2",
  "mode": {
    "conversation": {
      "guest_voice_id": "bYTqZQo3Jz7LQtmGTgwi",
      "host_voice_id": "6lCwbsX1yVjD49QmpkTR"
    },
    "type": "conversation"
  },
  "source": {
    "type": "url",
    "url": "https://en.wikipedia.org/wiki/Cognitive_science"
  }
}
```

**Response**

```json
{
  "project": {
    "project_id": "aw1NgEzBg83R7vgmiJt6",
    "name": "My Project",
    "create_date_unix": 1714204800,
    "created_by_user_id": "Vbtgl3bRdj6lk79rYAgx",
    "default_title_voice_ref_id": "JBFqnCBsd6RMkjVDRZzb",
    "default_paragraph_voice_ref_id": "JBFqnCBsd6RMkjVDRZzb",
    "default_model_id": "eleven_multilingual_v2",
    "can_be_downloaded": true,
    "volume_normalization": true,
    "state": "default",
    "access_level": "viewer",
    "quality_check_on": false,
    "quality_check_on_when_bulk_convert": false,
    "default_title_voice_id": "JBFqnCBsd6RMkjVDRZzb",
    "default_paragraph_voice_id": "JBFqnCBsd6RMkjVDRZzb",
    "last_conversion_date_unix": 1714204800,
    "title": "My Project",
    "author": "John Doe",
    "description": "This is a description of my project.",
    "genres": [
      "Novel",
      "Short Story"
    ],
    "cover_image_url": "https://example.com/cover.jpg",
    "target_audience": "young adult",
    "language": "en",
    "content_type": "Novel",
    "original_publication_date": "2025-01-01",
    "mature_content": false,
    "isbn_number": "978-90-274-3964-2",
    "fiction": "fiction",
    "creation_meta": {
      "creation_progress": 0.5,
      "status": "pending",
      "type": "blank"
    },
    "public_share_id": "abc123def456789"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/studio/podcasts"

payload = {
    "model_id": "eleven_multilingual_v2",
    "mode": {
        "conversation": {
            "guest_voice_id": "bYTqZQo3Jz7LQtmGTgwi",
            "host_voice_id": "6lCwbsX1yVjD49QmpkTR"
        },
        "type": "conversation"
    },
    "source": {
        "type": "url",
        "url": "https://en.wikipedia.org/wiki/Cognitive_science"
    }
}
headers = {"Content-Type": "application/json"}

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

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/studio/podcasts';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"model_id":"eleven_multilingual_v2","mode":{"conversation":{"guest_voice_id":"bYTqZQo3Jz7LQtmGTgwi","host_voice_id":"6lCwbsX1yVjD49QmpkTR"},"type":"conversation"},"source":{"type":"url","url":"https://en.wikipedia.org/wiki/Cognitive_science"}}'
};

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/studio/podcasts"

	payload := strings.NewReader("{\n  \"model_id\": \"eleven_multilingual_v2\",\n  \"mode\": {\n    \"conversation\": {\n      \"guest_voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\",\n      \"host_voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\n    },\n    \"type\": \"conversation\"\n  },\n  \"source\": {\n    \"type\": \"url\",\n    \"url\": \"https://en.wikipedia.org/wiki/Cognitive_science\"\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/studio/podcasts")

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  \"model_id\": \"eleven_multilingual_v2\",\n  \"mode\": {\n    \"conversation\": {\n      \"guest_voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\",\n      \"host_voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\n    },\n    \"type\": \"conversation\"\n  },\n  \"source\": {\n    \"type\": \"url\",\n    \"url\": \"https://en.wikipedia.org/wiki/Cognitive_science\"\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/studio/podcasts")
  .header("Content-Type", "application/json")
  .body("{\n  \"model_id\": \"eleven_multilingual_v2\",\n  \"mode\": {\n    \"conversation\": {\n      \"guest_voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\",\n      \"host_voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\n    },\n    \"type\": \"conversation\"\n  },\n  \"source\": {\n    \"type\": \"url\",\n    \"url\": \"https://en.wikipedia.org/wiki/Cognitive_science\"\n  }\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/studio/podcasts', [
  'body' => '{
  "model_id": "eleven_multilingual_v2",
  "mode": {
    "conversation": {
      "guest_voice_id": "bYTqZQo3Jz7LQtmGTgwi",
      "host_voice_id": "6lCwbsX1yVjD49QmpkTR"
    },
    "type": "conversation"
  },
  "source": {
    "type": "url",
    "url": "https://en.wikipedia.org/wiki/Cognitive_science"
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/studio/podcasts");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"model_id\": \"eleven_multilingual_v2\",\n  \"mode\": {\n    \"conversation\": {\n      \"guest_voice_id\": \"bYTqZQo3Jz7LQtmGTgwi\",\n      \"host_voice_id\": \"6lCwbsX1yVjD49QmpkTR\"\n    },\n    \"type\": \"conversation\"\n  },\n  \"source\": {\n    \"type\": \"url\",\n    \"url\": \"https://en.wikipedia.org/wiki/Cognitive_science\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "model_id": "eleven_multilingual_v2",
  "mode": [
    "conversation": [
      "guest_voice_id": "bYTqZQo3Jz7LQtmGTgwi",
      "host_voice_id": "6lCwbsX1yVjD49QmpkTR"
    ],
    "type": "conversation"
  ],
  "source": [
    "type": "url",
    "url": "https://en.wikipedia.org/wiki/Cognitive_science"
  ]
] as [String : Any]

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

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