YouTube · Guide

How to get a YouTube transcript

TL;DR
To get a YouTube transcript, sign up for a free Captapi key, then send one GET request to /v1/youtube/transcript with your input. You get clean JSON back in seconds for 1 credit per call — no OAuth, scraping or platform SDKs. YouTube's published captions with timestamps — not speech-to-text. Flat 1 credit; 404 is free.

How to get a YouTube transcript (step by step)

  1. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 2

    Call the YouTube Transcript API

    Send an authenticated GET request to /v1/youtube/transcript with your input. No OAuth, no scraping setup.

  3. 3

    Read the JSON response

    Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.

Code example

curl "https://api.captapi.com/v1/youtube/transcript?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiG9CE55wbtY" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

What the response looks like

{
  "success": true,
  "data": {
    "url": "https://www.youtube.com/watch?v=iG9CE55wbtY",
    "videoId": "iG9CE55wbtY",
    "title": "Do schools kill creativity? | Sir Ken Robinson | TED",
    "text": "Good morning. How are you? (Audience) Good. It's been great, hasn't it? I've been blown away by the whole thing. In fact, I'm leaving.",
    "segments": [
      {
        "text": "Good morning. How are you?",
        "startMs": 27103,
        "endMs": 29678
      },
      {
        "text": "(Audience) Good.",
        "startMs": 29702,
        "endMs": 31105
      },
      {
        "text": "It's been great, hasn't it?",
        "startMs": 31129,
        "endMs": 32797
      },
      {
        "text": "I've been blown away by the whole thing.",
        "startMs": 33408,
        "endMs": 35729
      },
      {
        "text": "In fact, I'm leaving.",
        "startMs": 35753,
        "endMs": 37245
      }
    ],
    "platform": "youtube",
    "requestedLanguage": null,
    "returnedLanguage": "en",
    "isAutoGenerated": false,
    "isTranslated": false,
    "hasAutoCaptions": true
  }
}

Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.

Request parameters

NameTypeRequiredDescription
urlstring YesPublic YouTube video URL, e.g. https://youtube.com/watch?v=ID. Not a TikTok/Instagram/Facebook URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble.
languagestringNoPreferred caption language as an ISO code, e.g. "en". Defaults to auto-detect.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Frequently asked questions

What does the YouTube Transcript API do?

The YouTube Transcript API lets you extract the full, timestamped transcript from a public YouTube video using one GET request to /v1/youtube/transcript. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the YouTube Transcript API cost?

Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a YouTube API key or OAuth?

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.

Why did I get 404 on a video with clear speech?

This endpoint returns captions YouTube published — it does not run speech-to-text. Read detail.code: no_captions means the video is playable but tracks=0 (common on long live streams); language_not_available means tracks exist but not in your language (see availableLanguages); video_unavailable means the video is deleted, private, or otherwise unplayable (YouTube: "this video is no longer available"). On no_captions only, detail.suggestion points at /v1/youtube/audio-transcript with estimatedCredits. 404 never charges credits.

If I pass language=en and only Turkish captions exist, what happens?

We try YouTube's timedtext translation into en. If that fails → 404 language_not_available with availableLanguages (not a silent Turkish transcript). On success, requestedLanguage and returnedLanguage are both set; isTranslated is true when YouTube translated.

Is the YouTube Transcript API suitable for production use?

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

Ready to get a YouTube transcript?

Start free with 100 credits — no credit card required.

Get your free API key