YouTube transcript API

Le transcript d’une vidéo YouTube, par API

Une URL YouTube en entrée, du texte horodaté en sortie. Les sous-titres existants quand il y en a — facturés comme une vidéo — et une vraie transcription audio quand il n’y en a pas.

requête
# 1. Créer le job depuis une URL YouTube
curl -X POST https://api.techtuel.com/v1/transcriptions \
  -H "Authorization: Bearer $TECHTUEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "source_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }'
# => 202 { "id": "job_abc123", "status": "processing", "source_kind": "url" }

# 2. Récupérer le transcript (ou ?format=srt pour des sous-titres)
curl "https://api.techtuel.com/v1/transcriptions/job_abc123?format=json" \
  -H "Authorization: Bearer $TECHTUEL_API_KEY"
réponse
{
  "id": "job_abc123",
  "status": "completed",
  "title": "Rick Astley — Never Gonna Give You Up",
  "language": "en",
  "detected_language": "en",
  "translated": false,
  "minutes": 3.6,
  "source_kind": "url",
  "source_url": "https://youtu.be/dQw4w9WgXcQ",
  "transcript": "We're no strangers to love…",
  "segments": [
    { "start_seconds": 0, "text": "We're no strangers to love" },
    { "start_seconds": 3.8, "text": "You know the rules and so do I" }
  ]
}

Derrière « YouTube transcript API » se cachent deux besoins très différents. Le premier : récupérer les sous-titres que YouTube héberge déjà, ceux qu’on lit dans le panneau « Transcription ». Le second : obtenir le texte d’une vidéo qui n’a aucun sous-titre, ce qui suppose de télécharger l’audio et de le passer à un moteur de reconnaissance vocale. La plupart des outils ne font que l’un des deux, et vous découvrez lequel le jour où votre pipeline renvoie une liste vide.

Techtuel fait les deux derrière le même endpoint. À la réception d’une URL YouTube, l’API cherche d’abord les sous-titres : s’ils existent, elle les récupère, les normalise en segments et facture la vidéo comme une unité « vidéo » — 1 crédit, quelle que soit sa durée. S’ils manquent, elle bascule automatiquement sur l’audio et le transcrit, facturé aux minutes réelles. Votre code n’a pas de branche à écrire : il poste une URL et lit un job.

Le job suit le cycle habituel : POST /v1/transcriptions répond 202 avec un id et le statut processing, puis un GET sur ce job renvoie status, title (le titre de la vidéo résolu automatiquement), language, minutes, transcript et segments. Ajoutez ?format=srt ou ?format=vtt pour obtenir directement un fichier de sous-titres, ou ?format=txt pour du texte nu. Le résultat est mis en cache : réinterroger une vidéo publique déjà traitée ne consomme pas de crédit.

Pourquoi cette API

Sous-titres d’abord, audio ensuite

Les captions existantes sont récupérées en priorité (1 crédit par vidéo). Sans captions, l’API transcrit l’audio automatiquement — vous n’écrivez pas ce fallback.

Une seule forme de réponse

Captions ou transcription, le job renvoie toujours transcript, segments[start_seconds, text], language et title. Aucun format YouTube à parser.

Traduction intégrée

preferred_language demande le transcript dans une autre langue. La réponse expose detected_language et translated pour savoir ce que vous avez réellement reçu.

Tarifs lisibles

Gratuit100 crédits/mois, soit 100 vidéos sous-titrées
Pro2000 crédits/mois, idéal pour un catalogue entier

Questions fréquentes

L’API récupère-t-elle les sous-titres ou transcrit-elle l’audio ?+

Les deux, dans cet ordre. Si la vidéo a des sous-titres, ils sont récupérés et facturés comme une seule vidéo (1 crédit). Sinon, l’audio est téléchargé et transcrit, facturé aux minutes.

Que se passe-t-il pour une vidéo sans aucun sous-titre ?+

Rien de particulier de votre côté : le job passe par la transcription audio et renvoie exactement la même structure. Vous n’avez pas à détecter l’absence de captions ni à relancer avec un autre outil.

Quels paramètres accepte la requête ?+

Le corps du POST accepte source_url (l’URL YouTube) et preferred_language (code ISO 639-1) pour demander une traduction. À la lecture, ?format=txt|json|srt|vtt choisit la sortie.

Les timestamps sont-ils disponibles ?+

Oui. Chaque segment porte un start_seconds en secondes et son texte. C’est ce qui permet de générer du SRT/VTT ou de faire pointer une citation vers le bon instant de la vidéo.

Comment sont signalées les erreurs ?+

Une vidéo indisponible ou privée fait passer le job en status failed avec un champ error explicite. Un refus de quota ou de paiement renvoie un 402 avec reason quota_exceeded ou payment_failed.

Autres façons d'intégrer l'API

Essai gratuit, sans carte bancaire

Générez une clé API et transcrivez votre première source en moins d'une minute. Quota mensuel gratuit pour tester en conditions réelles.

Commencer avec l'API