The simplest YouTube transcript API there is: add .txt to a video ID and get the full transcript back as a clean, readable document. No API key, no SDK, no signup — just one HTTPS request you can run from cURL, the browser, or any language.
Take the 11-character video ID and request this URL:
https://youtube-transcript.ai/transcript/{VIDEO_ID}.txt
That's the whole API. For youtube.com/watch?v=dQw4w9WgXcQ the ID is dQw4w9WgXcQ, so:
curl https://youtube-transcript.ai/transcript/dQw4w9WgXcQ.txt
Try the live example → Or use the web tool
| Method | Endpoint | Returns |
|---|---|---|
| GET | /transcript/{VIDEO_ID}.txt |
Full transcript as a clean, timestamped Markdown document. |
| Parameter | Endpoint | Description |
|---|---|---|
lang |
/transcript/{VIDEO_ID}.txt |
Optional. A YouTube language code such as en, es, or zh-Hant. Falls back to a human-uploaded track, then the auto-generated track. |
curl "https://youtube-transcript.ai/transcript/dQw4w9WgXcQ.txt?lang=en"
Content type is text/markdown; charset=utf-8. A short metadata header (title, source URL, language, duration, word count, and the other available caption languages) is followed by the transcript, grouped into short paragraphs with [m:ss] timestamps:
# Transcript: Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)
Source video: https://www.youtube.com/watch?v=dQw4w9WgXcQ
Language: en · Duration: 3:27 · Words: 481
Other available languages: a-en (en) [auto], de-DE (de-DE), ja (ja), pt-BR (pt-BR), es-419 (es-419)
To request a specific language: https://youtube-transcript.ai/transcript/dQw4w9WgXcQ.txt?lang=LANG_CODE
[0:00] We're no strangers to love. You know the rules and so do I...
[0:19] I just wanna tell you how I'm feeling. Gotta make you understand...
The output is Markdown, so it renders cleanly in chats, docs, and agents while staying readable as plain text.
const id = 'dQw4w9WgXcQ'
const res = await fetch(`https://youtube-transcript.ai/transcript/${id}.txt`)
const transcript = await res.text()
console.log(transcript)
import requests
video_id = "dQw4w9WgXcQ"
url = f"https://youtube-transcript.ai/transcript/{video_id}.txt"
transcript = requests.get(url).text
print(transcript)
curl -s "https://youtube-transcript.ai/transcript/dQw4w9WgXcQ.txt"
.txt path makes the response a readable document, so web-browsing agents (ChatGPT, Claude, Perplexity) and scrapers ingest it directly — no JSON parsing, no headless browser.The free tier is intended for normal, low-volume use. If you need guaranteed throughput, no rate limits, or commercial terms, reach out at hello@youtube-transcript.ai and we'll set you up at $1 per 1,000 calls.
Yes — free with no API key under fair-use limits. For high-volume or commercial production use, email us for an unlimited plan at $1 per 1,000 calls.
No. There's no key, token, or SDK. Make a plain HTTPS GET request to /transcript/{VIDEO_ID}.txt from any client or language.
UTF-8 Markdown (text/markdown): a metadata header (title, source, language, duration, word count, available languages), then the transcript in short paragraphs with [m:ss] timestamps. Still fully readable as plain text. CORS is open.
Yes — add ?lang=en (or any YouTube language code). It falls back to a human-uploaded track, then the auto-generated one.
Any public video that has captions — either creator-uploaded or YouTube auto-generated. Private, members-only, or caption-disabled videos can't be transcribed.
Yes — the .txt endpoint groups the transcript into short paragraphs, each prefixed with an [m:ss] timestamp.