A YouTube transcript API built for production.

Send a YouTube URL or video ID and receive captions as plain text or structured segments. When captions are missing, the same endpoint can start a generated transcript job.

Transcript requestGET /v1/transcript
curl 'https://capslane.com/v1/transcript?url=dQw4w9WgXcQ&mode=auto' \
  -H 'x-api-key: YOUR_API_KEY'

One endpoint for every transcript path.

The response contract stays predictable whether Capslane finds an existing caption track, serves a cached result or generates the transcript from audio.

YouTube URL or ID

Accept standard video URLs, Shorts URLs and normalized 11-character video IDs.

Text or segments

Choose one plain text value or structured chunks with offsets, durations and language.

Language selection

Request a preferred ISO language and inspect every caption language found on the source.

Asynchronous generation

Long-running audio transcription returns a job ID with monotone progress and a polling endpoint.

Shared cache

Repeated requests reuse canonical transcripts while keeping tenant usage and logs isolated.

Operational visibility

Review request status, latency, cache use and failures from the workspace dashboard.

From video URL to usable text.

Validate

Capslane normalizes the YouTube identifier and rejects unsupported sources before making an upstream request.

Extract

The native path retrieves manual or automatic captions and selects the requested language when available.

Generate only when required

Auto mode starts local speech transcription only after a genuine absence of captions is confirmed.

Return one contract

Your application receives the same content fields for native, generated and cached transcripts.

Test the video before writing an adapter

Use the YouTube Transcript Inspector without an account to see the available native track and a real preview. Continue with the same video in a free workspace to retrieve the complete result. The Playground follows generated jobs and offers a copyable response.

For a repeatable first integration, use a Sheets-to-transcript or Markdown workflow, the MCP first-call example or the Python result-saving example.

Handle an immediate transcript or an accepted job

An HTTP 200 result includes content, lang, availableLangs, source, cached and requestId. With the default text=false, content is an array of segments. This illustrative segment starts 8.15 seconds into the video and covers 1.2 seconds.

Illustrative segmented result
{
  "content": [{ "text": "Example segment", "offset": 8150, "duration": 1200, "lang": "en" }],
  "lang": "en", "availableLangs": ["en"],
  "source": "native", "cached": false, "requestId": "req_example"
}

An HTTP 202 response contains a jobId. Save that identifier and poll GET /v1/transcript/{jobId} with the same workspace key. Stop on completed content, failed or cancelled. Polling does not consume another transcript request. The Python and Node.js guides include downloadable clients with a total waiting deadline.

Choose extraction and output independently

Use native when discovery must never generate audio, auto when the application needs generated fallback after confirmed caption absence, and generate to select audio transcription. A compatible cached result can complete immediately. A temporary upstream failure is an error, not evidence that the video has no captions.

Use text=true for a summary pipeline and retain segments for search, playback or clip selection. chunkSize groups text by characters, from 50 to 10,000; it is not a duration setting. lang expresses a preference and does not translate a transcript. Always inspect the language returned.

Check scope, quotas and observed reliability

Capslane v1 accepts YouTube URLs and video IDs. It does not accept arbitrary media uploads or promise access to private, removed, age-restricted or region-restricted videos. YouTube caption availability and audio transcription quality vary. Consult the error guide before adding retries.

The Free plan includes 50 transcript requests and 15 generated minutes per month, with one active generation. Accepted requests use the request allowance even when cached. Generated audio also uses the separate minute allowance; review current plan limits before a batch import.

The published benchmark method and corpus document a dated transport test with cache enabled. The Gems migration case describes a real internal product using both native extraction and generated jobs. These observations help evaluate the integration; they do not guarantee every future video.

For channels you manage, the official YouTube captions download API is another option: it requires OAuth authorization and permission to edit the video. Our official API guide explains that distinction.

Questions developers ask.

Does YouTube provide an official transcript endpoint?

The YouTube Data API does not expose a general endpoint for downloading transcripts from arbitrary public videos. Capslane provides a stable server API for that workflow.

Can the API return timestamps?

Yes. The segmented response includes text, offset and duration in milliseconds for every chunk.

What if a YouTube video has no captions?

Use auto mode to try available captions first and start an asynchronous generated transcript only when no usable track exists.

How many languages are supported?

Capslane returns the language used and the caption languages found on the video. You can request a preferred ISO language code.

Try the API on a real YouTube video.

Start free with no credit card and move to a paid plan when the integration grows.

Create a workspace