Transcrire une vidéo depuis son URL, en une requête
Vous passez un lien, l’API s’occupe du reste : résolution de la source, extraction de l’audio, transcription, JSON horodaté. Aucun média ne transite par votre serveur.
# 1. Poster l'URL de la vidéo
curl -X POST https://api.techtuel.com/v1/transcriptions \
-H "Authorization: Bearer $TECHTUEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "source_url": "https://example.com/webinaire-produit" }'
# => 202 { "id": "job_7c1a", "status": "processing" }
# 2. Interroger le job jusqu'à completed
curl https://api.techtuel.com/v1/transcriptions/job_7c1a \
-H "Authorization: Bearer $TECHTUEL_API_KEY"{
"id": "job_7c1a",
"status": "completed",
"title": "Webinaire produit — sortie de la v3",
"language": "fr",
"minutes": 41,
"source_kind": "url",
"source_url": "https://example.com/webinaire-produit",
"created_at": "2026-07-21T09:30:00Z",
"transcript": "Merci à tous d’être présents…",
"segments": [
{ "start_seconds": 0, "text": "Merci à tous d’être présents" },
{ "start_seconds": 5.4, "text": "on va commencer par la roadmap" }
]
}Le coût caché de la transcription vidéo n’est presque jamais la transcription elle-même : c’est tout ce qui la précède. Télécharger la vidéo, gérer les redirections et les URLs signées, extraire la piste audio avec FFmpeg, la ré-encoder dans un format accepté, la stocker le temps du traitement, nettoyer derrière soi, et recommencer quand un binaire change de version. C’est un pipeline média complet que personne n’a envie de maintenir pour obtenir du texte.
Techtuel prend le lien à votre place. Vous faites un POST sur /v1/transcriptions avec un champ source_url, et l’API résout elle-même ce qu’il y a au bout : plateforme vidéo, page web contenant un lecteur, fichier vidéo direct. Elle en extrait l’audio, le transcrit et vous rend un job. Votre serveur n’a jamais à toucher un octet de média — ni bande passante sortante, ni disque temporaire, ni FFmpeg dans votre image Docker.
Le modèle est du REST classique, et c’est volontairement ennuyeux. POST /v1/transcribe renvoie la transcription dans la même réponse ; si le média est assez long pour dépasser la fenêtre d’attente, vous recevez un 202 avec un id et status: processing, et vous lisez GET /v1/transcriptions/{id} jusqu’à completed ou failed. L’enveloppe JSON est stable : id, status, title, language, minutes, source_kind, transcript et segments — chaque segment étant une paire start_seconds / text. Ajoutez ?format=txt, srt ou vtt si vous préférez une sortie déjà mise en forme.
Pourquoi cette API
Zéro pipeline média
Pas de yt-dlp, pas de FFmpeg, pas de bucket temporaire. La vidéo n’est jamais téléchargée chez vous : vous n’envoyez qu’une chaîne de caractères.
Un job REST prévisible
POST → 202 + id → GET jusqu’à completed. Pas de WebSocket, pas de SDK obligatoire : deux appels HTTP et un JSON typé.
Titre résolu automatiquement
Le champ title vous rend le nom réel de la vidéo, sans deuxième appel à une API de métadonnées. De quoi afficher une liste lisible tout de suite.
Tarifs lisibles
Questions fréquentes
Dois-je télécharger la vidéo avant d’appeler l’API ?+
Non. Vous envoyez l’URL dans le champ source_url et l’API va chercher le média elle-même. Aucun fichier ne transite par votre infrastructure.
Quelle est la différence entre source_url et audio_url ?+
source_url désigne une page ou une vidéo à résoudre (plateforme, page web, lien de partage). audio_url désigne un fichier audio directement téléchargeable. Les deux produisent le même job.
Combien de temps prend une transcription ?+
Cela dépend de la durée du média. Sur POST /v1/transcribe, un média court — ou une source déjà transcrite, servie depuis le cache — revient dans la réponse elle-même. Au-delà de la fenêtre d’attente, vous recevez un 202 avec un id de job : le traitement continue, et GET /v1/transcriptions/{id} renvoie completed avec le texte, ou failed avec un champ error.
Puis-je récupérer directement des sous-titres ?+
Oui. Le paramètre ?format=srt ou ?format=vtt sur la lecture du job renvoie un fichier de sous-titres prêt à l’emploi, construit à partir des segments.
Que se passe-t-il si l’URL est protégée ou hors ligne ?+
Le job passe en status failed avec un message dans le champ error. Vous pouvez le relancer via POST /v1/transcriptions/{id}/retry une fois la source à nouveau accessible.
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