# YouTube Transcript API que también funciona sin subtítulos

> Con YouTube Transcript API obtén JSON, TXT, SRT o VTT desde un enlace: usamos subtítulos o, si faltan, IA. 1 crédito por minuto.

Canonical: https://transcript1.com/es/features/youtube-transcript-api
Language: es
Last updated: 2026-10-19

Con YouTube Transcript API envías el enlace de un video y recibes su transcripción en JSON, texto, SRT o VTT. Primero buscamos subtítulos que puedas usar. Si no los hay, transcribimos el audio con IA.

- Primero subtítulos; si faltan, transcripción con IA
- 1 crédito por minuto en ambos casos
- Enlaces watch, youtu.be, Shorts y embed

## Elige de dónde tomará el texto tu aplicación

### El enlace que ya tienes

Aceptamos enlaces watch, youtu.be, Shorts, embed y live, con o sin www. Las distintas direcciones de un mismo video apuntan a la misma grabación.

### Los subtítulos del creador tienen prioridad

Con source=auto buscamos primero los subtítulos subidos por el creador y después los generados automáticamente. Nunca usamos pistas traducidas automáticamente.

### Sin subtítulos también hay transcripción

Si no encontramos una pista utilizable, transcribimos el audio. ¿Prefieres hacerlo siempre así? Envía source=stt, aunque el video tenga subtítulos.

### Sabes de dónde salió el texto

El campo transcript_source indica youtube_captions o speech_to_text. Tu aplicación puede distinguir una pista de YouTube de una transcripción nueva del audio.

### La misma tarifa con subtítulos o IA

Cada transcripción consume 1 crédito por minuto de video, redondeado hacia arriba. Si falla o la cancelas, no pagas.

## Envía el video desde tu código

Crea una clave de API en el panel y úsala desde tu servidor o script. Envía la URL por POST con Python o cualquier cliente HTTP. Con wait=60 esperamos hasta 60 segundos antes de responder. Los campos y códigos de respuesta están en la [referencia de creación](https://transcript1.com/es/docs/api-reference#create-a-transcription).

Guarda el ID en cuanto recibas la respuesta. Si la transcripción sigue en curso, consulta GET /v1/transcriptions/:id. Que termine la espera del request no significa que haya fallado: el trabajo continúa. No envíes otro POST para comprobarlo.

Tu código debe distinguir queued, fetching y transcribing de los estados finales. Cuando llegue completed, lee la transcripción; si llega failed, maneja el error. Un video inaccesible o una demora de red no deberían mostrarse como una transcripción vacía que supuestamente salió bien.

### cURL

```
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"youtube","url":"https://youtu.be/dQw4w9WgXcQ"}'
```

## Consulta transcript\_source antes de usar el texto

La respuesta indica si usamos subtítulos y si los subió el creador o los generó YouTube. billed_minutes muestra la duración redondeada hacia arriba. Puedes consultar todos los campos del [objeto de transcripción](https://transcript1.com/es/docs/api-reference#the-transcription-object).

Conserva transcript_source y caption_kind si necesitas registrar la procedencia. Los subtítulos del creador mantienen su redacción y no incluyen tiempos por palabra. Los generados automáticamente por YouTube sí incluyen el inicio de cada palabra. La transcripción con IA añade inicio, fin y confianza.

Cada segmento también tiene inicio y fin en segundos. Úsalos para saltar al pasaje citado, alinear notas con el reproductor o dar contexto a un asistente. Pide include=words solo si necesitas ese detalle. El JSON de abajo ilustra los campos; no reproduce las palabras del video del ejemplo.

### Respuesta JSON abreviada

```
{
  "id": "tr_8fK2Lm0PqRsTuVwXyZaBcD",
  "status": "completed",
  "transcript_source": "youtube_captions",
  "caption_kind": "auto_generated",
  "language": "en",
  "billed_minutes": 4,
  "transcript": {
    "text": "Welcome back to the channel. Today we are looking at how transcripts are made.",
    "segments": [
      { "start": 0, "end": 4.2, "speaker": null, "language": "en", "text": "Welcome back to the channel." }
    ]
  }
}
```

## Usa subtítulos o transcribe el audio con IA

source=auto es la opción predeterminada. Elige captions (solo subtítulos) si necesitas la pista publicada: si no existe una utilizable, recibes no_captions y no pagas. Con stt siempre transcribimos el audio. Consulta cómo combinar estas opciones en la [guía de fuentes](https://transcript1.com/es/docs/sources-and-options#source).

Para una transcripción nueva del audio o para identificar hablantes, usa speech-to-text. Si envías diarize=true con auto, omitimos los subtítulos. No puedes combinar diarize=true con captions: rechazamos el request en vez de ignorar una de las opciones.

La pista debe coincidir con el idioma que pediste; si dejaste el idioma en auto, buscamos el original del video. No usamos pistas traducidas automáticamente. Indicar un idioma para speech-to-text ayuda al reconocimiento, pero no traduce la grabación.

### Cuerpo del request para transcribir el audio

```
{
  "platform": "youtube",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "source": "stt"
}
```

## Revisa el error antes de volver a enviar el video

Un video privado, una restricción de edad o una transmisión que sigue en vivo requieren otra fuente. Reintentar el mismo enlace no cambia su acceso. Si recibes no_captions, decide si te sirve transcribir el audio. Si todavía se está procesando, consulta el ID que ya tienes. La [guía de errores](https://transcript1.com/es/docs/errors) te ayuda a decidir.

Cuando necesites repetir un request de creación por un problema de conexión, sigue el contrato de [Idempotency-Key](https://transcript1.com/es/docs/api-reference#idempotency). Reutilizar una transcripción reciente es otra opción: busca el mismo video con las mismas opciones. Que el texto esté en caché no implica que un trabajo nuevo sea gratis; leer una transcripción ya terminada sí consume cero minutos.

La misma API también acepta [videos de TikTok](https://transcript1.com/es/features/transcribir-tiktok), [Reels de Instagram](https://transcript1.com/es/features/transcribir-reel-de-instagram) y otras fuentes. YouTube, X, TikTok y Bluesky, por ejemplo, pueden aportar subtítulos antes de recurrir al audio. Consulta las combinaciones válidas en la [guía de fuentes y opciones](https://transcript1.com/es/docs/sources-and-options) antes de ofrecerlas en tu aplicación.

## Preguntas frecuentes

### ¿Funciona si el video no tiene subtítulos?

Sí. Con source=auto transcribimos el audio cuando no hay una pista utilizable. Si solo quieres extraer subtítulos de YouTube con API y prefieres que esos videos fallen, elige source=captions.

### ¿Qué enlaces de YouTube puedo enviar?

Enlaces watch, youtu.be, Shorts, embed y live. Una página de canal o un enlace que solo lleva a una playlist devuelve 422 invalid_url. El enlace debe identificar un video concreto.

### ¿Puedo transcribir un video privado?

No. Podemos obtener videos públicos o no listados, pero no videos privados, con restricción de edad o con una transmisión todavía en vivo. Si tienes el archivo de tu propia grabación, súbelo en su lugar.

### ¿Cuánto cuesta cada transcripción?

1 crédito por minuto de video, redondeado hacia arriba, tanto con subtítulos como con IA. Las cuentas nuevas reciben 60 minutos gratis una sola vez al verificar el correo, sin tarjeta.

### ¿Es el paquete de Python youtube-transcript-api?

No. transcript1 es una API REST alojada. Para usar esta API de transcripción de YouTube desde Python, envía un request HTTP con tu clave de API.

## También te puede servir

- [Marcas de tiempo y subtítulos](https://transcript1.com/es/features/crear-archivo-srt)
- [API de audio y video](https://transcript1.com/es/features/speech-to-text-api)
- [Webhooks](https://transcript1.com/es/features/webhook-transcripcion)
- [Reutilizar contenido](https://transcript1.com/es/use-cases/video-a-articulo-de-blog)
