YTAPI.devDocs

Get transcript

getTranscript(query, options?): TranscriptResponse

GET
https://api.ytapi.dev/v1/transcripts
1 Credit

Same extraction as POST /v1/transcripts, using query parameters. Useful for browser checks and short scripts. Prefer POST when sending languages arrays or larger option sets.

API Key

All requests require a valid API key from the developer dashboard.

Headers: Authorization: Bearer YOUR_API_KEYorX-API-Key: YOUR_API_KEY

See Authentication for headers and rate limits.

Query Parameters

ParameterTypeRequiredDescription
video_idquery
stringYes

11-character YouTube video ID or a full video URL.

formatquery
stringNo

Output format: segments (default), word_timestamps, sentences, markdown, text, srt, vtt, or json3.

word_levelquery
booleanNo

Include millisecond word offsets on ASR tracks. Default false.

languagesquery
stringNo

Comma-separated ISO language codes, for example en,es. * means the video's own language, the one spoken in it. Default *. For English when the video has it and its own language otherwise, pass en,*.

track_policyquery
stringNo

Track selection: manual_first (default) prefers creator captions and falls back to auto-generated; asr_first prefers auto-generated and falls back to creator captions; exact_only accepts only a track whose language code matches exactly (en does not match en-GB), creator captions first. Any other value returns 400 invalid_request. Languages are tried in order first, then track kind within the matched language: if the English track is auto-generated only, en,* returns it rather than moving on. To see which languages and kinds a video has before spending a credit, call the free basic info endpoint: each entry in available_languages has kind manual or asr. The response track_kind says which one you got.

Response (HTTP 200)

When format=word_timestamps, segments, sentences, or json3 (application/json):

{
  "video_id": string,            // Echoed YouTube video ID
  "language": string,            // Negotiated ISO language code (e.g. "en")
  "track_kind": string,          // "asr" (auto-generated) or "manual" (creator-uploaded)
  "duration_seconds": number,    // Total duration of caption track in seconds
  "has_word_level": boolean,     // Whether word-level offsets are present
  "segments": [                  // Array of caption segments with timing offsets
    {
      "text": string,            // Segment transcript text
      "start": number,           // Start offset in seconds
      "end": number,             // End offset in seconds
      "duration": number,        // Segment duration in seconds
      "words": [                 // Word-level timestamps (populated when word_level=true)
        {
          "word": string,        // Individual word
          "start": number,       // Word start offset
          "end": number          // Word end offset
        }
      ]
    }
  ]
}

When format=markdown, text, srt, or vtt:

Returns the raw document directly with matching Content-Type (e.g. text/markdown, text/plain, text/vtt) without JSON wrapper overhead.