V2 হলো সুবিন্যস্ত, ব্যবহারকারী-মালিকানাধীন ট্রান্সক্রিপ্ট মডেল। এটি দ্রুত ক্যাশ হিট ও সামঞ্জস্যপূর্ণ রেসপন্সকে অগ্রাধিকার দেয়, আর আপনি কোনো ভাষা না চাইলে অপ্রত্যাশিত অনুবাদ করে না।
https://www.youtubetranscript.dev/api/v2YouTube লিংক বা ভিডিও ID দিন এবং সাধারণত কয়েক সেকেন্ডেই ট্রান্সক্রিপ্ট পান।
/transcribeএকটি অনুরোধে ৩,০০০ পর্যন্ত ভিডিও পাঠান এবং শেষ হলে বিজ্ঞপ্তি পান।
/batchপ্লেলিস্ট বা চ্যানেলকে ভিডিও তালিকায় রূপান্তর করুন, ট্রান্সক্রাইবের জন্য প্রস্তুত।
/playlists/resolveফাইল আপলোড করে স্পিচ-টু-টেক্সট দিয়ে ট্রান্সক্রাইব করুন।
/uploadsআপনার ট্রান্সক্রিপ্ট দেখুন, আনুন, অনুবাদ করুন বা মুছুন।
/transcriptsস্পিচ-টু-টেক্সট জব দেখুন বা শেষ হলে ওয়েবহুক পান।
/jobs/{job_id}নতুন: প্রতিটি ট্রান্সক্রিপ্ট উৎসের জন্য একটি mode প্যারামিটার
source ও allow_asr একসাথে ব্যবহার না করে auto, captions_only, human_captions_only, speech_to_text_only থেকে বেছে নিন। বিদ্যমান অনুরোধগুলো আগের মতোই কাজ করবে। কীভাবে কাজ করে দেখুন
Postman, Insomnia-তে ইমপোর্ট করতে, ক্লায়েন্ট তৈরি করতে বা ChatGPT / Claude-এ পেস্ট করতে YAML ডাউনলোড করুন।
একবারে একটি ভিডিওর জন্য দ্রুততম পথ। ক্যাপশন-ভিত্তিক ট্রান্সক্রিপ্ট কয়েক সেকেন্ডেই ফেরত আসে; ASR অ্যাসিঙ্ক্রোনাসভাবে চলে এবং /api/v2/jobs/{job_id} দিয়ে পোল করা হয়।
Transcribe a single YouTube video. Returns immediately for caption-based videos. With mode=auto it falls back to ASR (async) when captions are unavailable: you get status processing and a job_id to poll at /api/v2/jobs/{job_id}, or the result is POSTed to webhook_url if you set one. Responses include the mode the request ran with.
/api/v2/transcribevideostringআবশ্যকYouTube URL or 11-character video ID. Required unless upload_id is set.
upload_idstringTranscribe an uploaded media file instead of a YouTube video (see /uploads). Forces the ASR path (mode must be omitted or speech_to_text_only); webhook_url required. The upload id is returned as video_id in results.
modeauto | captions_only | human_captions_only | speech_to_text_onlyWhere the transcript comes from (recommended). auto: captions first, speech-to-text (ASR) only if the video has none. captions_only: any captions, never ASR. human_captions_only: human-made captions only. speech_to_text_only: always transcribe the audio. auto and speech_to_text_only can charge ASR credits. Replaces source + allow_asr; cannot be combined with them. Note: mode=auto is not the same as legacy source=auto (captions only, which is mode=captions_only). When omitted, your account default from the API Dashboard applies: auto for accounts created from October 2026, captions_only for older accounts unless changed. ASR modes work without webhook_url: poll the returned job_id.
languageISO 639-1Preferred transcript language (e.g. en). If unavailable, captions in another language may be returned: transcript.language reports the actual language.
sourceauto | manual | asrLegacy, still supported: use mode instead. Default: auto. asr transcribes the audio (async, requires webhook_url).
allow_asrbooleanLegacy, still supported: use mode=auto instead. Falls back to ASR if captions fail.
formatobject{ timestamp, paragraphs, words }: include extra structure in the transcript.
webhook_urluriWhen set, ASR results are POSTed to your URL. Optional with mode (poll the job_id instead); required for legacy source=asr. Ignored by captions_only and human_captions_only, which never use ASR.
asr_optionsobjectRich ASR config: language (+ codeSwitching, medicalMode, keyTerms), translateTo, speaker diarization (speakerLabels, speakerId + type/known values, multichannel, exact or min/max expected speakers), speech understanding (topics, summary, moderation, PII, profanity, sentiment), and formatting (punctuation, text formatting, filler words, custom date/phone/email patterns). Billable add-ons increase cost: preview with /transcribe/estimate. See the AsrOptions schema in the OpenAPI spec.
curl -X POST https://www.youtubetranscript.dev/api/v2/transcribe \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video": "dQw4w9WgXcQ",
"mode": "auto",
"language": "en",
"format": { "timestamp": true, "paragraphs": true }
}'{
"request_id": "req_abc123",
"status": "completed",
"data": {
"video_id": "dQw4w9WgXcQ",
"video_title": "Example video",
"transcript": {
"text": "Welcome to this tutorial...",
"language": "en",
"source": "auto",
"segments": [
{ "text": "Welcome to this tutorial.", "start": 0, "end": 2500 }
]
}
},
"credits_used": 1,
"mode": "auto"
}Dry-run credit estimate. Returns the ASR base cost plus any add-on surcharge for the requested asr_options without creating a job or charging credits.
/api/v2/transcribe/estimatevideostringআবশ্যকYouTube URL or 11-character video ID.
modeauto | captions_only | human_captions_only | speech_to_text_onlySame values as /transcribe. Use speech_to_text_only (or auto) to preview the ASR cost.
sourceauto | manual | asrLegacy, still supported: use mode instead. Defaults to asr for cost preview.
asr_optionsobjectSame shape as /transcribe. Add-on charges are prorated by duration.
curl -X POST https://www.youtubetranscript.dev/api/v2/transcribe/estimate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video": "dQw4w9WgXcQ",
"mode": "speech_to_text_only",
"asr_options": {
"speakerLabels": true,
"summarization": true,
"translateTo": "es"
}
}'{
"request_id": "req_abc123",
"video_id": "dQw4w9WgXcQ",
"source": "asr",
"mode": "speech_to_text_only",
"duration_seconds": 213,
"duration_minutes": 4,
"max_duration_minutes": 480,
"exceeds_max_duration": false,
"base_credits": 3,
"addon_credits": 2,
"estimated_credits": 5
}Poll a single transcription job. Use this for ASR jobs returned from /transcribe. Returns 202 while running and 200 when complete. Completed ASR jobs include asr_intelligence (summary, topics, sentiment, etc.) when those options were enabled. With speaker labels on (asr_options.speakerLabels or speakerId), every segment carries a speaker field ("A", "B", ... or a name or role with speakerId), and so does every word when you add include_words=true. There is no separate speakers or utterances object.
/api/v2/jobs/{job_id}job_idpathআবশ্যকIdentifier returned in the original transcribe response.
include_segmentsbooleanInclude segment-level timestamps in the transcript payload.
include_paragraphsbooleanInclude paragraph groupings.
include_wordsbooleanInclude word-level timestamps (ASR only). Each word carries a speaker field when speaker labels were on.
curl -X GET https://www.youtubetranscript.dev/api/v2/jobs/JOB_ID \
-H "Authorization: Bearer YOUR_API_KEY"{
"request_id": "req_abc123",
"status": "completed",
"data": {
"video_id": "dQw4w9WgXcQ",
"transcript": {
"text": "Welcome to this tutorial...",
"language": "en",
"source": "asr",
"segments": [
{ "text": "Welcome to this tutorial.", "start": 0, "end": 2500, "speaker": "A" },
{ "text": "Thanks for having me.", "start": 2600, "end": 4100, "speaker": "B" }
]
}
},
"credits_used": 6
}ASR পাইপলাইনের মাধ্যমে নিজের অডিও বা ভিডিও ফাইল ট্রান্সক্রাইব করুন। তিনটি ধাপ: আপলোড রেজিস্টার করুন, bytes signed URL-এ PUT করুন, finalize করুন: তারপর upload_id দিয়ে /transcribe কল করুন। ফলাফল আপনার webhook-এ আসে এবং যেকোনো ASR জবের মতো পোল করা যায়।
Register an audio/video file upload and get a signed URL. PUT the raw file bytes to signed_url (with the file's Content-Type), finalize via /uploads/{upload_id}/complete, then transcribe with upload_id on /transcribe. Max 2GB and 8 hours per file.
/api/v2/uploadsfilenamestringআবশ্যকOriginal filename. The extension is preserved for content sniffing.
mime_typestringআবশ্যকMust start with audio/ or video/ (e.g. audio/mpeg, video/mp4).
size_bytesintegerআবশ্যকFile size in bytes. Max 2147483648 (2GB).
duration_secintegerআবশ্যকMedia duration in seconds. Max 28800 (8 hours). Used for the ASR credit estimate.
curl -X POST https://www.youtubetranscript.dev/api/v2/uploads \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "interview.mp3",
"mime_type": "audio/mpeg",
"size_bytes": 48211234,
"duration_sec": 1820
}'
# Then PUT the raw file bytes to the returned signed_url:
curl -X PUT "SIGNED_URL_FROM_RESPONSE" \
-H "Content-Type: audio/mpeg" \
--data-binary @interview.mp3
# Then finalize:
curl -X POST https://www.youtubetranscript.dev/api/v2/uploads/UPLOAD_ID/complete \
-H "Authorization: Bearer YOUR_API_KEY"{
"upload_id": "up_a1B2c3D4",
"bucket": "asr-media",
"path": "user-uuid/up_a1B2c3D4/interview.mp3",
"token": "eyJhbGciOiJIUzI1NiJ9...",
"signed_url": "https://api.youtubetranscript.dev/storage/v1/object/upload/sign/asr-media/...?token=..."
}Finalize an upload after the PUT to signed_url succeeds. Verifies the file exists in storage and marks it ready. The upload can then be transcribed by passing upload_id to /transcribe (source="asr", webhook_url required).
/api/v2/uploads/{upload_id}/completeupload_idpathআবশ্যকUpload id returned by POST /uploads.
curl -X POST https://www.youtubetranscript.dev/api/v2/uploads/up_a1B2c3D4/complete \
-H "Authorization: Bearer YOUR_API_KEY"{
"upload_id": "up_a1B2c3D4",
"status": "uploaded",
"filename": "interview.mp3",
"duration_sec": 1820
}একটি রিকোয়েস্টেই অনেক ভিডিও ট্রান্সক্রাইব করুন, তারপর পোল করুন বা webhook-এর মাধ্যমে ফলাফল নিন।
Submit up to 3,000 videos in one request. Returns within 2 seconds; poll the returned poll_url or wait for the webhook.
/api/v2/batchvideo_idsstring[]আবশ্যকUp to 3,000 IDs depending on plan. Free = 10, Basic = 500, Pro = 1,500, Business = 3,000.
languageISO 639-1Preferred language for every video.
modeauto | captions_only | human_captions_only | speech_to_text_onlyWhere the transcript comes from (recommended). auto: captions first, speech-to-text (ASR) only if the video has none. captions_only: any captions, never ASR. human_captions_only: human-made captions only. speech_to_text_only: always transcribe the audio. auto and speech_to_text_only can charge ASR credits. Replaces source + allow_asr; cannot be combined with them. Note: mode=auto is not the same as legacy source=auto (captions only, which is mode=captions_only). For batch, auto and speech_to_text_only require webhook_url. When omitted, your API Dashboard default applies (an ASR default only when webhook_url is set).
sourceauto | manual | asrLegacy, still supported: use mode instead. Default: auto. source=asr requires webhook_url.
allow_asrbooleanLegacy, still supported: use mode=auto instead. webhook_url is required.
formatobject{ timestamp, paragraphs, words }: applied to every result.
webhook_urluriDelivers the completed batch payload. Required for mode=auto or speech_to_text_only (legacy: allow_asr=true or source=asr).
asr_optionsobjectRich ASR config applied to every video transcribed via ASR (same shape as /transcribe). Billable add-ons apply per video.
curl -X POST https://www.youtubetranscript.dev/api/v2/batch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_ids": ["dQw4w9WgXcQ", "jNQXAC9IVRw"],
"mode": "auto",
"webhook_url": "https://your-domain.com/webhook",
"format": { "timestamp": true }
}'{
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"results": [],
"summary": { "total": 2, "succeeded": 0, "failed": 0, "processing": 2 },
"poll_url": "https://www.youtubetranscript.dev/api/v2/batch/550e8400-e29b-41d4-a716-446655440000",
"created_at": "2026-05-15T10:00:00Z"
}Check the status of a batch. Returns 202 while processing and 200 when results are ready. Stop polling once status is "completed", "partial", or "failed": finished batches never change, and re-fetching one more than 60 times in 24h returns 429 with a Retry-After header.
/api/v2/batch/{batch_id}batch_idpathআবশ্যকBatch identifier returned from POST /batch.
curl -X GET https://www.youtubetranscript.dev/api/v2/batch/BATCH_ID \
-H "Authorization: Bearer YOUR_API_KEY"{
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"summary": { "total": 2, "succeeded": 2, "failed": 0, "processing": 0 },
"results": [
{ "request_id": "req_1", "status": "completed", "data": { "video_id": "dQw4w9WgXcQ" } },
{ "request_id": "req_2", "status": "completed", "data": { "video_id": "jNQXAC9IVRw" } }
],
"credits_used": 2,
"webhook_delivered": true,
"completed_at": "2026-05-15T10:04:00Z"
}সংরক্ষিত ট্রান্সক্রিপ্টের তালিকা দেখুন, আনুন, অনুবাদ করুন ও মুছুন, এবং async জবের তালিকা দেখুন। সব endpoint একই API-key অথেনটিকেশন গ্রহণ করে।
List your transcription jobs, newest first. Filter by status and paginate. Use the returned job_id with GET /api/v2/jobs/{job_id} to fetch a transcript.
/api/v2/jobspagequeryPage number (default 1).
limitqueryItems per page (default 50, max 100).
statusquerycompleted | processing | failed | requires_asr_confirmation.
curl "https://www.youtubetranscript.dev/api/v2/jobs?status=processing&limit=25" \
-H "Authorization: Bearer YOUR_API_KEY"{
"jobs": [
{
"job_id": "9c2...",
"video_id": "dQw4w9WgXcQ",
"video_title": "Example video",
"language": "en",
"source": "asr",
"status": "processing",
"error": null,
"credits_used": 0,
"created_at": "2026-07-06T12:00:00Z",
"started_at": "2026-07-06T12:00:01Z",
"completed_at": null
}
],
"count": 1,
"pagination": { "page": 1, "limit": 25, "total": 1, "totalPages": 1, "hasMore": false }
}List stored transcripts with search, status, language, and date filters. Metadata only (no full text) unless include_segments=true.
/api/v2/transcriptspagequeryPage number (default 1).
limitqueryItems per page (default 50, max 100).
searchqueryMatch video id, title, or transcript text.
statusqueryFilter by status; omit for succeeded.
languagequeryFilter by language code.
date_fromqueryISO date-time lower bound.
date_toqueryISO date-time upper bound.
include_segmentsqueryInclude segments in each item.
curl "https://www.youtubetranscript.dev/api/v2/transcripts?page=1&limit=50&status=succeeded" \
-H "Authorization: Bearer YOUR_API_KEY"{
"history": [
{
"id": "b1f...",
"video_id": "dQw4w9WgXcQ",
"video_title": "Example video",
"language": "en",
"source_kind": "auto",
"status": "succeeded",
"created_at": "2026-07-06T12:00:00Z",
"word_count": 1234,
"segment_count": 88,
"credits_used": 1
}
],
"count": 1,
"pagination": { "page": 1, "limit": 50, "total": 1, "totalPages": 1, "hasMore": false }
}Fetch the best owned transcript for a video, including asr_intelligence (summary, topics, sentiment, etc.), plus summary and mind_map when generated.
/api/v2/transcripts/{video_id}video_idpathআবশ্যকYouTube 11-character video ID.
idquerySpecific transcript/job id.
languagequeryPreferred language version.
sourcequeryauto | manual | asr.
include_timestampsqueryInclude segments (default true).
curl "https://www.youtubetranscript.dev/api/v2/transcripts/dQw4w9WgXcQ?language=en" \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "b1f...",
"video_id": "dQw4w9WgXcQ",
"language": "en",
"text": "Welcome to this tutorial...",
"segments": [{ "text": "Welcome to this tutorial.", "start": 0, "end": 2500 }],
"has_timestamps": true,
"source_kind": "asr",
"video_title": "Example video",
"summary": null,
"mind_map": null,
"asr_intelligence": {
"summary": "A short overview of the video...",
"topics": [{ "text": "Technology", "relevance": 0.92 }],
"sentiment": [{ "text": "Great tutorial", "sentiment": "POSITIVE" }]
}
}AI key moments, themes & keywords for a stored transcript: a short TL;DR, the key moments worth finding again (each a short label plus the exact quote, with where it starts and ends), its main themes, and each keyword with the timestamps where it's said. 1 credit per transcript, charged once: calling it again (or GET) is free. Waits up to ~25s; a 202 "processing" means it's paid for and still running, so poll GET. If detection fails the credit is refunded. Transcripts too short to analyse return empty themes for 0 credits. 402 without enough credits.
/api/v2/transcripts/{video_id}/themesvideo_idpathআবশ্যকYouTube 11-character video ID of a transcript you own.
idquerySpecific transcript/job id.
languagequeryWhich language version to analyse.
sourcequeryauto | manual | asr.
curl -X POST "https://www.youtubetranscript.dev/api/v2/transcripts/dQw4w9WgXcQ/themes?language=en" \
-H "Authorization: Bearer YOUR_API_KEY"{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"status": "completed",
"credits_used": 1,
"credits_remaining": 41,
"tldr": "A promise of lifelong loyalty, sung as a list of things he'll never do.",
"moments": [
{
"id": "m1",
"theme_id": "t1",
"label": "The six promises of the chorus",
"quote": "Never gonna give you up, never gonna let you down",
"color_hex": "#0d9488",
"start": 43000,
"end": 47500,
"segment_start": 4,
"segment_end": 5
}
],
"themes": [
{
"id": "t1",
"name": "Commitment",
"summary": "Promises never to leave or let the listener down.",
"color": "teal",
"color_hex": "#0d9488",
"share": 0.62,
"mention_count": 18,
"moment_count": 3,
"keywords": [
{
"id": "k1",
"term": "never gonna give you up",
"aliases": [],
"definition": "The song's central promise.",
"mention_count": 6,
"mentions": [{ "segment_index": 4, "start": 43000 }]
}
]
}
]
}Read key moments, themes & keywords you've already unlocked. Never charges and never starts the AI: returns status "locked" (with credits_required) until you POST, then "completed" with the same body as POST, or 202 "processing" while detection is still running.
/api/v2/transcripts/{video_id}/themesvideo_idpathআবশ্যকYouTube 11-character video ID of a transcript you own.
idquerySpecific transcript/job id.
languagequeryWhich language version to analyse.
sourcequeryauto | manual | asr.
curl "https://www.youtubetranscript.dev/api/v2/transcripts/dQw4w9WgXcQ/themes?language=en" \
-H "Authorization: Bearer YOUR_API_KEY"{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"status": "locked",
"credits_required": 1
}Translate an owned transcript into a target language using YouTube captions or the AI provider. Returns free if you already own the translation.
/api/v2/transcripts/{video_id}/translatevideo_idpathআবশ্যকYouTube 11-character video ID.
target_languageISO 639-1আবশ্যকLanguage to translate into.
source_languageISO 639-1Source transcript language to translate from.
providerai | youtubeTranslation provider.
allow_ai_fallbackbooleanFall back to AI when YouTube has no translation.
curl -X POST "https://www.youtubetranscript.dev/api/v2/transcripts/dQw4w9WgXcQ/translate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "target_language": "es", "provider": "ai" }'{
"success": true,
"message": "Translation completed",
"language": "es",
"credits_used": 4,
"provider_used": "ai"
}List the languages you already own for a video plus the YouTube translation targets available for it.
/api/v2/transcripts/{video_id}/languagesvideo_idpathআবশ্যকYouTube 11-character video ID.
include_youtube_defaultqueryInclude YouTube translation targets (default true).
curl "https://www.youtubetranscript.dev/api/v2/transcripts/dQw4w9WgXcQ/languages" \
-H "Authorization: Bearer YOUR_API_KEY"{
"video_id": "dQw4w9WgXcQ",
"languages": ["en", "es"],
"youtube_translation_languages": ["fr", "de", "ja"]
}Delete owned transcript(s) for a video. Optional language/source query params narrow the deletion; otherwise every language/source is removed. Also deletes bulk by id via POST /api/v2/transcripts/bulk-delete.
/api/v2/transcripts/{video_id}video_idpathআবশ্যকYouTube 11-character video ID.
languagequeryOnly delete this language.
sourcequeryOnly delete this source (auto | manual | asr).
curl -X DELETE "https://www.youtubetranscript.dev/api/v2/transcripts/dQw4w9WgXcQ" \
-H "Authorization: Bearer YOUR_API_KEY"{
"success": true,
"deleted": 2,
"message": "Successfully deleted 2 transcripts"
}আপনার ট্রান্সক্রাইব করা ভিডিওগুলো এক স্তরের ফোল্ডারে সাজান, যা ট্যাগের মতো কাজ করে: একটি ভিডিও অনেকগুলো ফোল্ডারে থাকতে পারে। সব অ্যাকাউন্টের জন্য ফ্রি, কোনো ক্রেডিট লাগে না। আগে থেকে তৈরি আউটপুটসহ আপনার ভিডিওর তালিকা নিন, ফোল্ডার অনুযায়ী ফিল্টার করে।
List your folders, alphabetically, with how many videos each holds. Folders are flat and work like tags: one video can be in many folders.
/api/v2/foldersFree: no creditscurl "https://www.youtubetranscript.dev/api/v2/folders" \
-H "Authorization: Bearer YOUR_API_KEY"{
"folders": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "Competitor research",
"video_count": 12,
"created_at": "2026-10-29T09:14:02Z",
"updated_at": "2026-10-29T09:14:02Z"
}
]
}Create a folder. Names are unique per account, ignoring case (409 if you already have one with that name). Up to 200 folders.
/api/v2/foldersFree: no creditsnamestringআবশ্যক1 to 80 characters.
curl -X POST https://www.youtubetranscript.dev/api/v2/folders \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Competitor research" }'{
"folder": {
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "Competitor research",
"video_count": 0,
"created_at": "2026-10-29T09:14:02Z",
"updated_at": "2026-10-29T09:14:02Z"
}
}Rename a folder. GET the same path returns one folder.
/api/v2/folders/{folder_id}Free: no creditsfolder_idpathআবশ্যকThe folder's id.
namestringআবশ্যক1 to 80 characters.
curl -X PATCH https://www.youtubetranscript.dev/api/v2/folders/{folder_id} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Competitors 2026" }'{
"folder": { "id": "7c9e6679-...", "name": "Competitors 2026", "video_count": 12, "created_at": "...", "updated_at": "..." }
}Delete a folder. Only the folder goes: its videos, transcripts and outputs stay in your account.
/api/v2/folders/{folder_id}Free: no creditsfolder_idpathআবশ্যকThe folder's id.
curl -X DELETE https://www.youtubetranscript.dev/api/v2/folders/{folder_id} \
-H "Authorization: Bearer YOUR_API_KEY"{ "deleted": true }Add videos you've transcribed to a folder. Videos already in it are skipped; ids you have no transcript for come back in not_found. Every language and output of a video comes with it.
/api/v2/folders/{folder_id}/videosFree: no creditsfolder_idpathআবশ্যকThe folder's id.
video_idsstring[]আবশ্যকUp to 100 video ids: YouTube ids, upload ids (upl_...) or Instagram ids (instagram_...).
curl -X POST https://www.youtubetranscript.dev/api/v2/folders/{folder_id}/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "video_ids": ["dQw4w9WgXcQ", "jNQXAC9IVRw"] }'{
"added": ["dQw4w9WgXcQ"],
"already_in_folder": ["jNQXAC9IVRw"],
"not_found": []
}Take videos out of a folder. Their transcripts are not touched. GET the same path lists the folder's videos, like GET /api/v2/videos?folder_id=.
/api/v2/folders/{folder_id}/videosFree: no creditsfolder_idpathআবশ্যকThe folder's id.
video_idsstring[]আবশ্যকUp to 100 video ids.
curl -X DELETE https://www.youtubetranscript.dev/api/v2/folders/{folder_id}/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "video_ids": ["dQw4w9WgXcQ"] }'{ "removed": ["dQw4w9WgXcQ"] }List your videos, one entry per video (its newest transcript), newest first, with the folders it's in and the outputs you've already made (summary, themes, mind_map, flashcards, notes, quiz, case_study), each with its languages.
/api/v2/videosFree: no creditsfolder_idqueryOnly this folder's videos.
unfiledquerytrue: only videos in no folder.
channelqueryOnly this channel's videos (a channel_name from GET /api/v2/videos/channels).
sortqueryrecent (default), oldest, longest, shortest or title.
searchqueryTitle contains, or an exact video id.
pagequery1-based. Default 1.
limitquery1 to 100. Default 50.
# Every video, newest first
curl "https://www.youtubetranscript.dev/api/v2/videos?limit=50" \
-H "Authorization: Bearer YOUR_API_KEY"
# Only one folder's videos
curl "https://www.youtubetranscript.dev/api/v2/videos?folder_id={folder_id}" \
-H "Authorization: Bearer YOUR_API_KEY"
# One channel's videos, longest first
curl "https://www.youtubetranscript.dev/api/v2/videos?channel=TED&sort=longest" \
-H "Authorization: Bearer YOUR_API_KEY"
# Videos that aren't in any folder yet
curl "https://www.youtubetranscript.dev/api/v2/videos?unfiled=true" \
-H "Authorization: Bearer YOUR_API_KEY"{
"videos": [
{
"video_id": "dQw4w9WgXcQ",
"transcript": { "id": "0b6f...", "language": "en", "source_kind": "manual" },
"title": "Example video",
"duration_seconds": 212,
"channel_name": "Example Channel",
"last_transcribed_at": "2026-10-28T18:02:11Z",
"folder_ids": ["7c9e6679-7425-40de-944b-e07fc1f90ae7"],
"outputs": {
"summary": ["en"],
"flashcards": ["en"],
"mind_map": ["en", "es"]
}
}
],
"pagination": { "page": 1, "limit": 50, "total": 1, "total_pages": 1, "has_more": false }
}The channels your videos come from, most videos first, for filtering GET /api/v2/videos?channel=.
/api/v2/videos/channelsFree: no creditscurl "https://www.youtubetranscript.dev/api/v2/videos/channels" \
-H "Authorization: Bearer YOUR_API_KEY"{
"channels": [
{ "channel_name": "TED", "video_count": 14 },
{ "channel_name": "Starter Story", "video_count": 9 }
]
}Put one video in exactly these folders, adding and removing as needed ([] takes it out of all of them). GET the same path returns its folder_ids.
/api/v2/videos/{video_id}/foldersFree: no creditsvideo_idpathআবশ্যকA video you have a transcript of.
folder_idsstring[]আবশ্যকYour folder ids.
curl -X PUT https://www.youtubetranscript.dev/api/v2/videos/dQw4w9WgXcQ/folders \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "folder_ids": ["7c9e6679-7425-40de-944b-e07fc1f90ae7"] }'{
"video_id": "dQw4w9WgXcQ",
"folder_ids": ["7c9e6679-7425-40de-944b-e07fc1f90ae7"]
}Videos you've transcribed that look like they belong in this folder, picked by AI from their titles (up to 20, best first). Add them with POST /api/v2/folders/{folder_id}/videos.
/api/v2/folders/{folder_id}/suggestionsFree: no creditsfolder_idpathআবশ্যকOne of your folders.
curl "https://www.youtubetranscript.dev/api/v2/folders/7c9e6679-7425-40de-944b-e07fc1f90ae7/suggestions" \
-H "Authorization: Bearer YOUR_API_KEY"{
"folder_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"videos": [
{ "video_id": "dQw4w9WgXcQ", "title": "Keyword research for beginners", "channel_name": "Backlinko", "duration_seconds": 912 }
]
}Which of your folders a video fits (up to 3), picked by AI from its title, and a name for a new folder when none fits well (new_folder, or null).
/api/v2/videos/{video_id}/folder-suggestionsFree: no creditsvideo_idpathআবশ্যকA video you have a transcript of.
curl "https://www.youtubetranscript.dev/api/v2/videos/dQw4w9WgXcQ/folder-suggestions" \
-H "Authorization: Bearer YOUR_API_KEY"{
"video_id": "dQw4w9WgXcQ",
"folders": [{ "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "name": "SEO Hacks" }],
"new_folder": null
}আপনার সংরক্ষিত ট্রান্সক্রিপ্টে কোনো শব্দ বা বাক্যাংশের প্রতিটি উল্লেখ টাইমস্ট্যাম্পসহ খুঁজুন। সাধারণ টেক্সট মিল, কোনো AI নয়। সব অ্যাকাউন্টের জন্য বিনামূল্যে, কোনো ক্রেডিট লাগে না। কীওয়ার্ড তালিকা সেট হিসেবে সংরক্ষণ করুন এবং অন্য ভাষায় একই শব্দ পান।
Find every mention of your keywords across the transcripts you've saved, with timestamps and a snippet around each one. Plain text match (no AI). A transcript matches when it mentions any keyword. Results are sorted by most mentions, then newest.
/api/v2/library/searchFree: no creditskeywordsstring[]আবশ্যকWords or phrases to find (up to 50). Required unless keyword_set_id is set.
keyword_set_idstringUse a saved keyword set's keywords instead of keywords.
excludestring[]Leave out transcripts that mention any of these.
whole_wordbooleanMatch whole words only (default true). Languages written without spaces, like Chinese or Japanese, always match as written.
video_idsstring[]Search only these videos (up to 500). Default: your 1,000 most recent transcripts.
limitintegerTranscripts to return, up to 100 (default 50).
curl -X POST https://www.youtubetranscript.dev/api/v2/library/search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "keywords": ["MRR", "churn"], "exclude": ["sponsor"], "whole_word": true }'{
"keywords": ["MRR", "churn"],
"scanned": 412,
"results": [
{
"transcript_id": "3f2b7c1e-8a4d-4f7e-9c11-2d5e6f7a8b9c",
"video_id": "dQw4w9WgXcQ",
"title": "I quit my job to build this micro-SaaS",
"channel_id": "UCxRw2DkbN2qY3Rr1oQ4uWzQ",
"channel_name": "Starter Story",
"language": "en",
"created_at": "2026-10-25T14:02:11Z",
"word_count": 6120,
"duration_seconds": 2140,
"total_matches": 3,
"counts": { "MRR": 2, "churn": 1 },
"matches": [
{ "keyword": "MRR", "start": 184.2, "snippet": "…we crossed $31,500 MRR last month…" }
]
}
]
}The same keywords in other languages, so a search also finds videos spoken in them (search matches words as written). Suggestions only: add the terms you want to keywords.
/api/v2/library/keywords/suggestFree: no creditskeywordsstring[]আবশ্যকThe keywords to translate.
languagesstring[]Up to 8 ISO 639-1 codes. Default: the languages your transcripts are in.
curl -X POST https://www.youtubetranscript.dev/api/v2/library/keywords/suggest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "keywords": ["pricing"], "languages": ["es", "de"] }'{
"detected_language": "en",
"languages": ["es", "de"],
"suggestions": [
{ "language": "es", "name": "Spanish", "keywords": [{ "source": "pricing", "terms": ["precios", "precio"] }] },
{ "language": "de", "name": "German", "keywords": [{ "source": "pricing", "terms": ["Preisgestaltung", "Preise"] }] }
]
}Your saved keyword sets, most recently changed first.
/api/v2/library/keyword-setsFree: no creditscurl "https://www.youtubetranscript.dev/api/v2/library/keyword-sets" \
-H "Authorization: Bearer YOUR_API_KEY"{
"keyword_sets": [
{
"id": "8b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"name": "SaaS metrics",
"keywords": ["MRR", "ARR", "churn"],
"created_at": "2026-10-30T09:12:00Z",
"updated_at": "2026-10-31T10:00:00Z"
}
]
}Save a list of keywords under a name, to search with again (keyword_set_id).
/api/v2/library/keyword-setsFree: no creditsnamestringআবশ্যকThe set's name.
keywordsstring[]আবশ্যকWords or phrases (up to 50).
curl -X POST https://www.youtubetranscript.dev/api/v2/library/keyword-sets \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "SaaS metrics", "keywords": ["MRR", "ARR", "churn"] }'{
"keyword_set": {
"id": "8b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"name": "SaaS metrics",
"keywords": ["MRR", "ARR", "churn"],
"created_at": "2026-10-31T10:00:00Z",
"updated_at": "2026-10-31T10:00:00Z"
}
}Rename a keyword set or replace its keywords.
/api/v2/library/keyword-sets/{set_id}Free: no creditsset_idpathআবশ্যকOne of your keyword sets.
namestringNew name.
keywordsstring[]The new full list of keywords.
curl -X PATCH https://www.youtubetranscript.dev/api/v2/library/keyword-sets/8b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "keywords": ["MRR", "ARR", "churn", "LTV"] }'{
"keyword_set": {
"id": "8b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"name": "SaaS metrics",
"keywords": ["MRR", "ARR", "churn"],
"created_at": "2026-10-31T10:00:00Z",
"updated_at": "2026-10-31T10:00:00Z"
}
}Delete a keyword set.
/api/v2/library/keyword-sets/{set_id}Free: no creditsset_idpathআবশ্যকOne of your keyword sets.
curl -X DELETE https://www.youtubetranscript.dev/api/v2/library/keyword-sets/8b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e \
-H "Authorization: Bearer YOUR_API_KEY"{ "deleted": true }প্লেলিস্টকে ভিডিও ID-তে রূপান্তর করুন, /api/v2/batch দিয়ে ট্রান্সক্রাইব করুন, তারপর প্লেলিস্ট ব্যাচ ও হিস্ট্রি দেখুন।
Resolve a YouTube playlist by URL or ID into its video list (metadata only). Pair the returned video_id values with /api/v2/batch to transcribe them.
/api/v2/playlists/resolveপেইড প্ল্যানplaylist_urlstringPlaylist URL. One of playlist_url or playlist_id is required.
playlist_idstringPlaylist ID (the list= value).
limitintegerMax videos returned (1-100).
curl -X POST https://www.youtubetranscript.dev/api/v2/playlists/resolve \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "playlist_url": "https://www.youtube.com/playlist?list=PLxxxx", "limit": 100 }'{
"playlist_id": "PLxxxx",
"title": "My playlist",
"total": 42,
"truncated": false,
"items": [
{ "video_id": "dQw4w9WgXcQ", "title": "Example video" }
]
}Fetch a playlist batch and per-video transcription job status. For overall batch progress, poll GET /api/v2/batch/{batch_id}.
/api/v2/playlists/{playlist_id}playlist_idpathআবশ্যকBatch ID returned from /playlists/resolve.
curl "https://www.youtubetranscript.dev/api/v2/playlists/{playlist_batch_id}" \
-H "Authorization: Bearer YOUR_API_KEY"{
"playlist": { "id": "3f1...", "playlist_id": "PLxxxx", "title": "My playlist" },
"videos": [
{ "video_id": "dQw4w9WgXcQ", "video_title": "Example video", "status": "succeeded" }
]
}List recent playlist batches for the authenticated user.
/api/v2/playlists/historycurl "https://www.youtubetranscript.dev/api/v2/playlists/history" \
-H "Authorization: Bearer YOUR_API_KEY"{
"history": [
{ "id": "3f1...", "playlist_id": "PLxxxx", "title": "My playlist", "total_videos": 42 }
],
"count": 1
}চ্যানেল ট্রান্সক্রিপশন ফ্লো:1. POST /api/v2/channels/resolve: চ্যানেলের আপলোডগুলো আনুন (শুধু ভিডিও মেটাডেটা)।2. POST /api/v2/batch: ট্রান্সক্রিপশন শুরু করতে ফেরত আসা video_id মানগুলো পাঠান। কাজ শেষে ফলাফল পেতে একটি webhook_url ব্যবহার করুন।3. GET /api/v2/batch/{batch_id}: সামগ্রিক অগ্রগতি ও সমন্বিত ফলাফলের জন্য ব্যাচ পোল করুন।4. GET /api/v2/channels/{channel_id}: প্রতিটি ভিডিওর জব স্ট্যাটাসসহ চ্যানেল ব্যাচ আনুন; /channels/history আগের চ্যানেল ব্যাচগুলোর তালিকা দেয়।
Fetch the uploads of a YouTube channel by URL, channel ID, or @handle. Returns video metadata only: pair the returned video_id values with /api/v2/batch to transcribe them.
/api/v2/channels/resolveপেইড প্ল্যানchannel_urlstringআবশ্যকYouTube channel URL, channel ID, or @handle. One of channel_url, channel_id, or handle must be provided. Handles are the public ID without the @ (for https://www.youtube.com/@jawed, the ID is jawed).
limitintegerMaximum uploads returned. Defaults to the plan maximum.
Per-request cap: Basic 500 videos · Pro 1,500 videos · Business 3,000 videos. Monthly job cap: Basic 3 · Pro 8 · Business unlimited.
Plan-based: Free 1 req/s · Basic 25 req/s · Pro 50 req/s · Business 100 req/s. Exceeding the limit returns 429 with a Retry-After header.
curl -X POST https://www.youtubetranscript.dev/api/v2/channels/resolve \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"handle": "@youtube",
"limit": 50
}'{
"channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"channel_title": "YouTube",
"subscriber_count": 42000000,
"video_count": 1200,
"total": 1,
"truncated": false,
"items": [
{
"video_id": "dQw4w9WgXcQ",
"title": "Latest upload",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"published_at": "2026-05-01T12:00:00Z",
"duration_seconds": 420
}
]
}Fetch a channel batch and the per-video transcription job status. For overall batch status (counts + progress), poll GET /api/v2/batch/{batch_id} instead: use this endpoint when you also need each video's individual job state.
/api/v2/channels/{channel_id}channel_idpathআবশ্যকBatch ID returned from /channels/resolve.
curl -X GET https://www.youtubetranscript.dev/api/v2/channels/CHANNEL_BATCH_ID \
-H "Authorization: Bearer YOUR_API_KEY"{
"channel": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"channel_title": "YouTube",
"total_videos": 2,
"completed_count": 1,
"failed_count": 0,
"status": "processing",
"created_at": "2026-05-15T10:00:00Z"
},
"videos": [
{
"id": "job_123",
"video_id": "dQw4w9WgXcQ",
"video_title": "Latest upload",
"status": "succeeded",
"created_at": "2026-05-15T10:00:00Z",
"finished_at": "2026-05-15T10:00:10Z"
}
]
}List recent channel batches for the authenticated user.
/api/v2/channels/historylimitqueryMax items (default 50, max 100).
curl -X GET "https://www.youtubetranscript.dev/api/v2/channels/history?limit=50" \
-H "Authorization: Bearer YOUR_API_KEY"{
"history": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"channel_title": "YouTube",
"total_videos": 25,
"completed_count": 25,
"failed_count": 0,
"status": "completed",
"created_at": "2026-05-15T10:00:00Z",
"completed_at": "2026-05-15T10:12:00Z"
}
],
"count": 1
}Newest uploads from the channels you transcribe most, excluding videos you have already transcribed. Results are interleaved across channels, newest first. Free: no credits are charged. Pass the returned url or video_id to /api/v2/transcribe or /api/v2/batch.
/api/v2/recommendations/videoslimitqueryMax videos returned (default 6, max 30).
channelsqueryHow many of your top channels to draw from (default 3, max 10).
curl -X GET "https://www.youtubetranscript.dev/api/v2/recommendations/videos?limit=6" \
-H "Authorization: Bearer YOUR_API_KEY"{
"recommendations": [
{
"video_id": "dQw4w9WgXcQ",
"title": "Latest upload",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg",
"published_at": "2026-10-17T15:00:00Z",
"duration_seconds": 1089,
"channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"channel_title": "YouTube"
}
],
"channels": [
{
"channel_id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"channel_title": "YouTube",
"transcribed_count": 12
}
],
"count": 1
}সার্চ করুন, তারপর ট্রান্সক্রাইব করুন:1. GET /api/v2/search/videos (/shorts, /channels, /playlists): কীওয়ার্ড দিয়ে কন্টেন্ট খুঁজুন। প্রতি অনুরোধে ১ ক্রেডিট।2. ভিডিওর url POST /api/v2/transcribe-এ পাঠান, অথবা চ্যানেল বা প্লেলিস্টের url /api/v2/channels/resolve বা /api/v2/playlists/resolve-এ পাঠান।3. আরও ফলাফল পেতে next_page_token-কে page_token হিসেবে পাঠান (প্রতি পেজে ১ ক্রেডিট)।মিল কীভাবে কাজ করে: ফলাফল YouTube-এর নিজের সার্চের মতোই, প্রতিটি ভিডিওর শিরোনাম, বিবরণ ও কনটেন্ট অনুযায়ী প্রাসঙ্গিকতা ধরে সাজানো। হুবহু শব্দ দিয়ে ফিল্টার করা হয় না, তাই কিছু ফলাফলে আপনার খোঁজা সব শব্দ নাও থাকতে পারে। হুবহু মিল দরকার হলে নিজের দিকে title দিয়ে ফলাফল ফিল্টার করুন।
Search YouTube videos by keyword, ranked by relevance like YouTube's own search (not filtered by exact words). Live streams are included with type "live". Pass a result's url to /api/v2/transcribe to get its transcript. 1 credit per request, including each next page. Refunded if the search fails.
/api/v2/search/videosqqueryআবশ্যকSearch text, up to 200 characters.
durationqueryVideo length: under_3_min, 3_to_20_min or over_20_min.
upload_datequeryOnly results uploaded within: today, this_week, this_month or this_year.
sort_byqueryrelevance (default) or popular.
regionqueryTwo-letter country code to localize results, e.g. US.
page_tokenqueryThe next_page_token from a previous response, to get the next page. null means there are no more results.
Plan-based: Free 1 req/s · Basic 25 req/s · Pro 50 req/s · Business 100 req/s. Exceeding the limit returns 429 with a Retry-After header.
curl "https://www.youtubetranscript.dev/api/v2/search/videos?q=python%20tutorial&duration=over_20_min" \
-H "Authorization: Bearer YOUR_API_KEY"{
"request_id": "6f1c2a9e-4b7d-4f2a-9c1e-2d3b4a5c6d7e",
"type": "videos",
"query": "python tutorial",
"results": [
{
"type": "video",
"video_id": "kqtD5dpn9C8",
"url": "https://www.youtube.com/watch?v=kqtD5dpn9C8",
"title": "Python for Beginners - Learn Coding with Python in 1 Hour",
"thumbnail": "https://i.ytimg.com/vi/kqtD5dpn9C8/hq720.jpg",
"channel": {
"channel_id": "UCWv7vMbMWH4-V0ZXdmDpPBA",
"title": "Programming with Mosh",
"handle": "programmingwithmosh",
"url": "https://www.youtube.com/@programmingwithmosh",
"thumbnail": "https://yt3.ggpht.com/..."
},
"view_count": 25574982,
"view_count_text": "25,574,982 views",
"published_at": null,
"published_text": "6 years ago",
"duration_seconds": 3606,
"duration_text": "1:00:06",
"badges": []
}
],
"next_page_token": "cDA6RWdJUUFV...",
"credits_used": 1,
"credits_remaining": 4602
}Search YouTube Shorts by keyword, ranked by relevance like YouTube's own search (not filtered by exact words). 1 credit per request, including each next page. Refunded if the search fails.
/api/v2/search/shortsqqueryআবশ্যকSearch text, up to 200 characters.
upload_datequeryOnly results uploaded within: today, this_week, this_month or this_year.
sort_byqueryrelevance (default) or popular.
regionqueryTwo-letter country code to localize results, e.g. US.
page_tokenqueryThe next_page_token from a previous response, to get the next page. null means there are no more results.
Plan-based: Free 1 req/s · Basic 25 req/s · Pro 50 req/s · Business 100 req/s. Exceeding the limit returns 429 with a Retry-After header.
curl "https://www.youtubetranscript.dev/api/v2/search/shorts?q=python%20tips" \
-H "Authorization: Bearer YOUR_API_KEY"{
"request_id": "0b8e7d6c-5a4f-4e3d-8c2b-1a0f9e8d7c6b",
"type": "shorts",
"query": "python tips",
"results": [
{
"type": "short",
"video_id": "gbYLsUngzLc",
"url": "https://www.youtube.com/watch?v=gbYLsUngzLc",
"title": "Top 10 Most Important Python Functions You Must Know!",
"thumbnail": "https://i.ytimg.com/vi/gbYLsUngzLc/oar2.jpg",
"channel": null,
"view_count": 1200000,
"view_count_text": "1.2M views",
"published_at": null,
"published_text": null,
"duration_seconds": null,
"duration_text": null,
"badges": []
}
],
"next_page_token": "cDA6RWdJUUNR...",
"credits_used": 1,
"credits_remaining": 4601
}Search YouTube channels by keyword. Pass a result's url to /api/v2/channels/resolve to list its videos. 1 credit per request, including each next page. Refunded if the search fails.
/api/v2/search/channelsqqueryআবশ্যকSearch text, up to 200 characters.
upload_datequeryOnly results uploaded within: today, this_week, this_month or this_year.
sort_byqueryrelevance (default) or popular.
regionqueryTwo-letter country code to localize results, e.g. US.
page_tokenqueryThe next_page_token from a previous response, to get the next page. null means there are no more results.
Plan-based: Free 1 req/s · Basic 25 req/s · Pro 50 req/s · Business 100 req/s. Exceeding the limit returns 429 with a Retry-After header.
curl "https://www.youtubetranscript.dev/api/v2/search/channels?q=python" \
-H "Authorization: Bearer YOUR_API_KEY"{
"request_id": "9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
"type": "channels",
"query": "python",
"results": [
{
"type": "channel",
"channel_id": "UCKQdc0-Targ4nDIAUrlfKiA",
"url": "https://www.youtube.com/@PythonSimplified",
"title": "Python Simplified",
"handle": "PythonSimplified",
"description": "Hi everyone! My name is Mariya and I'm a software developer...",
"thumbnail": "https://yt3.googleusercontent.com/...",
"subscriber_count": 286000,
"subscriber_count_text": "286K",
"badges": ["Verified"]
}
],
"next_page_token": "cDA6RWdJUUFn...",
"credits_used": 1,
"credits_remaining": 4600
}Search YouTube playlists by keyword. Pass a result's url to /api/v2/playlists/resolve to list its videos. 1 credit per request, including each next page. Refunded if the search fails.
/api/v2/search/playlistsqqueryআবশ্যকSearch text, up to 200 characters.
upload_datequeryOnly results uploaded within: today, this_week, this_month or this_year.
sort_byqueryrelevance (default) or popular.
regionqueryTwo-letter country code to localize results, e.g. US.
page_tokenqueryThe next_page_token from a previous response, to get the next page. null means there are no more results.
Plan-based: Free 1 req/s · Basic 25 req/s · Pro 50 req/s · Business 100 req/s. Exceeding the limit returns 429 with a Retry-After header.
curl "https://www.youtubetranscript.dev/api/v2/search/playlists?q=python%20course" \
-H "Authorization: Bearer YOUR_API_KEY"{
"request_id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"type": "playlists",
"query": "python course",
"results": [
{
"type": "playlist",
"playlist_id": "PLsyeobzWxl7omDoEYrrf3oXvXxa6MPgek",
"url": "https://www.youtube.com/playlist?list=PLsyeobzWxl7omDoEYrrf3oXvXxa6MPgek",
"title": "Python Tutorial | Complete Python Course (Beginner to Advanced)",
"thumbnail": "https://i.ytimg.com/vi/YZkyL-f-YXY/hq720.jpg",
"video_count": 54,
"first_video_id": "YZkyL-f-YXY",
"channel": {
"channel_id": "UC59K-uG2A5ogwIrHw4bmlEg",
"title": "Telusko",
"handle": "Telusko",
"url": "https://www.youtube.com/@Telusko",
"thumbnail": null
}
}
],
"next_page_token": "cDA6RWdJUUF3...",
"credits_used": 1,
"credits_remaining": 4599
}অফিশিয়াল SDK, Claude ও Cursor-এর জন্য একটি MCP সার্ভার, একটি কাস্টম GPT, এবং Make ও n8n-এর জন্য তৈরি টেমপ্লেট।
YouTube Transcript MCP সার্ভার Claude Desktop, Cursor বা যেকোনো MCP-সামঞ্জস্যপূর্ণ ক্লায়েন্টে যুক্ত করুন। এতে ভিডিও ট্রান্সক্রাইব, বিদ্যমান ট্রান্সক্রিপ্ট আনা ও ব্যবহার যাচাইয়ের টুল যুক্ত হয়।
claude mcp add --transport http youtubetranscript https://mcp.youtubetranscript.dev --header "x-api-token: YOUR_API_KEY"প্রথম সারির TypeScript types, retries, pagination helpers এবং webhook signature verification।
npm install youtube-transcript-apiSync + async ক্লায়েন্ট, type stubs এবং ব্যাচ ও webhook ফ্লোর জন্য helpers।
pip install youtubetranscriptdevapiআমাদের কাস্টম GPT ChatGPT-তে যুক্ত করুন এবং সাধারণ ভাষায় যেকোনো YouTube ভিডিওর সারাংশ, উদ্ধৃতি, অনুবাদ বা প্রশ্নোত্তর করুন। ভেতরে /api/v2/gpt/* দ্বারা চালিত।
বিদ্যমান অটোমেশনে ট্রান্সক্রিপশন যোগ করতে টেমপ্লেট ইমপোর্ট করুন (বা স্নিপেট কপি করুন): Notion, Sheets, Slack, Airtable, Zapier-ধাঁচের ফ্লো।
Module: HTTP > Make a request
- URL: https://www.youtubetranscript.dev/api/v2/transcribe
- Method: POST
- Headers:
Authorization: Bearer {{connection.api_key}}
Content-Type: application/json
- Body type: Raw / JSON
- Request content:
{
"video": "{{1.video_url}}",
"format": { "timestamp": true }
}{
"name": "Transcribe Video",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://www.youtubetranscript.dev/api/v2/transcribe",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={ \"video\": $json.video_url }"
}
}OpenAPI স্পেক Postman, Insomnia বা OpenAPI 3 সমর্থন করে এমন যেকোনো টুলে ইমপোর্ট করুন।
এরর code ও message-সহ একটি JSON body ফেরত দেয়। HTTP স্ট্যাটাস বিভাগ নির্দেশ করে।
| HTTP স্ট্যাটাস | এরর কোড | বিবরণ |
|---|---|---|
| 400 | invalid_request | Invalid JSON or missing required fields |
| 401 | invalid_api_key | Missing or invalid API key |
| 402 | payment_required | Insufficient credits |
| 404 | no_captions | No captions available and ASR not used |
| 429 | rate_limit_exceeded | Too many requests, check Retry-After |
| 500 | internal_error | Server error, retry with backoff |
ধারাবাহিক রিকোয়েস্ট ও ব্যাচ সাইজের জন্য প্রতিটি প্ল্যানের সীমা। সীমা ছাড়িয়ে গেলে Retry-After হেডারসহ 429 ফেরত আসে।
| প্ল্যান | রিকোয়েস্ট | ব্যাচ সাইজ |
|---|---|---|
| Free | 1 req/s | 10 videos |
| Basic | 25 req/s | 500 videos |
| Pro | 50 req/s | 1,500 videos |
| Business | 100 req/s | 3,000 videos |
লঞ্চ করতে সাহায্য দরকার? যোগাযোগ করুন: আমরা সাধারণত কয়েক ঘণ্টার মধ্যে উত্তর দিই।
ইনস্টাগ্রাম রিল ট্রান্সক্রাইব করুন
Transcribe an Instagram Reel. Uses the Reel's captions when it has them, otherwise transcribes its audio (about 15 to 20 seconds). The transcript is saved like a YouTube one with video_id instagram_<code>: read it with GET /api/v2/transcripts/{video_id} and file it in folders. Transcribing a Reel you already have is free.
/api/v2/social/transcribe1 credit with captions; otherwise 1 credit per 2 minutes of audio (minimum 1). Refunded if it fails.urlstringআবশ্যকInstagram Reel or video post link, e.g. https://www.instagram.com/reel/C9xYz12AbCd/
languageISO 639-1Preferred transcript language.