{
  "schemaVersion": "1.0",
  "item": {
    "slug": "youtube-transcript-api",
    "name": "Youtube Transcript Api",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/volodstaimi/youtube-transcript-api",
    "canonicalUrl": "https://clawhub.ai/volodstaimi/youtube-transcript-api",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/youtube-transcript-api",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=youtube-transcript-api",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/youtube-transcript-api"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/youtube-transcript-api",
    "agentPageUrl": "https://openagent3.xyz/skills/youtube-transcript-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/youtube-transcript-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/youtube-transcript-api/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "YouTube Transcript API Skill",
        "body": "Use this skill when the user wants to extract transcripts from YouTube videos, transcribe videos without captions, translate video content, or process multiple videos in batch."
      },
      {
        "title": "When to Use",
        "body": "User asks to get a transcript/subtitles/captions from a YouTube video\nUser wants to transcribe a YouTube video that has no captions (ASR)\nUser wants to translate a YouTube video transcript to another language\nUser needs to process multiple YouTube videos at once\nUser wants to build an AI/LLM pipeline that uses YouTube video content\nUser wants to repurpose video content into text (blog posts, summaries, etc.)"
      },
      {
        "title": "API Overview",
        "body": "Base URL: https://youtubetranscript.dev/api/v2\n\nAuthentication: Bearer token via Authorization: Bearer YOUR_API_KEY\n\nUsers can get a free API key at youtubetranscript.dev."
      },
      {
        "title": "Endpoints",
        "body": "MethodEndpointDescriptionPOST/api/v2/transcribeExtract transcript from a single videoPOST/api/v2/batchExtract transcripts from up to 100 videosGET/api/v2/jobs/{job_id}Check status of an ASR jobGET/api/v2/batch/{batch_id}Check status of a batch request"
      },
      {
        "title": "Request Fields",
        "body": "FieldRequiredDescriptionvideoYes (single)YouTube URL or 11-character video IDvideo_idsYes (batch)Array of IDs or URLs (up to 100)languageNoISO 639-1 code (e.g., \"es\", \"fr\"). Omit for best availablesourceNoauto (default), manual, or asrformatNotimestamp, paragraphs, or wordswebhook_urlNoURL for async delivery (required for source=\"asr\")"
      },
      {
        "title": "Credit Costs",
        "body": "MethodCostSpeedNative Captions1 credit5–10 secondsTranslation1 credit per 2,500 chars5–10 secondsASR (Audio)1 credit per 90 seconds2–20 minutes (async)"
      },
      {
        "title": "Basic Transcript Extraction (Python)",
        "body": "import requests\n\nAPI_KEY = \"your_api_key\"\n\nresponse = requests.post(\n    \"https://youtubetranscript.dev/api/v2/transcribe\",\n    headers={\n        \"Authorization\": f\"Bearer {API_KEY}\",\n        \"Content-Type\": \"application/json\",\n    },\n    json={\"video\": \"dQw4w9WgXcQ\"}\n)\n\ndata = response.json()\nfor segment in data[\"data\"][\"transcript\"]:\n    print(f\"[{segment['start']:.1f}s] {segment['text']}\")"
      },
      {
        "title": "Basic Transcript Extraction (JavaScript/Node.js)",
        "body": "const response = await fetch(\"https://youtubetranscript.dev/api/v2/transcribe\", {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${API_KEY}`,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({ video: \"dQw4w9WgXcQ\" }),\n});\n\nconst { data } = await response.json();\nconsole.log(data.transcript);"
      },
      {
        "title": "Using the Node.js SDK",
        "body": "npm install youtube-audio-transcript-api\n\nimport { YouTubeTranscript } from \"youtube-audio-transcript-api\";\n\nconst yt = new YouTubeTranscript({ apiKey: \"your_api_key\" });\n\n// Simple extraction\nconst result = await yt.getTranscript(\"dQw4w9WgXcQ\");\n\n// With translation\nconst translated = await yt.transcribe({\n  video: \"dQw4w9WgXcQ\",\n  language: \"es\",\n});\n\n// Batch (up to 100 videos)\nconst batch = await yt.batch({\n  video_ids: [\"dQw4w9WgXcQ\", \"jNQXAC9IVRw\", \"9bZkp7q19f0\"],\n});"
      },
      {
        "title": "Basic Transcript Extraction (cURL)",
        "body": "curl -X POST https://youtubetranscript.dev/api/v2/transcribe \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video\": \"dQw4w9WgXcQ\"}'"
      },
      {
        "title": "Batch Processing (up to 100 videos)",
        "body": "curl -X POST https://youtubetranscript.dev/api/v2/batch \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video_ids\": [\"dQw4w9WgXcQ\", \"jNQXAC9IVRw\", \"9bZkp7q19f0\"]}'"
      },
      {
        "title": "Translation",
        "body": "Add \"language\": \"es\" (or any ISO 639-1 code) to get the transcript translated:\n\ncurl -X POST https://youtubetranscript.dev/api/v2/transcribe \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video\": \"dQw4w9WgXcQ\", \"language\": \"es\"}'"
      },
      {
        "title": "ASR Transcription (videos without captions)",
        "body": "For videos that don't have captions, use ASR with a webhook:\n\ncurl -X POST https://youtubetranscript.dev/api/v2/transcribe \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video\": \"VIDEO_ID\", \"source\": \"asr\", \"webhook_url\": \"https://yoursite.com/webhook\"}'\n\nThis returns immediately with status: \"processing\". Results are delivered to the webhook URL when ready. Poll with GET /api/v2/jobs/{job_id} if not using webhooks."
      },
      {
        "title": "Error Handling",
        "body": "HTTP StatusError CodeDescription400invalid_requestInvalid JSON or missing required fields401invalid_api_keyMissing or invalid API key402payment_requiredInsufficient credits404no_captionsNo captions available and ASR not used429rate_limit_exceededToo many requests — check Retry-After header"
      },
      {
        "title": "Important Notes",
        "body": "Always ask the user for their API key if they haven't provided one. Free keys are available at youtubetranscript.dev.\nOmitting the language parameter returns the best available transcript without translation (saves credits).\nASR is async — always use a webhook URL or poll the jobs endpoint.\nBatch endpoint accepts both YouTube URLs and 11-character video IDs.\nRe-fetching an already-owned transcript costs 0 credits."
      },
      {
        "title": "Resources",
        "body": "Website\nFull API Docs & OpenAPI Spec\nnpm SDK\nPricing"
      }
    ],
    "body": "YouTube Transcript API Skill\n\nUse this skill when the user wants to extract transcripts from YouTube videos, transcribe videos without captions, translate video content, or process multiple videos in batch.\n\nWhen to Use\nUser asks to get a transcript/subtitles/captions from a YouTube video\nUser wants to transcribe a YouTube video that has no captions (ASR)\nUser wants to translate a YouTube video transcript to another language\nUser needs to process multiple YouTube videos at once\nUser wants to build an AI/LLM pipeline that uses YouTube video content\nUser wants to repurpose video content into text (blog posts, summaries, etc.)\nAPI Overview\n\nBase URL: https://youtubetranscript.dev/api/v2\n\nAuthentication: Bearer token via Authorization: Bearer YOUR_API_KEY\n\nUsers can get a free API key at youtubetranscript.dev.\n\nEndpoints\nMethod\tEndpoint\tDescription\nPOST\t/api/v2/transcribe\tExtract transcript from a single video\nPOST\t/api/v2/batch\tExtract transcripts from up to 100 videos\nGET\t/api/v2/jobs/{job_id}\tCheck status of an ASR job\nGET\t/api/v2/batch/{batch_id}\tCheck status of a batch request\nRequest Fields\nField\tRequired\tDescription\nvideo\tYes (single)\tYouTube URL or 11-character video ID\nvideo_ids\tYes (batch)\tArray of IDs or URLs (up to 100)\nlanguage\tNo\tISO 639-1 code (e.g., \"es\", \"fr\"). Omit for best available\nsource\tNo\tauto (default), manual, or asr\nformat\tNo\ttimestamp, paragraphs, or words\nwebhook_url\tNo\tURL for async delivery (required for source=\"asr\")\nCredit Costs\nMethod\tCost\tSpeed\nNative Captions\t1 credit\t5–10 seconds\nTranslation\t1 credit per 2,500 chars\t5–10 seconds\nASR (Audio)\t1 credit per 90 seconds\t2–20 minutes (async)\nExamples\nBasic Transcript Extraction (Python)\nimport requests\n\nAPI_KEY = \"your_api_key\"\n\nresponse = requests.post(\n    \"https://youtubetranscript.dev/api/v2/transcribe\",\n    headers={\n        \"Authorization\": f\"Bearer {API_KEY}\",\n        \"Content-Type\": \"application/json\",\n    },\n    json={\"video\": \"dQw4w9WgXcQ\"}\n)\n\ndata = response.json()\nfor segment in data[\"data\"][\"transcript\"]:\n    print(f\"[{segment['start']:.1f}s] {segment['text']}\")\n\nBasic Transcript Extraction (JavaScript/Node.js)\nconst response = await fetch(\"https://youtubetranscript.dev/api/v2/transcribe\", {\n  method: \"POST\",\n  headers: {\n    Authorization: `Bearer ${API_KEY}`,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({ video: \"dQw4w9WgXcQ\" }),\n});\n\nconst { data } = await response.json();\nconsole.log(data.transcript);\n\nUsing the Node.js SDK\nnpm install youtube-audio-transcript-api\n\nimport { YouTubeTranscript } from \"youtube-audio-transcript-api\";\n\nconst yt = new YouTubeTranscript({ apiKey: \"your_api_key\" });\n\n// Simple extraction\nconst result = await yt.getTranscript(\"dQw4w9WgXcQ\");\n\n// With translation\nconst translated = await yt.transcribe({\n  video: \"dQw4w9WgXcQ\",\n  language: \"es\",\n});\n\n// Batch (up to 100 videos)\nconst batch = await yt.batch({\n  video_ids: [\"dQw4w9WgXcQ\", \"jNQXAC9IVRw\", \"9bZkp7q19f0\"],\n});\n\nBasic Transcript Extraction (cURL)\ncurl -X POST https://youtubetranscript.dev/api/v2/transcribe \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video\": \"dQw4w9WgXcQ\"}'\n\nBatch Processing (up to 100 videos)\ncurl -X POST https://youtubetranscript.dev/api/v2/batch \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video_ids\": [\"dQw4w9WgXcQ\", \"jNQXAC9IVRw\", \"9bZkp7q19f0\"]}'\n\nTranslation\n\nAdd \"language\": \"es\" (or any ISO 639-1 code) to get the transcript translated:\n\ncurl -X POST https://youtubetranscript.dev/api/v2/transcribe \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video\": \"dQw4w9WgXcQ\", \"language\": \"es\"}'\n\nASR Transcription (videos without captions)\n\nFor videos that don't have captions, use ASR with a webhook:\n\ncurl -X POST https://youtubetranscript.dev/api/v2/transcribe \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"video\": \"VIDEO_ID\", \"source\": \"asr\", \"webhook_url\": \"https://yoursite.com/webhook\"}'\n\n\nThis returns immediately with status: \"processing\". Results are delivered to the webhook URL when ready. Poll with GET /api/v2/jobs/{job_id} if not using webhooks.\n\nError Handling\nHTTP Status\tError Code\tDescription\n400\tinvalid_request\tInvalid JSON or missing required fields\n401\tinvalid_api_key\tMissing or invalid API key\n402\tpayment_required\tInsufficient credits\n404\tno_captions\tNo captions available and ASR not used\n429\trate_limit_exceeded\tToo many requests — check Retry-After header\nImportant Notes\nAlways ask the user for their API key if they haven't provided one. Free keys are available at youtubetranscript.dev.\nOmitting the language parameter returns the best available transcript without translation (saves credits).\nASR is async — always use a webhook URL or poll the jobs endpoint.\nBatch endpoint accepts both YouTube URLs and 11-character video IDs.\nRe-fetching an already-owned transcript costs 0 credits.\nResources\nWebsite\nFull API Docs & OpenAPI Spec\nnpm SDK\nPricing"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/volodstaimi/youtube-transcript-api",
    "publisherUrl": "https://clawhub.ai/volodstaimi/youtube-transcript-api",
    "owner": "volodstaimi",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/youtube-transcript-api",
    "downloadUrl": "https://openagent3.xyz/downloads/youtube-transcript-api",
    "agentUrl": "https://openagent3.xyz/skills/youtube-transcript-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/youtube-transcript-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/youtube-transcript-api/agent.md"
  }
}