Official SDKs for the SubDownload YouTube Transcript API.
API Documentation | Get API Key
| Language | Directory | Requirements |
|---|---|---|
| Python | python/ |
Python 3.7+, requests |
| JavaScript | javascript/ |
Node.js 18+ (native fetch) |
| Go | go/ |
Go 1.21+ (zero dependencies) |
| Java | java/ |
Java 11+, Gson |
| Kotlin | kotlin/ |
Kotlin 1.9+, Gson |
| Rust | rust/ |
reqwest, serde |
Sign up at subdownload.com and get your API key from the dashboard. Keys start with sk_live_.
Python
from subdownload import SubDownload
client = SubDownload("sk_live_your_api_key")
result = client.get_transcript(video_id="dQw4w9WgXcQ", lang="en")
for seg in result["data"]["segments"]:
print(f"[{seg['start']:.1f}s] {seg['text']}")JavaScript
import { SubDownload } from "./subdownload.js";
const client = new SubDownload("sk_live_your_api_key");
const result = await client.getTranscript({ videoId: "dQw4w9WgXcQ", lang: "en" });
result.data.segments.forEach((seg) => {
console.log(`[${seg.start}s] ${seg.text}`);
});Go
client := subdownload.NewClient("sk_live_your_api_key")
resp, _ := client.Transcript("dQw4w9WgXcQ", &subdownload.TranscriptOptions{Lang: "en"})
fmt.Println(resp.Data.Text)Java
var client = new SubDownloadClient("sk_live_your_api_key");
var result = client.fetchTranscript("dQw4w9WgXcQ", "en");
System.out.println(result.getAsJsonObject("data").get("text").getAsString());Kotlin
val client = SubDownloadClient("sk_live_your_api_key")
val result = client.fetchTranscript(videoId = "dQw4w9WgXcQ", lang = "en")
println(result.data.text)Rust
let client = SubDownloadClient::new("sk_live_your_api_key");
let resp = client.fetch_transcript(Some("dQw4w9WgXcQ"), None, Some("en"))?;
println!("{}", resp.data.text);Fetch transcript for a YouTube video. Costs 1 credit per request.
Authentication: X-API-Key: sk_live_... or Authorization: Bearer sk_live_...
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
video_id |
string | * | YouTube video ID (e.g. dQw4w9WgXcQ) |
video_url |
string | * | Full YouTube URL (alternative to video_id) |
lang |
string | No | Language code (e.g. en, zh, en,zh) |
* Provide either video_id or video_url.
Response:
{
"data": {
"video_id": "dQw4w9WgXcQ",
"video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"language": "en",
"segments": [
{ "text": "...", "start": 1.4, "duration": 3.2 }
],
"text": "Full transcript text...",
"available_tracks": [
{ "language": "English", "language_code": "en", "is_generated": false }
],
"meta": {
"title": "Video Title",
"author": "Channel Name",
"channel_id": "UCxxx",
"thumbnail": "https://..."
}
},
"credits_used": 1,
"credits_remaining": 999
}Error Response:
{
"error": {
"code": "TRANSCRIPT_NOT_FOUND",
"message": "No transcript available for this video"
}
}Full API documentation: api.subdownload.com/docs/api
MIT