# yt-dlp Subtitles: HTTP Error 429 Too Many Requests

Source: https://transcript-yt.com/blog/yt-dlp-subtitles-429-too-many-requests · Updated 2026-11-10 · TranscriptYT

> yt-dlp's "Unable to download video subtitles: HTTP Error 429" means YouTube is rate-limiting your IP's caption requests. Slow down with --sleep-subtitles, change IP, or fetch captions through a transcript API.

When you download subtitles for many videos, yt-dlp starts failing with "Unable to download video subtitles for 'en': HTTP Error 429: Too Many Requests". YouTube's caption endpoint rate-limits by IP, and it is far stricter with datacenter IPs and with bursts of requests. The limit eventually lifts, but a bulk job rarely finishes without a change of approach.

## The error

```
yt-dlp --write-auto-subs --sub-langs en --skip-download -a video_ids.txt
# ERROR: Unable to download video subtitles for 'en':
# HTTP Error 429: Too Many Requests
```

## Slow down and ask for less

Each language is a separate request, so --sub-langs all multiplies the load. Ask only for what you need and add delays. This is enough for a few hundred videos from a residential IP.

```
yt-dlp --skip-download --write-subs --write-auto-subs \
  --sub-langs "en.*" --sub-format vtt \
  --sleep-subtitles 5 --sleep-requests 1 \
  -a video_ids.txt
```

## Spread the requests across IPs

Rotating residential proxies (--proxy) give each request a different exit, which keeps any one IP under the limit. You pay per GB and handle failed exits yourself.

## Or fetch captions from an API built for bulk

The [TranscriptYT API](https://transcript-yt.com/api) takes up to 500 videos in one batch request, or a playlist or channel URL, and returns each transcript in JSON, text, SRT, or VTT. Paid plans allow 200 requests a minute, rate limits and retries on the YouTube side are handled for you, and failed videos aren't billed.

```
curl -X POST "https://transcript-yt.com/v1/transcripts" \
  -H "Authorization: Bearer $TRANSCRIPTYT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"playlist": "https://www.youtube.com/@mkbhd", "limit": 50, "format": "vtt"}'
```

## FAQ

### What does HTTP Error 429 mean in yt-dlp subtitles?

YouTube is rate-limiting caption downloads from your IP address. It isn't a yt-dlp bug, and it usually clears after minutes to hours if you stop.

### How do I avoid 429 when downloading subtitles in bulk?

Add delays with --sleep-subtitles 5 and --sleep-requests 1, download only the subtitle languages you need with --sub-langs, and spread jobs over time. For thousands of videos, use rotating proxies or a transcript API.

### Does --sleep-interval apply to subtitles?

No. --sleep-interval waits before each video download. Use --sleep-subtitles for subtitle downloads and --sleep-requests between the extraction requests.

### Why do I get 429 on the first request from a server?

Cloud IP ranges are often already rate-limited by heavy use from other customers. The same command may work from home and fail on a fresh VPS.
