GitHubLog in
Batch Transcript API

Batch Transcript API

Fetches transcripts for a list of videos in one request, processed concurrently. The list can mix YouTube, TikTok and Instagram URLs and bare YouTube ids. Each entry returns its own result: the transcript, a processing job for a video in AI Fallback Transcription, or an error. The maximum batch size depends on the plan.

Caption transcript1 creditPer delivered entry
AI Fallback Transcription1 / 5 minCaptionless entries, billed on delivery
Failed entriesFreeAn entry that fails costs nothing
POST/api/v2/transcripts/batchidempotent

Body parameters

Video URLs or bare YouTube IDs, from any supported platform. Up to your plan's batch cap: 50 on free/Basic/Pro, 500 on Mega/Scale. Also accepted as the legacy key videoIds (send one or the other, not both).

curl https://transcriptfetch.com/api/v2/transcripts/batch \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"video_ids":["dQw4w9WgXcQ","https://www.tiktok.com/@user/video/7137723462233555205"],"mode":"auto"}'
SuccessExample response envelope
{
  "ok": true,
  "request_id": "req_…",
  "data": {
    "kind": "transcript_batch",
    "results": [
      {
        "video_id": "dQw4w9WgXcQ",
        "outcome": "ok",
        "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "title": "Example video",
        "channel": "Example Channel",
        "duration": 212,
        "language": "en",
        "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg",
        "source": "captions",
        "text": "Full transcript text …",
        "segments": [
          {
            "start": 0,
            "duration": 3.5,
            "text": "Full transcript …"
          }
        ],
        "bytes": 14233
      },
      {
        "video_id": "9bZkp7q19f0",
        "outcome": "processing",
        "job_id": "asr_…",
        "poll_url": "/api/v2/transcripts/jobs/asr_…"
      },
      {
        "video_id": "jNQXAC9IVRw",
        "outcome": "error",
        "error": {
          "code": "no_captions",
          "number": 4103,
          "message": "No caption track (manual or auto-generated) is available.",
          "docs": "https://transcriptfetch.com/docs/errors/no_captions",
          "retry_with": {
            "mode": "auto"
          }
        }
      }
    ]
  },
  "usage": {
    "credits_spent": 1,
    "balance": 97
  }
}

Frequently asked questions

How many videos can one batch hold?

It depends on the plan, as stated on the endpoint: a smaller cap on the free tier, Basic and Pro, and a larger one on Mega and Scale. A batch over your cap fails whole, before anything is fetched or charged.

What happens to videos without captions in a batch?

With the default mode, auto, each one goes to AI Fallback Transcription: its entry comes back as processing with a job_id, costs nothing on this call, and is billed on delivery. Send mode captions to have such entries fail as no_captions instead.

Do failed entries cost credits?

No. Only successfully delivered caption transcripts are billed on the call, and AI Fallback Transcription only on delivery. An entry that is private, removed or blocked reports an error and costs nothing.

How do I collect the transcripts that were still processing?

Re-send the same batch after the jobs have had time to finish. Finished entries return their text from the cache and are not charged twice; polling each job_id is optional.