This browser does not support JavaScript

How to Fix “ERROR: unable to download video data: HTTP Error 403:...”

Post Time: 2026-03-24 Update Time: 2026-03-24

When you run yt-dlp and see ERROR: unable to download video data: HTTP Error 403: Forbidden, the server isn’t saying the video is gone. It’s saying it understands your request but refuses to authorize the actual video file. You can still see the title, thumbnail, and format list — but the moment yt-dlp tries to grab the real media stream, it fails.

This is one of the most common yt-dlp errors, and the good news is that most cases are fixed in under 10 minutes once you apply the matching fix.

Quick Fixes to Try Now

One-command

yt-dlp -U --rm-cache-dir --cookies-from-browser chrome -4 --impersonate chrome "YOUR_VIDEO_URL"

Replace chrome with firefox, edge, or safari if needed. This single line hits the top fixes and solves most of 403 errors instantly.

Quick fixes to try first

Try these three actions in this exact order:

1. Update yt-dlp — yt-dlp -U  

2. Clear the cache — yt-dlp --rm-cache-dir  

3. Add fresh browser cookies — yt-dlp --cookies-from-browser chrome "VIDEO_URL" (detailed instructions below).

Understanding This Error Means

A 403 in yt-dlp is an authorization or client-validation refusal at the media URL level — not “video removed.” The server wants proof that the request comes from a valid browser session or a supported client.

error unable to download video data http error 403 forbidden

Current YouTube protections include:

Missing or stale cookies (age-restricted, private, members-only, or region-gated videos)

Mismatched client headers or impersonation

Unresolved JavaScript challenges (requires external JS runtime)

Missing PO Token for certain formats/clients (yt-dlp cannot generate these itself).

Diagnose Your Symptom First

Match what you see to the most likely cause:

Metadata loads but download fails instantly → Signature/token/PO-token issue (most common)  

Works in browser but not yt-dlp → Missing cookies, headers, or client identity  

One format fails while another succeeds → Format-specific block  

Works on one device/network but not another → Cache, cookies, IP, or rate-limiting  

Starts downloading then fails midway → Mid-download token expiry or rate limit

Step-by-Step Fixes

Follow these in order. Most users do not need to go beyond step 3:

Step 1. Update yt-dlp

YouTube changes daily. yt-dlp’s issue templates always start here.

yt-dlp -U

Test the video again before anything else.

Step 2. Clear the Cache

Stale extractor data survives updates.

yt-dlp --rm-cache-dir

Run under the exact same user account.

Step 3. Refresh Cookies from a Real Browser Session

Easiest method (recommended):

yt-dlp --cookies-from-browser chrome "VIDEO_URL"

(Replace chrome with firefox, edge, safari, or whichever browser you use.) Close the browser completely before running the command if it doesn’t work the first time.

Manual fallback (if --cookies-from-browser fails):

1. Open your browser and log in to YouTube (make sure the video plays).  

2. Install a free “Get cookies.txt” or “Cookie Editor” extension.  

3. Export cookies from that exact tab and save as cookies.txt.  

4. Run:

yt-dlp --cookies cookies.txt "VIDEO_URL"

Safety notes: Cookies expire — re-export when the error returns. Never share your cookie file.

Step 4. Stop Forcing a Failing Format

Remove any -f flag and let yt-dlp pick the best format automatically.

yt-dlp "VIDEO_URL"

If it works, you’re done. Many 403 errors only affect specific formats (especially separate video+audio).

Step 5. Slow Down Requests (for Batch Downloads)

If downloading many video, add a short pause between requests:

yt-dlp --sleep-interval 2 --max-sleep-interval 5 "VIDEO_URL"

Step 6. Test a Different Network/IP

Switch to mobile hotspot, force IPv4, or route through a proxy/proxies (especially  for geo-restricted /rate-limited connections): 

yt-dlp -4 "VIDEO_URL"

yt-dlp --proxy http://your-proxy-ip:port "VIDEO_URL"

(Replace with your proxy HTTP/SOCKS5 address. Residential proxies and mobile proxies work better for YouTube.)

Step 7. Advanced Options (Only If Needed)

Only try these after Steps 1–3. These address current YouTube JS/PO-token layers.

Impersonate a real browser:

yt-dlp --impersonate chrome "VIDEO_URL"

JS runtime (Deno recommended):

YouTube now requires solving JavaScript challenges. Deno is enabled by default in recent yt-dlp; force it if missing:

yt-dlp --js-runtimes deno "VIDEO_URL"

(Node, Bun, or QuickJS also supported via --js-runtimes.)

PO-token handling:

Some formats return 403 without a valid PO Token. yt-dlp cannot generate these itself — use a PO-token provider plugin (recommended in the official wiki) rather than manual extraction, as tokens are video-ID-bound.

Combined example:

yt-dlp --impersonate chrome --extractor-args "youtube:player_client=web,android" --js-runtimes deno "VIDEO_URL"

Common Mistakes to Avoid

Don’t retry the same failing command in a tight loop — it worsens rate-limiting.  

Don’t assume every 403 means your account is banned (most are client/validation issues).  

Don’t skip cache clear or cookies before jumping to advanced flags.  

Don’t reuse direct media URLs across devices/days — they expire.

Prevention Tips

Run yt-dlp -U weekly (YouTube changes fast).  

Refresh cookies for any protected video.  

Prefer default format selection.  

Keep request volume low during batch downloads.  

Treat YouTube support as a moving target — JS challenges and PO tokens are now normal workflow.

Use a reliable proxy service for heavy/recurring downloads — it prevents IP-based 403s and geo-blocks before they happen.

Still Stuck?

1. Run a full diagnostic:

yt-dlp -vU "VIDEO_URL"

2. Copy the entire verbose log and open an issue at:

https://github.com/yt-dlp/yt-dlp/issues

The maintainers and community respond quickly and specifically ask for this log (it shows extractor path, cookie state, JS runtime, and PO-token steps).

Final Thoughts

The ERROR: unable to download video data: HTTP Error 403: Forbidden is frustrating but almost always fixable. Start with the Nuclear Option or the three Quick Fixes, then use the symptom-based steps. The exact causes evolve with YouTube’s PO-token and JS protections, but the logical troubleshooting path (update → cache → cookies → format → impersonation → JS/PO-token) stays the same. You should be downloading again right now!

Next >

Complete Fix Guide on YouTube Error “There was a problem with the server[400]”
Start Your 7-Day Free Trial Now!
GoProxy Cancel anytime
GoProxy No credit card required