Tài liệu API

Một REST API cho transcript, tìm kiếm và metadata YouTube. Lấy API key từ dashboard của bạn — 100 tín dụng miễn phí, không cần thẻ.

Xác thực

Truyền API key của bạn dưới dạng bearer token, hoặc qua x-api-key:

Authorization: Bearer sk_live_...
# or
x-api-key: sk_live_...

URL Cơ sở

https://getyoutubetranscript.com/api/v1

Tín dụng & gói

GóiGiáTín dụng/thángGiá nạp thêmGiới hạn tốc độ
Miễn phí0 $/tháng100 (một lần)—60 req/phút
Hàng tháng5 $/tháng1.0002,50 $ / 1.000200 req/phút
Hàng năm4,50 $/tháng (54 $/năm)1.0001,50 $ / 1.000300 req/phút
Starter19 $/tháng7.5001,50 $ / 1.000300 req/phút
Pro49 $/tháng25.0001,50 $ / 1.000400 req/phút
Scale99 $/tháng60.0001,50 $ / 1.000600 req/phút

1 tín dụng = 1 request thành công. Request thất bại không bao giờ bị trừ. Ví dụ: 10 request lấy transcript, trong đó 2 video không có phụ đề, chỉ tốn 8 tín dụng, và thử lại một video bị lỗi sẽ không mất phí cho đến khi thành công. Tín dụng nạp thêm hết hạn sau 30 ngày kể từ khi mua hoặc vào cuối chu kỳ thanh toán hiện tại, tùy thời điểm nào đến sau, và yêu cầu gói đăng ký đang hoạt động để sử dụng.

Điểm cuối

GET/transcript1 tín dụng

Lấy transcript của một video YouTube, kèm metadata (tiêu đề, kênh, thumbnail). Ngoài ra còn trả về language_code so với requested_language, caption_type (manual hoặc auto, null nếu không rõ) và cached / fetched_at.

Tham sốBắt buộcMô tả
vCóVideo ID hoặc URL YouTube đầy đủ
languageKhôngMã ngôn ngữ (mặc định: en)
timestampsKhôngĐặt true để thêm mốc thời gian cho từng dòng (segments: start, duration, text tính bằng giây). Mặc định tắt.

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/transcript?v=jNQXAC9IVRw" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "video_id": "jNQXAC9IVRw",
    "language_code": "en",
    "requested_language": "en",
    "caption_type": "manual",
    "title": "Me at the zoo",
    "author_name": "jawed",
    "author_url": "https://www.youtube.com/channel/UC4Qob...",
    "thumbnail_url": "https://...",
    "transcript": "All right, so here we are...",
    "word_count": 39,
    "cached": true,
    "fetched_at": "2026-09-20T03:10:58.938Z"
  }
}
GET/transcript/languagesMiễn phí

Liệt kê các ngôn ngữ phụ đề của một video (thủ công và tự động tạo) trước khi lấy một bản. default_language_code là ngôn ngữ mà /transcript trả về khi không chỉ định; video tắt phụ đề sẽ trả về danh sách rỗng.

Tham sốBắt buộcMô tả
vCóVideo ID hoặc URL YouTube đầy đủ

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/transcript/languages?v=kJQP7kiw5Fk" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "video_id": "kJQP7kiw5Fk",
    "default_language_code": "en",
    "languages": [
      { "language_code": "en", "name": "English - en", "caption_type": "manual" },
      { "language_code": "es", "name": "Spanish", "caption_type": "manual" }
    ]
  }
}
POST/batch1 tín dụng / video thành công

Đưa tối đa 100 video vào hàng đợi trong một lần gọi. Trả về batch_id ngay và lấy transcript ở chế độ nền. Kiểm tra GET /batch, hoặc truyền webhook_url để nhận một POST có chữ ký (header X-GYT-Signature) khi xong. Video thất bại không bao giờ bị trừ tín dụng.

Tham sốBắt buộcMô tả
videosCóMảng ID hoặc URL video (1-100). Video trùng chỉ lấy một lần.
languageKhôngMã ngôn ngữ cho tất cả video (mặc định: en)
timestampsKhôngtrue để thêm segments theo từng dòng vào kết quả
webhook_urlKhôngURL https công khai nhận thông báo khi batch hoàn tất
Idempotency-KeyKhôngHeader. Gửi lại request an toàn: cùng một key sẽ trả về batch ban đầu.

Yêu cầu

curl -X POST "https://getyoutubetranscript.com/api/v1/batch" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
        "videos": ["jNQXAC9IVRw", "https://youtu.be/dQw4w9WgXcQ"],
        "webhook_url": "https://example.com/hooks/transcripts"
      }'

Phản hồi

{
  "success": true,
  "data": {
    "batch_id": "324eb615-e4d5-4b3c-b8e7-04235671066b",
    "status": "queued",
    "total": 2,
    "succeeded": 0,
    "failed": 0,
    "pending": 2,
    "results_url": "https://getyoutubetranscript.com/api/v1/batch?id=324eb615-...",
    "webhook_secret": "whsec_..."
  }
}
GET/batchMiễn phí

Trạng thái batch, số lượng và một trang kết quả theo thứ tự gửi. Mục thành công có cùng các trường như /transcript; mục thất bại có error_code.

Tham sốBắt buộcMô tả
idCóbatch_id từ POST /batch
offsetKhôngSố mục bỏ qua (mặc định: 0)
limitKhôngSố mục mỗi trang, 1-50 (mặc định: 20)

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/batch?id=324eb615-e4d5-4b3c-b8e7-04235671066b" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "batch_id": "324eb615-...",
    "status": "completed",
    "total": 2,
    "succeeded": 1,
    "failed": 1,
    "credits_charged": 1,
    "items": [
      { "position": 0, "status": "succeeded", "charged": true, "video_id": "jNQXAC9IVRw", "caption_type": "manual", "transcript": "All right, so here we are...", ... },
      { "position": 1, "status": "failed", "charged": false, "video_id": "dQw4w9WgXcQ", "error_code": "TRANSCRIPT_DISABLED" }
    ],
    "next_offset": null
  }
}
GET/search1 tín dụng / trang

Tìm kiếm video YouTube với bộ lọc và phân trang.

Tham sốBắt buộcMô tả
qCóTừ khóa tìm kiếm (tối thiểu 2 ký tự)
countryKhôngMã quốc gia 2 chữ cái (mặc định: us)
languageKhôngMã ngôn ngữ (mặc định: en)
page_tokenKhôngGiá trị continuation_token từ response trước, để lấy trang tiếp theo
limitKhôngSố kết quả tối đa (mặc định 20, tối đa 50)

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/search?q=lofi+beats" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "query": "lofi beats",
    "video_results": [ { "title": "...", "videoId": "...", "channel": { "name": "..." } } ],
    "continuation_token": "c_bKt9xQ2mVf7LpR0aZ3sWyA"
  }
}
GET/resolveMiễn phí

Phân giải handle, URL hoặc username của một kênh thành channel ID thực. Đầu vào có cấu trúc sẵn (đã là channel ID hoặc URL chứa sẵn ID) được phân giải ngay lập tức, không cần gọi mạng; một handle trần sẽ kích hoạt một lượt tra cứu thực.

Tham sốBắt buộcMô tả
handleCóChannel ID, URL, hoặc @handle

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/resolve?handle=@mkbhd" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
    "title": "Marques Brownlee",
    "handle": "http://www.youtube.com/@mkbhd",
    "resolved_via": "scrape"
  }
}
GET/channel/latestMiễn phí

Thông tin kênh (tiêu đề, số người đăng ký, mô tả, ảnh đại diện) và các video mới nhất ở tab trang chủ của kênh. Để lấy toàn bộ lịch sử tải lên, dùng /channel/videos.

Tham sốBắt buộcMô tả
channelCó@handle, URL hoặc ID kênh

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/channel/latest?channel=@mkbhd" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "channel": { "id": "UCBJycsmduvYEL83R_U4JriQ", "title": "Marques Brownlee", "subscribers": 1160000, "avatar": "https://..." },
    "about": { "description": "...", "links": [] },
    "videos_sections": [ ... ]
  }
}
GET/channel/videos1 tín dụng / trang

Tất cả video kênh đã tải lên, mới nhất trước, có phân trang.

Tham sốBắt buộcMô tả
channelCó@handle, URL hoặc ID kênh
continuationKhôngcontinuation_token từ phản hồi trước, để lấy trang tiếp theo (dùng thay cho các tham số khác). Hết hạn sau 24 giờ.

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/channel/videos?channel=@mkbhd" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "videos": [ { "position": 1, "id": "...", "title": "...", "views": "6.2M", "published_time": "1d ago", "length": "10:47" } ],
    "has_more": true,
    "continuation_token": "c_pqHR9v13sqaqxlcKhA4MnA"
  }
}
GET/channel/search1 tín dụng / trang

Tìm kiếm trong video của một kênh, có phân trang.

Tham sốBắt buộcMô tả
channelCó@handle, URL hoặc ID kênh
qCóTừ khóa tìm kiếm (tối thiểu 2 ký tự)
continuationKhôngcontinuation_token từ phản hồi trước, để lấy trang tiếp theo (dùng thay cho các tham số khác). Hết hạn sau 24 giờ.

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/channel/search?channel=@mkbhd&q=iphone" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "videos": [ { "position": 1, "id": "...", "title": "...", "published_time": "3w ago", "length": "17:14", "channel": { "name": "Marques Brownlee" } } ],
    "has_more": true,
    "continuation_token": "c_pnm10M6orzLgOTVWJk2oww"
  }
}
GET/playlist1 tín dụng / trang

Tất cả video trong playlist, có phân trang. continuation_token là null ở trang cuối.

Tham sốBắt buộcMô tả
listCóPlaylist ID hoặc URL
continuationKhôngcontinuation_token từ phản hồi trước, để lấy trang tiếp theo (dùng thay cho các tham số khác). Hết hạn sau 24 giờ.

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/playlist?list=PLxxx" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "playlist_id": "PLxxx",
    "title": "...",
    "videos": [ { "position": 1, "id": "...", "title": "...", "channel": { "name": "..." } } ],
    "has_more": true,
    "continuation_token": "c_DfE9mQx2Ln8TbW4kJ1pZsA"
  }
}
GET/creditsMiễn phí

Kiểm tra số dư tín dụng còn lại của key này trước khi sử dụng - cùng dữ liệu mà công cụ MCP get_credits trả về.

Tham sốBắt buộcMô tả

Yêu cầu

curl "https://getyoutubetranscript.com/api/v1/credits" \
  -H "Authorization: Bearer sk_live_..."

Phản hồi

{
  "success": true,
  "data": {
    "plan_credits_left": 87,
    "topup_credits_left": 0,
    "plan": "monthly",
    "rate_limit_per_minute": 200
  }
}

Lỗi

Lỗi trả về một JSON body kèm trường code cố định để bạn phân nhánh xử lý, bên cạnh mã trạng thái HTTP:

Trạng tháiMãÝ nghĩa
400BAD_REQUESTThiếu hoặc sai tham số
400CURSOR_EXPIREDCon trỏ trang đã hết hạn (sau 24 giờ) - bắt đầu lại từ trang đầu
401MISSING_API_KEY / INVALID_API_KEYKhông có key, hoặc key không hợp lệ/đã bị thu hồi
402PAYMENT_REQUIREDHết tín dụng - hãy nạp thêm hoặc nâng cấp gói
404VIDEO_UNAVAILABLE / TRANSCRIPT_NOT_FOUNDKhông tìm thấy video hoặc tài nguyên
429RATE_LIMITEDQuá nhiều request so với gói của bạn
503UPSTREAM_UNAVAILABLESự cố tạm thời từ upstream - có thể thử lại an toàn
504UPSTREAM_TIMEOUTNguồn mất hơn 25 giây - không bị tính phí, có thể thử lại

Dùng API này với một công cụ AI

Muốn để Claude (hoặc một công cụ AI coding khác) tự gọi API này thay vì tự viết request? Tải YouTube Transcript skill - một Claude Skill dựng sẵn, dạy nó cách lấy transcript, tìm kiếm, và nhiều hơn nữa.

Dùng trong Zapier

Không cần code: ứng dụng Zapier của chúng tôi lấy bản chép lời, tìm kiếm YouTube hoặc liệt kê video của một kênh trong bất kỳ Zap nào. Kết nối bằng cùng khóa API; mỗi hành động tốn số credit bằng lệnh gọi API.