Welcome to the GetTranscript documentation. Our API provides powerful tools for automating YouTube video transcript extraction. Automated extraction saves countless hours, instantly turning any video library into structured, searchable text.
Single endpoint for 1 to 100 videos
Jobs are processed asynchronously
txt, srt, vtt, csv, json
1 credit = 1 successfully processed video
All requests to GetTranscript require authentication using an API key. Follow these three steps to get started — it takes less than a minute.
Sign up with Google or email. No credit card required to create an account.
Buy credits once via Stripe. No subscriptions, no recurring charges.
Go to the API Keys section in your dashboard and click "Create new key". Copy it right away — you won't see it again.
Note: You must be signed in to view or manage your API key. Click step 1 above to create an account.
Never share your API key or commit it to version control. Use environment variables to store it securely.
https://gettranscript.app/api/transcriptCreate a new transcript extraction job for one or more videos. Max 100 videos per request.
{
"videos": ["dQw4w9WgXcQ", "https://www.youtube.com/watch?v=5OLs1GWB4OA"]
}| Parameter | Type | Required | Description |
|---|---|---|---|
videos | array | Yes | Array of YouTube video IDs or URLs (max 100) |
curl -X POST https://gettranscript.app/api/transcript \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"videos": ["dQw4w9WgXcQ", "5OLs1GWB4OA"]
}'{
"success": true,
"jobId": "f8465ea8-e9e7-4e76-8961-aa3061c2b854",
"message": "Transcript job created and queued for processing",
"details": {
"totalVideos": 2,
"status": "pending"
}
}https://gettranscript.app/api/transcriptRetrieve a paginated list of your past transcript jobs.
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number for pagination (default: 1) |
limit | integer | No | Number of items per page (default: 25, max: 100) |
curl -X GET "https://gettranscript.app/api/transcript?page=1&limit=25" \ -H "x-api-key: YOUR_API_KEY"
{
"success": true,
"data": [
{
"id": "f8465ea8-e9e7-4e76-8961-aa3061c2b854",
"date": "2026-04-11",
"status": "Completed",
"totalCost": 2,
"counts": {
"total": 2,
"completed": 2,
"failed": 0,
"processing": 0
}
}
],
"hasMore": false,
"total": 1,
"pagination": {
"current_page": 1,
"total_pages": 1,
"limit": 25
}
}https://gettranscript.app/api/transcript/:jobId/statusCheck the current status of a specific job and its individual video tasks.
curl -X GET https://gettranscript.app/api/transcript/f8465ea8-e9e7-4e76-8961-aa3061c2b854/status \ -H "x-api-key: YOUR_API_KEY"
{
"success": true,
"jobId": "f8465ea8-e9e7-4e76-8961-aa3061c2b854",
"tasks": [
{
"video_id": "dQw4w9WgXcQ",
"status": "processing",
"created_at": "2026-03-11T20:35:40.092636+00:00",
"started_at": "2026-03-11T20:35:45.821198+00:00"
},
{
"video_id": "5OLs1GWB4OA",
"status": "pending",
"created_at": "2026-03-11T20:35:40.092642+00:00",
"started_at": null
}
]
}pending — Job created, waiting to startprocessing — Currently extracting transcriptscompleted — Job finished, ready for downloadfailed — Job failed due to errorhttps://gettranscript.app/api/transcript/:jobId/downloadDownload completed transcripts in your chosen format. Returns the file content directly.
{
"format": "json",
"include_timestamps": true,
"include_video_title": true,
"include_video_id": true,
"include_channel_name": true,
"package_format": "single_file"
}| Parameter | Type | Required | Description |
|---|---|---|---|
format | string | No | txt, srt, vtt, csv, json (default: json) |
include_timestamps | boolean | No | Include timestamps (default: true) |
include_video_title | boolean | No | Include video title (default: true) |
include_video_id | boolean | No | Include video ID (default: true) |
include_channel_name | boolean | No | Include channel name (default: true) |
package_format | string | No | single_file, zip (default: single_file) |
curl -X POST https://gettranscript.app/api/transcript/f8465ea8-e9e7-4e76-8961-aa3061c2b854/download \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "srt",
"package_format": "zip"
}' \
--output transcripts.zipThe same transcript rendered in each supported output format.
Hello and welcome to this video. Today we're going to talk about transcripts.
1 00:00:00,000 --> 00:00:03,500 Hello and welcome to this video. 2 00:00:03,500 --> 00:00:06,200 Today we're going to talk about transcripts.
WEBVTT 00:00:00.000 --> 00:00:03.500 Hello and welcome to this video. 00:00:03.500 --> 00:00:06.200 Today we're going to talk about transcripts.
start,end,text 00:00:00.000,00:00:03.500,"Hello and welcome to this video." 00:00:03.500,00:00:06.200,"Today we're going to talk about transcripts."
{
"video_id": "dQw4w9WgXcQ",
"title": "Video Title",
"channel": "Channel Name",
"transcript": [
{
"start": 0.0,
"duration": 3.5,
"text": "Hello and welcome to this video."
},
{
"start": 3.5,
"duration": 2.7,
"text": "Today we're going to talk about transcripts."
}
]
}All errors return JSON in the following shape:
{
"success": false,
"error": "insufficient_credits",
"message": "You need 5 credits but have 2."
}| HTTP | Error Code | Meaning |
|---|---|---|
| 400 | invalid_request | Missing or malformed request body |
| 400 | invalid_video_id | One or more YouTube IDs / URLs are invalid |
| 401 | invalid_api_key | API key missing or invalid |
| 402 | insufficient_credits | Not enough credits for this job |
| 404 | job_not_found | Job ID does not exist |
| 429 | rate_limit_exceeded | Rate limit exceeded (60 req/min) |
| 500 | internal_error | Something went wrong on our side |
402 insufficient_credits.Rate Limit: 60 requests per minute per API key / IP
Credits: 1 credit per successfully processed video
Jobs are processed asynchronously — poll GET /api/transcript/:jobId/status for updates.
Building an application that relies on YouTube video data? Our REST API provides a reliable, scalable way to automate the extraction of YouTube transcripts and subtitles. Whether you are building an AI summarization tool, a sentiment analysis pipeline, or a custom search engine for video content, our API handles the complex communication with YouTube behind the scenes.
Instead of dealing with rate limits, proxy rotations, and parsing raw XML captions yourself, you can make a single POST request to our endpoint and receive clean, structured text in JSON, SRT, or VTT formats. The API supports batch processing of up to 100 videos per request and handles asynchronous job polling. Stop wasting development hours on scraping infrastructure and focus on building your core product features with GetTranscript.
Webhooks are not supported yet. To detect job completion, poll the status endpoint or check the history endpoint.
Need help? Contact us at support@gettranscript.app. We typically respond within 24 hours.
Join thousands of users who save hours every week with our online YouTube transcript extraction service
Start Extracting Now