How to get a YouTube transcript
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
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the YouTube Transcript API
Send an authenticated GET request to /v1/youtube/transcript with your input. No OAuth, no scraping setup.
- 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%3DdQw4w9WgXcQ" \
-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=dQw4w9WgXcQ",
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ♪ A full commitment's what I'm thinking of ♪ ♪ You wouldn't get this from any other guy ♪ ♪ I just wanna tell you how I'm feeling ♪ ♪ Gotta make you understand ♪ ♪ Never gonna give you up ♪ ♪ Never gonna let you down ♪ ♪ Never gonna run around and desert you ♪ ♪ Never gonna make you cry ♪ ♪ Never gonna say goodbye ♪ ♪ Never gonna tell a lie and hurt you ♪ ...",
"segments": [
{
"text": "[♪♪♪]",
"startMs": 1360,
"endMs": 3040
},
{
"text": "♪ We're no strangers to love ♪",
"startMs": 18640,
"endMs": 21880
}
],
"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
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Public 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. |
| language | string | No | Preferred caption language as an ISO code, e.g. "en". Defaults to auto-detect. |
| cache | boolean | No | Set 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 proxies, 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 tracks=0 (common on long live streams); language_not_available means tracks exist but not in your language (see availableLanguages). On no_captions, 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