YouTube Transcript API Documentation

Getting Started with Transcript Automation

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.

What You Get with the REST API

Universal API

Single endpoint for 1 to 100 videos

Background Processing

Jobs are processed asynchronously

Multiple Formats

txt, srt, vtt, csv, json

Pay-as-you-go

1 credit = 1 successfully processed video

Getting an API Key

All requests to GetTranscript require authentication using an API key. Follow these three steps to get started — it takes less than a minute.

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.

REST API Endpoints

1. Request Transcripts

POSThttps://gettranscript.app/api/transcript

Create a new transcript extraction job for one or more videos. Max 100 videos per request.

Request Body:

{
  "videos": ["dQw4w9WgXcQ", "https://www.youtube.com/watch?v=5OLs1GWB4OA"]
}

Parameters:

ParameterTypeRequiredDescription
videosarrayYesArray of YouTube video IDs or URLs (max 100)

Example Request:

curl -X POST https://gettranscript.app/api/transcript \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "videos": ["dQw4w9WgXcQ", "5OLs1GWB4OA"]
  }'

Response:

{
  "success": true,
  "jobId": "f8465ea8-e9e7-4e76-8961-aa3061c2b854",
  "message": "Transcript job created and queued for processing",
  "details": {
    "totalVideos": 2,
    "status": "pending"
  }
}

2. List Transcripts (History)

GEThttps://gettranscript.app/api/transcript

Retrieve a paginated list of your past transcript jobs.

Query Parameters:

ParameterTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1)
limitintegerNoNumber of items per page (default: 25, max: 100)

Example Request:

curl -X GET "https://gettranscript.app/api/transcript?page=1&limit=25" \
  -H "x-api-key: YOUR_API_KEY"

Response:

{
  "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
  }
}

3. Check transcripts status

GEThttps://gettranscript.app/api/transcript/:jobId/status

Check the current status of a specific job and its individual video tasks.

Example Request:

curl -X GET https://gettranscript.app/api/transcript/f8465ea8-e9e7-4e76-8961-aa3061c2b854/status \
  -H "x-api-key: YOUR_API_KEY"

Response:

{
  "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
    }
  ]
}

Status Values:

  • pending — Job created, waiting to start
  • processing — Currently extracting transcripts
  • completed — Job finished, ready for download
  • failed — Job failed due to error

4. Download Results

POSThttps://gettranscript.app/api/transcript/:jobId/download

Download completed transcripts in your chosen format. Returns the file content directly.

Request Body:

{
  "format": "json",
  "include_timestamps": true,
  "include_video_title": true,
  "include_video_id": true,
  "include_channel_name": true,
  "package_format": "single_file"
}

Parameters:

ParameterTypeRequiredDescription
formatstringNotxt, srt, vtt, csv, json (default: json)
include_timestampsbooleanNoInclude timestamps (default: true)
include_video_titlebooleanNoInclude video title (default: true)
include_video_idbooleanNoInclude video ID (default: true)
include_channel_namebooleanNoInclude channel name (default: true)
package_formatstringNosingle_file, zip (default: single_file)

Example Request:

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.zip

Supported Output Formats

The same transcript rendered in each supported output format.

TXT (Plain Text)

Hello and welcome to this video.
Today we're going to talk about transcripts.

SRT (SubRip Subtitle)

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.

VTT (Web Video Text Tracks)

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.

CSV (Spreadsheet)

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."

JSON (Developer Format)

{
  "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."
    }
  ]
}

Error Handling

All errors return JSON in the following shape:

{
  "success": false,
  "error": "insufficient_credits",
  "message": "You need 5 credits but have 2."
}
HTTPError CodeMeaning
400invalid_requestMissing or malformed request body
400invalid_video_idOne or more YouTube IDs / URLs are invalid
401invalid_api_keyAPI key missing or invalid
402insufficient_creditsNot enough credits for this job
404job_not_foundJob ID does not exist
429rate_limit_exceededRate limit exceeded (60 req/min)
500internal_errorSomething went wrong on our side

API Pricing & Credits

  • 1 credit = 1 successfully processed video.
  • Credits are reserved when the job is created and deducted only after a transcript is successfully extracted.
  • If a video fails (no captions, private, deleted, region-locked), its credit is automatically refunded.
  • If your account has fewer credits than the job size, the job is rejected with 402 insufficient_credits.
  • Credits never expire.

Rate Limits

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.

Why Automate YouTube Transcripts?

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

Webhooks are not supported yet. To detect job completion, poll the status endpoint or check the history endpoint.

Support

Need help? Contact us at support@gettranscript.app. We typically respond within 24 hours.

Ready to Extract Your First Transcript?

Join thousands of users who save hours every week with our online YouTube transcript extraction service

Start Extracting Now