API de transcription vidéo et de notes
Envoyez un fichier audio ou vidéo depuis votre serveur et recevez une transcription horodatée, des notes IA et des fichiers prêts à télécharger. L’API utilise le même traitement que le site web et l’extension Chrome.
- URL de base
https://api.video-to-notes.com- Authentification
- Clé API comme jeton Bearer
- Format
- JSON sur HTTPS ; les fichiers vont directement dans le stockage via des URL signées
- Accès
- Inclus dans les formules Basic et Plus actives ; utilise les heures de votre formule
Démarrage rapide
Ces étapes mènent un fichier de votre disque jusqu’à une transcription et des notes. Il vous faut une formule Basic ou Plus active, un terminal et, pour le client d’exemple, Python 3.12 ou plus récent.
1. Créer une clé API
Connectez-vous sur le site (par exemple sur la page des tarifs), ouvrez Clés API dans la barre du compte, nommez la clé et, si vous le souhaitez, fixez une date d’expiration. Copiez le secret dès qu’il apparaît : il n’est affiché qu’une fois. Jusqu’à trois clés peuvent être actives en même temps.
2. Stocker la clé dans une variable d’environnement
Gardez la clé hors du code source, des arguments de ligne de commande et des journaux. Les exemples lisent la clé dans VTN_API_KEY et l’URL de base dans VTN_API_BASE.
export VTN_API_BASE="https://api.video-to-notes.com"
read -rs VTN_API_KEY && export VTN_API_KEY # paste the key, press Enter$env:VTN_API_BASE = "https://api.video-to-notes.com"
$env:VTN_API_KEY = Read-Host "API key" -MaskInput3. Vérifier votre compte
Cet appel confirme que la clé fonctionne et renvoie votre formule, les secondes restantes de votre formule, les formats pris en charge et les limites actuelles.
# Sends the key through stdin, so it never appears in the process list.
vtn() {
printf 'header = "Authorization: Bearer %s"\n' "$VTN_API_KEY" |
curl -s --config - "$@"
}
vtn "$VTN_API_BASE/api/v1/account"$headers = @{ Authorization = "Bearer $env:VTN_API_KEY" }
Invoke-RestMethod "$env:VTN_API_BASE/api/v1/account" -Headers $headers |
ConvertTo-Json -Depth 54. Transcrire un fichier
Téléchargez le client Python d’exemple. Il n’a besoin que de la bibliothèque standard. Il envoie le fichier en plusieurs parties, lance la tâche, attend sa fin et enregistre chaque page de résultats.
python client.py run meeting.mp4 --state meeting.state.json \
--output meeting.jsonl --download meeting-filesPour ne traiter qu’une partie d’un enregistrement, ajoutez --start et --end en secondes depuis le début du fichier. --audio-language donne une indication de langue et --notes-language choisit la langue des notes. Sans ces options, tout le fichier est traité et les langues sont détectées automatiquement.
python client.py run lecture.webm --state lecture.state.json \
--start 30 --end 3630 --audio-language ru --notes-language enLe fichier d’état conserve l’ID d’envoi et l’identité de la requête, jamais la clé. Si la commande s’arrête, relancez-la avec le même fichier d’état : elle retrouve la même tâche et rien ne vous est facturé deux fois. Utilisez un nouveau fichier d’état pour chaque nouvelle tâche.
5. Lire les résultats
meeting.jsonl contient une page de résultats JSON par ligne : texte de transcription avec horodatage, notes en Markdown, lacunes et avertissements. meeting-files contient les téléchargements, comme la transcription en TXT et les notes en Markdown, HTML et PDF. Le client propose aussi ces commandes :
python client.py account
python client.py status JOB_ID
python client.py result JOB_ID --output results.jsonl --download files
python client.py cancel JOB_ID
python client.py resume JOB_IDVous préférez curl ? Le démarrage rapide Bash exécute les mêmes étapes d’envoi, de tâche et de résultat avec curl et jq.
bash quickstart.sh meeting.mp4Fonctionnement d’une tâche
Toute intégration suit les mêmes six étapes. La référence de l’API montre chaque appel avec un exemple de requête et de réponse.
- Vérifier le compte.
GET /api/v1/accountrenvoie votre formule, les secondes restantes, les formats pris en charge et les limites. - Créer un envoi.
POST /api/v1/uploadsavec la taille du fichier en octets et son extension. La réponse indique la taille des parties et leur nombre. - Envoyer les parties. Obtenez des URL signées avec
POST /api/v1/uploads/{upload_id}/parts, envoyez chaque partie par HTTPPUTdirectement dans le stockage, conservez chaqueETag, puis appelezPOST /api/v1/uploads/{upload_id}/complete. - Lancer la tâche.
POST /api/v1/jobsavec l’ID d’envoi et un en-têteIdempotency-Key. Le serveur vérifie le fichier réel, planifie le travail et réserve le temps sur votre formule. - Suivre l’état.
GET /api/v1/jobs/{job_id}jusqu’à ce que l’état soit final, en attendant au moinspoll_after_secondsentre deux appels. - Lire le résultat.
GET /api/v1/jobs/{job_id}/result, puis suiveznext_cursorjusqu’à ce qu’il soit null. Téléchargez les fichiers listés dansartifactsavant l’expiration de leurs liens.
Une tâche se termine en completed, completed_with_gaps, interrupted, cancelled, failed ou expired. charged_seconds indique ce que la tâche a utilisé de votre formule.
Bonnes pratiques
Ces habitudes protègent vos clés, évitent les doubles facturations et fiabilisent les longues tâches.
Garder les clés secrètes
- N’appelez l’API que depuis un serveur ou un script que vous contrôlez. Ne mettez jamais une clé dans du code de navigateur, une application mobile, une URL ou un dépôt de code.
- Chargez la clé depuis une variable d’environnement ou un gestionnaire de secrets, et gardez-la hors des journaux, des rapports d’erreur et des arguments de ligne de commande.
- Utilisez une clé par intégration avec une date d’expiration, pour pouvoir remplacer ou révoquer une clé sans toucher aux autres.
- Pour remplacer une clé, créez la nouvelle, déployez-la, puis révoquez l’ancienne. Les tâches déjà lancées continuent.
- Si une clé a pu fuiter, par exemple dans une discussion, un ticket ou un commit, révoquez-la immédiatement dans le panneau Clés API.
Rendre la création de tâche sûre à répéter
- Générez une
Idempotency-Keyaléatoire, par exemple un UUID, pour chaque nouvelle tâche et enregistrez-la avec l’ID d’envoi avant d’envoyer la requête. - Si la réponse est perdue, renvoyez la même requête avec la même clé. Vous récupérez la tâche d’origine et rien n’est facturé deux fois.
- Ne réutilisez jamais une clé pour un autre fichier ou d’autres options : l’API répond 409
IDEMPOTENCY_CONFLICT.
Interroger avec mesure et gérer les limites
- Attendez au moins cinq secondes entre deux appels d’état, et plus longtemps si
poll_after_secondsle demande. - En cas de 429 ou 503, attendez l’en-tête
Retry-Afterouerror.retry_after_seconds, puis réessayez avec un léger délai aléatoire. - Ne répétez une requête à l’identique que si
error.retryablevaut true. Sinon, corrigez d’abord la requête. - Un compte exécute un envoi et une tâche à la fois. Mettez vos fichiers en file d’attente et envoyez le suivant quand la tâche en cours est terminée.
Maîtriser les heures utilisées
- Vérifiez
remaining_secondsavant d’envoyer un fichier. Une tâche qui demande plus de temps que vous n’en avez échoue avecINSUFFICIENT_BALANCE; l’API ne raccourcit jamais votre sélection pour la faire tenir. - Envoyez un
rangelorsque vous n’avez besoin que d’une partie d’un enregistrement. Seul l’audio sélectionné est facturé. - Annulez les tâches dont vous n’avez plus besoin. Les parties terminées restent disponibles et le temps réservé non utilisé est restitué.
- Abandonnez les envois que vous n’utiliserez pas, pour que l’envoi suivant puisse démarrer.
Récupérer des résultats complets
- Suivez
next_cursorjusqu’à ce qu’il soit null. Une page contient au plus 32 éléments. - Traitez les éléments
gapcomme de l’audio qui n’a pas pu être traité, pas comme du silence, et vérifiez leswarnings. - Téléchargez les fichiers de
artifactstant que leurs liens sont valides (jusqu’à dix minutes) ; redemandez la page pour obtenir de nouveaux liens. - Enregistrez ce dont vous avez besoin : les fichiers de résultats sont conservés environ 24 heures et la récupération de la transcription environ 48 heures.
- Lisez les champs dont vous avez besoin et ignorez les autres.
Questions fréquentes
Qui peut utiliser l’API ?
Toute personne ayant une formule Basic ou Plus active. L’accès à l’API est inclus dans les deux formules, sans supplément. Sans formule active, les nouvelles tâches sont refusées avec PLAN_REQUIRED. Voir les formules et tarifs.
Comment l’utilisation de l’API est-elle comptée ?
Les tâches API utilisent les mêmes heures que le site web et l’extension Chrome. Le serveur mesure la durée réelle de l’audio sélectionné ; charged_seconds dans l’état de la tâche et dans chaque page de résultats indique le montant exact. Pour une tâche avec des lacunes impossibles à récupérer, les conditions d’utilisation expliquent comment l’audio manquant est facturé.
Quels formats et quelles tailles de fichier sont pris en charge ?
Vidéo : MP4, M4V, MOV, WebM, MKV, OGV, AVI, WMV, ASF, FLV, MPG, MPEG, VOB, TS, MTS, M2TS, 3GP, 3G2 et MXF. Audio : MP3, M4A, AAC, WAV, FLAC, OGG, OGA, OPUS, WMA, AMR, AIFF, AIF, CAF et AC3. Un fichier peut atteindre 8 Gio. Il doit contenir une piste audio décodable ; les fichiers protégés contre la copie ne peuvent pas être lus.
Quelles langues puis-je utiliser ?
La détection automatique est utilisée par défaut. Vous pouvez aussi indiquer la langue de l’audio ou choisir la langue des notes avec l’un des plus de 60 codes de langue, par exemple en, de, es, fr, ja ou zh. L’appel du compte liste toutes les valeurs acceptées actuellement.
Combien de temps dure une tâche ?
Cela dépend de la durée de l’audio sélectionné et de la charge du moment. Les tâches s’exécutent en arrière-plan : vous pouvez envoyer un long enregistrement et revenir plus tard. completed_units et total_units dans l’état de la tâche indiquent la progression.
Puis-je appeler l’API depuis un navigateur ou une application mobile ?
Non. Une clé API donne accès aux heures de votre formule ; elle doit donc rester sur un serveur que vous contrôlez. Pour une application web ou mobile, envoyez les fichiers à votre propre backend et appelez l’API depuis celui-ci.
Puis-je envoyer un lien YouTube ou une autre URL ?
Non. L’API traite les fichiers que vous envoyez ; elle ne télécharge ni URL ni vidéos YouTube.
Y a-t-il des webhooks ou des notifications par e-mail ?
Non. Interrogez l’état de la tâche en respectant poll_after_seconds. Les tâches API n’envoient pas d’e-mail.
Que se passe-t-il si ma connexion est coupée ?
Si l’envoi d’une partie échoue, demandez une nouvelle URL signée pour cette partie et renvoyez-la avant l’expiration de l’envoi. Si la réponse à la création de la tâche est perdue, répétez la requête avec la même Idempotency-Key : vous récupérez la même tâche. Une tâche en cours ne dépend pas de votre connexion.
Combien de temps les résultats sont-ils conservés ?
Les pages de résultats et les fichiers à télécharger sont conservés environ 24 heures après la fin de la tâche, et la transcription peut être récupérée pendant environ 48 heures. Chaque réponse donne l’heure exacte dans expires_at ; enregistrez donc ce dont vous avez besoin avant.
Que se passe-t-il si je révoque une clé ou si ma formule prend fin ?
Révoquer une clé n’arrête pas les tâches déjà lancées ; lisez leurs résultats avec une autre clé. Quand votre formule prend fin, une clé valide peut encore lire l’état et les résultats et annuler des tâches jusqu’à l’expiration du contenu, mais les nouveaux envois, les nouvelles tâches et la reprise exigent une formule active.
Que deviennent mes fichiers envoyés ?
Nous visons la suppression des fichiers source importés dans les 24 heures suivant leur envoi. La suppression peut prendre plus de temps. La politique de confidentialité explique ce qui est conservé et pendant combien de temps.
Existe-t-il un SDK ou un fichier OpenAPI ?
Il n’existe pas de paquet SDK. Utilisez le fichier OpenAPI 3.1 pour générer un client ou importer l’API dans un outil comme Postman ou Insomnia, ou partez des exemples Python et curl.
Quelles sont les limites de débit ?
Un compte exécute un envoi et une tâche à la fois, peut lancer jusqu’à 10 envois totalisant 20 Gio par jour UTC, créer 12 tâches par minute et envoyer 60 autres requêtes par minute avec l’ensemble de ses clés. L’appel du compte renvoie les valeurs qui s’appliquent à vous.
Fichiers et exemples
Les exemples et les fichiers de contrat sont publiés avec le site et correspondent à l’API en production.
- client.py : client d’exemple Python 3.12+, bibliothèque standard uniquement
- quickstart.sh : exemple Bash avec curl et jq
- openapi.json : description OpenAPI 3.1 de chaque point de terminaison, avec exemples
- paid-api.schema.json : JSON Schema de chaque requête et réponse
Aide
Quelque chose n’est pas clair ou ne fonctionne pas ? Contactez-nous en indiquant le request_id de la réponse d’erreur, l’heure et le point de terminaison. Ne nous envoyez jamais votre clé API.