Documentation API
Une API REST pour les transcriptions YouTube, la recherche et les métadonnées. Obtenez une clé API depuis votre tableau de bord — 100 crédits gratuits, sans carte requise.
Authentification
Transmettez votre clé API comme jeton porteur (bearer token), ou via x-api-key :
Authorization: Bearer sk_live_...
# or
x-api-key: sk_live_...URL de base
https://getyoutubetranscript.com/api/v1Crédits et offres
| Offre | Prix | Crédits/mois | Prix du complément | Limite de débit |
|---|---|---|---|---|
| Gratuit | 0 $/mois | 100 (unique) | — | 60 req/min |
| Mensuel | 5 $/mois | 1 000 | 2,50 $ / 1 000 | 200 req/min |
| Annuel | 4,50 $/mois (54 $/an) | 1 000 | 1,50 $ / 1 000 | 300 req/min |
| Starter | 19 $/mois | 7 500 | 1,50 $ / 1 000 | 300 req/min |
| Pro | 49 $/mois | 25 000 | 1,50 $ / 1 000 | 400 req/min |
| Scale | 99 $/mois | 60 000 | 1,50 $ / 1 000 | 600 req/min |
1 crédit = 1 requête réussie. Les requêtes échouées ne sont jamais facturées. Exemple : 10 requêtes de transcription dont 2 vidéos sans sous-titres coûtent 8 crédits, et relancer une vidéo en échec ne coûte rien tant qu'elle n'aboutit pas. Les crédits complémentaires expirent 30 jours après l'achat ou à la fin de votre période de facturation en cours, selon la date la plus tardive, et nécessitent un abonnement actif pour être dépensés.
Points d'accès
/transcript1 créditRécupère la transcription d'une vidéo YouTube, avec ses métadonnées (titre, chaîne, miniature). Renvoie aussi language_code et requested_language, caption_type (manual ou auto, null si inconnu) ainsi que cached / fetched_at.
| Paramètre | Obligatoire | Description |
|---|---|---|
v | Oui | ID de la vidéo ou URL YouTube complète |
language | Non | Code de langue (par défaut : en) |
timestamps | Non | Mettez true pour ajouter des horodatages par ligne (segments : start, duration, text en secondes). Désactivé par défaut. |
Requête
curl "https://getyoutubetranscript.com/api/v1/transcript?v=jNQXAC9IVRw" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"video_id": "jNQXAC9IVRw",
"language_code": "en",
"requested_language": "en",
"caption_type": "manual",
"title": "Me at the zoo",
"author_name": "jawed",
"author_url": "https://www.youtube.com/channel/UC4Qob...",
"thumbnail_url": "https://...",
"transcript": "All right, so here we are...",
"word_count": 39,
"cached": true,
"fetched_at": "2026-09-20T03:10:58.938Z"
}
}/transcript/languagesGratuitListe les langues de sous-titres d'une vidéo (manuelles et générées automatiquement) avant d'en récupérer une. default_language_code est ce que /transcript renvoie sans langue ; une vidéo sans sous-titres renvoie une liste vide.
| Paramètre | Obligatoire | Description |
|---|---|---|
v | Oui | ID de la vidéo ou URL YouTube complète |
Requête
curl "https://getyoutubetranscript.com/api/v1/transcript/languages?v=kJQP7kiw5Fk" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"video_id": "kJQP7kiw5Fk",
"default_language_code": "en",
"languages": [
{ "language_code": "en", "name": "English - en", "caption_type": "manual" },
{ "language_code": "es", "name": "Spanish", "caption_type": "manual" }
]
}
}/batch1 crédit / vidéo réussieMettez jusqu'à 100 vidéos en file en un seul appel. Renvoie immédiatement un batch_id et récupère les transcriptions en arrière-plan. Interrogez GET /batch ou passez webhook_url pour recevoir un POST signé (en-tête X-GYT-Signature) à la fin. Les vidéos en échec ne sont jamais facturées.
| Paramètre | Obligatoire | Description |
|---|---|---|
videos | Oui | Tableau d'ID ou d'URL de vidéos (1-100). Les doublons ne sont récupérés qu'une fois. |
language | Non | Code de langue pour toutes les vidéos (par défaut : en) |
timestamps | Non | true pour inclure les segments ligne par ligne dans les résultats |
webhook_url | Non | URL https publique notifiée à la fin du lot |
Idempotency-Key | Non | En-tête. Relancez la requête sans risque : la même clé renvoie le lot d'origine. |
Requête
curl -X POST "https://getyoutubetranscript.com/api/v1/batch" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"videos": ["jNQXAC9IVRw", "https://youtu.be/dQw4w9WgXcQ"],
"webhook_url": "https://example.com/hooks/transcripts"
}'Réponse
{
"success": true,
"data": {
"batch_id": "324eb615-e4d5-4b3c-b8e7-04235671066b",
"status": "queued",
"total": 2,
"succeeded": 0,
"failed": 0,
"pending": 2,
"results_url": "https://getyoutubetranscript.com/api/v1/batch?id=324eb615-...",
"webhook_secret": "whsec_..."
}
}/batchGratuitStatut du lot, compteurs et une page de résultats dans l'ordre d'envoi. Les éléments réussis ont les mêmes champs que /transcript ; les éléments en échec portent un error_code.
| Paramètre | Obligatoire | Description |
|---|---|---|
id | Oui | Le batch_id renvoyé par POST /batch |
offset | Non | Éléments à ignorer (par défaut : 0) |
limit | Non | Éléments par page, 1-50 (par défaut : 20) |
Requête
curl "https://getyoutubetranscript.com/api/v1/batch?id=324eb615-e4d5-4b3c-b8e7-04235671066b" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"batch_id": "324eb615-...",
"status": "completed",
"total": 2,
"succeeded": 1,
"failed": 1,
"credits_charged": 1,
"items": [
{ "position": 0, "status": "succeeded", "charged": true, "video_id": "jNQXAC9IVRw", "caption_type": "manual", "transcript": "All right, so here we are...", ... },
{ "position": 1, "status": "failed", "charged": false, "video_id": "dQw4w9WgXcQ", "error_code": "TRANSCRIPT_DISABLED" }
],
"next_offset": null
}
}/search1 crédit / pageRecherche des vidéos YouTube avec filtres et pagination.
| Paramètre | Obligatoire | Description |
|---|---|---|
q | Oui | Requête de recherche (2 caractères minimum) |
country | Non | Code pays à 2 lettres (par défaut : us) |
language | Non | Code de langue (par défaut : en) |
page_token | Non | Le continuation_token de la réponse précédente, pour récupérer la page suivante |
limit | Non | Nombre maximal de résultats (par défaut 20, max 50) |
Requête
curl "https://getyoutubetranscript.com/api/v1/search?q=lofi+beats" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"query": "lofi beats",
"video_results": [ { "title": "...", "videoId": "...", "channel": { "name": "..." } } ],
"continuation_token": "c_bKt9xQ2mVf7LpR0aZ3sWyA"
}
}/resolveGratuitRésout un handle, une URL ou un nom d'utilisateur de chaîne vers son véritable ID de chaîne. Une entrée déjà syntaxique (déjà un ID de chaîne ou une URL en contenant un) est résolue instantanément sans appel réseau ; un simple handle déclenche une véritable recherche.
| Paramètre | Obligatoire | Description |
|---|---|---|
handle | Oui | ID de chaîne, URL ou @handle |
Requête
curl "https://getyoutubetranscript.com/api/v1/resolve?handle=@mkbhd" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"channel_id": "UCBJycsmduvYEL83R_U4JriQ",
"title": "Marques Brownlee",
"handle": "http://www.youtube.com/@mkbhd",
"resolved_via": "scrape"
}
}/channel/latestGratuitInformations sur la chaîne (titre, abonnés, description, avatar) et les dernières vidéos de l'onglet d'accueil. Pour tout l'historique des mises en ligne, utilisez /channel/videos.
| Paramètre | Obligatoire | Description |
|---|---|---|
channel | Oui | @handle, URL ou ID de la chaîne |
Requête
curl "https://getyoutubetranscript.com/api/v1/channel/latest?channel=@mkbhd" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"channel": { "id": "UCBJycsmduvYEL83R_U4JriQ", "title": "Marques Brownlee", "subscribers": 1160000, "avatar": "https://..." },
"about": { "description": "...", "links": [] },
"videos_sections": [ ... ]
}
}/channel/videos1 crédit / pageToutes les vidéos publiées par une chaîne, des plus récentes aux plus anciennes, paginées.
| Paramètre | Obligatoire | Description |
|---|---|---|
channel | Oui | @handle, URL ou ID de la chaîne |
continuation | Non | continuation_token de la réponse précédente, pour obtenir la page suivante (à utiliser à la place des autres paramètres). Expire après 24 heures. |
Requête
curl "https://getyoutubetranscript.com/api/v1/channel/videos?channel=@mkbhd" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"videos": [ { "position": 1, "id": "...", "title": "...", "views": "6.2M", "published_time": "1d ago", "length": "10:47" } ],
"has_more": true,
"continuation_token": "c_pqHR9v13sqaqxlcKhA4MnA"
}
}/channel/search1 crédit / pageRecherche dans les vidéos d'une chaîne, paginée.
| Paramètre | Obligatoire | Description |
|---|---|---|
channel | Oui | @handle, URL ou ID de la chaîne |
q | Oui | Requête de recherche (2 caractères minimum) |
continuation | Non | continuation_token de la réponse précédente, pour obtenir la page suivante (à utiliser à la place des autres paramètres). Expire après 24 heures. |
Requête
curl "https://getyoutubetranscript.com/api/v1/channel/search?channel=@mkbhd&q=iphone" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"videos": [ { "position": 1, "id": "...", "title": "...", "published_time": "3w ago", "length": "17:14", "channel": { "name": "Marques Brownlee" } } ],
"has_more": true,
"continuation_token": "c_pnm10M6orzLgOTVWJk2oww"
}
}/playlist1 crédit / pageToutes les vidéos d'une playlist, paginées. continuation_token vaut null sur la dernière page.
| Paramètre | Obligatoire | Description |
|---|---|---|
list | Oui | ID ou URL de la playlist |
continuation | Non | continuation_token de la réponse précédente, pour obtenir la page suivante (à utiliser à la place des autres paramètres). Expire après 24 heures. |
Requête
curl "https://getyoutubetranscript.com/api/v1/playlist?list=PLxxx" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"playlist_id": "PLxxx",
"title": "...",
"videos": [ { "position": 1, "id": "...", "title": "...", "channel": { "name": "..." } } ],
"has_more": true,
"continuation_token": "c_DfE9mQx2Ln8TbW4kJ1pZsA"
}
}/creditsGratuitConsultez le solde de crédits restant pour cette clé avant de le dépenser - les mêmes données que renvoie l'outil MCP get_credits.
| Paramètre | Obligatoire | Description |
|---|
Requête
curl "https://getyoutubetranscript.com/api/v1/credits" \
-H "Authorization: Bearer sk_live_..."Réponse
{
"success": true,
"data": {
"plan_credits_left": 87,
"topup_credits_left": 0,
"plan": "monthly",
"rate_limit_per_minute": 200
}
}Erreurs
Les erreurs renvoient un corps JSON avec un champ code stable pour vos branchements conditionnels, en plus du statut HTTP :
| Statut | Code | Signification |
|---|---|---|
| 400 | BAD_REQUEST | Paramètre manquant ou invalide |
| 400 | CURSOR_EXPIRED | Curseur de page expiré (après 24 heures) – recommencez à la première page |
| 401 | MISSING_API_KEY / INVALID_API_KEY | Aucune clé fournie, ou clé invalide/révoquée |
| 402 | PAYMENT_REQUIRED | Plus de crédits - achetez un complément ou passez à une offre supérieure |
| 404 | VIDEO_UNAVAILABLE / TRANSCRIPT_NOT_FOUND | Vidéo ou ressource introuvable |
| 429 | RATE_LIMITED | Trop de requêtes pour votre offre |
| 503 | UPSTREAM_UNAVAILABLE | Problème temporaire en amont - nouvelle tentative sans risque |
| 504 | UPSTREAM_TIMEOUT | Le service a mis plus de 25 secondes – non facturé, vous pouvez réessayer |
Utiliser cette API avec un outil IA
Vous préférez laisser Claude (ou un autre outil IA de codage) appeler cette API à votre place plutôt que d'écrire les requêtes à la main ? Téléchargez le skill YouTube Transcript - un Claude Skill prêt à l'emploi qui lui apprend à récupérer des transcriptions, effectuer des recherches, et plus encore.
L'utiliser dans Zapier
Sans code : notre app Zapier récupère une transcription, cherche sur YouTube ou liste les vidéos d'une chaîne dans n'importe quel Zap. Connectez-la avec la même clé API ; chaque action coûte les mêmes crédits que l'appel API.