How to Fix yt-dlp Not Working 403 Forbidden & "Failed to Get Info" Errors
Kaley Torres
Updated on
If you’ve been using yt-dlp to download YouTube videos, you’ve probably run into frustrating issues lately. Maybe your downloads suddenly stopped working, you got a 403 forbidden error, failed to get info, or the program started demanding a newer version of Python every few weeks.
These issues hit hardest if you’re on a stable or older Linux distro, or if you just don’t feel like constantly upgrading Python. It’s mostly down to YouTube making changes, yt-dlp needing newer Python versions, and the way cookies and sleep flags are handled now. Here’s what’s going on and some practical ways users on Reddit have been keeping their downloads.

Why yt-dlp Suddenly Stops Working (Error 403/Failed to Get Info)
If you’ve ever fired up yt-dlp only to see yt-dlp Error 403: Forbidden or Failed to Get Info, you know the frustration: everything was fine yesterday, and now even updating to the latest version doesn’t help. This usually hits users on older or “stable” Linux distros, or anyone who prefers not to constantly upgrade Python. Here’s why it happens and what’s really going on behind the scenes.
1. YouTube Changes Its Player & API Frequently
The number one culprit is YouTube itself. They constantly tweak their streaming infrastructure, DRM, and API behavior to prevent automated downloads. Recent updates force certain formats to use SABR streaming, break nsig signatures, or limit separate audio/video stream downloads. This is why your -f 136+140 download suddenly throws 403, while -f best (combined) still works. It’s not a bug in yt-dlp—YouTube intentionally rotates things, and the downloader has to adapt.
2. Python Version Requirements Keep Rising
yt-dlp often requires newer Python versions because the developers rely on modern features and APIs that aren’t available in older Python. When you’re on Python 3.9 or 3.7, some internal libraries or cryptography modules don’t behave the same way. Combine that with YouTube’s constantly changing JS player, and older Python simply can’t parse new signatures reliably. This is why people see yt-dlp suddenly demanding Python 3.10+, even if nothing in their workflow changed.
3. Cookie & Authentication Handling Has Become Critical
YouTube is increasingly aggressive about login requirements and rate-limiting. Many videos now require valid cookies, and browser-based session cookies (especially Firefox or Safari) are more reliable than Chromium-based ones due to database locking or stricter security. Without cookies, audio-only or certain high-resolution downloads may fail.
Even if you’re logged in, old methods like exporting cookies to a file often break quickly. That’s why --cookies-from-browser is the recommended workaround now.
4. Separate Streams Are More Fragile Than Combined Streams
Requests for separate audio/video streams (-f 136+140) are the most affected. These fail more often with 403 because YouTube’s server-side changes now target how streams are requested. Combined formats (-f best) are less likely to break because they use a single container, avoiding some of YouTube’s new restrictions.
Some users even report ffmpeg interacting badly, where having it installed triggers 403 for separate streams. Removing ffmpeg can temporarily allow downloads, though it limits post-processing options.
5. Rate-Limiting and IP Restrictions
If you download multiple videos in quick succession, YouTube may temporarily block your IP. Using sleep flags (--min-sleep-interval, --max-sleep-interval, --sleep-requests) helps mimic human behavior and reduces the chance of 403 errors. VPNs can also bypass region-specific restrictions.
6. GUI vs CLI & Nightly Builds
Some GUIs lag behind the latest yt-dlp updates, which can trigger errors even if your command-line version works. Nightly builds often include hotfixes for breaking YouTube changes, so if you’re using a stable version, certain formats or resolutions may fail unexpectedly.
>> Free YT-DLP Alternatives That Actually Work in 2025

yt-dlp Solutions for Error 403 / Failed to Get Info
If yt-dlp suddenly stops downloading videos, returning Error 403 or “Failed to Get Info,” you can follow these step-by-step solutions. They address YouTube API changes, authentication issues, format conflicts, and best practices observed by the community.
Use Combined Formats Instead of Separate Streams
YouTube frequently updates its streaming infrastructure, which can cause separate audio/video streams (e.g., -f 136+140) to fail with HTTP 403 errors. This happens because YouTube enforces SABR streaming, DRM checks, and signature validation that affect separate stream requests. Using a combined format downloads both video and audio in a single container, avoiding these errors.
Command example:
yt-dlp -f best <video_url>
- The
-f bestoption automatically selects the highest-quality combined format available, ensuring audio and video are together. - This method bypasses SABR streaming, which can block separate streams and trigger 403 errors.
- Combined formats reduce issues caused by FFmpeg conflicts, as no merging of separate streams is needed.
- If you encounter login-required or age-restricted videos, combine
-f bestwith--cookies-from-browser firefoxto authenticate properly.
Tip: Always check available formats first with yt-dlp --list-formats <video_url> to ensure the best combined format is selectable.
Update to Nightly Builds
YouTube frequently introduces changes to its player and streaming APIs, such as SABR streaming enforcement and nsig signature updates. Stable versions of yt-dlp may not include fixes for these changes immediately, which can result in 403 errors or missing formats. Updating to the nightly build ensures you have the latest patches to handle these breaking changes.
Command example:
yt-dlp -U --update-to nightly
- The nightly build contains the most recent updates and bug fixes directly from the developers, addressing YouTube API modifications that break standard downloads.
- Using the nightly version is especially important if separate audio/video streams (-f 136+140) or certain high-resolution formats fail.
- Nightly builds are updated frequently; running
yt-dlp -Uperiodically ensures your version remains compatible with YouTube changes. - If you encounter login-restricted or age-restricted content, combine the nightly build with
--cookies-from-browser firefoxfor successful downloads.
Tip: Treat nightly builds as your primary version only if you frequently encounter 403 errors or format issues. For general usage, stable builds are sufficient.
Use Browser Cookies for Authentication
Many YouTube videos now require a logged-in session to download, especially age-restricted, private, or region-locked content. yt-dlp cannot bypass these restrictions on its own, but using cookies from Firefox or Safari allows it to simulate an authenticated session reliably. Chromium-based browsers (Chrome, Edge, Vivaldi) often fail due to cookie database locks or stricter security, so always close the browser before extracting cookies. The --cookies-from-browser option automatically locates the active browser profile and retrieves valid cookies, reducing authentication errors. If you have multiple profiles, you can specify the profile path explicitly, for example:
yt-dlp --cookies-from-browser firefox:"Path/to/your/profile" <video_url>For best results, combine cookies with simplified formats (e.g.,
-f best) and download intervals (--min-sleep-interval, --max-sleep-interval) to improve success rates for multiple downloads. Always keep yt-dlp updated to maintain compatibility with YouTube's authentication changes.
Fallback to Lower-Resolution or Pre-Combined Formats
When downloading videos from YouTube, high-resolution streams (4K or higher) or separate audio/video formats (e.g., -f 136+140) are more prone to HTTP 403 errors due to server-side restrictions, SABR streaming enforcement, or signature validation changes. If you encounter repeated failures with these formats, a practical workaround is to request a lower-resolution pre-combined format that is already packaged with both video and audio. This approach avoids separate streams, reduces the likelihood of format-specific blocks, and ensures compatibility across different devices and players. For example, you can explicitly select a 720p H.264 video with M4A audio using the following command:
Command example:
yt-dlp -S vcodec:h264,fps,res:720,acodec:m4a <video_url>
This downloads a fixed 720p format with compatible audio, bypassing the issues that often occur with higher resolutions or separate streams, while still providing good visual and audio quality. You can adjust the resolution or codec parameters depending on your device capabilities or download requirements.
Test Without FFmpeg (Optional)
In some cases, users have reported that having FFmpeg installed causes HTTP 403 errors when downloading separate audio/video streams (e.g., -f 136+140). This may be due to how FFmpeg interacts with yt-dlp during stream merging or format handling, which can trigger server-side restrictions. Temporarily uninstalling or renaming the FFmpeg executable can allow downloads to succeed, especially for separate streams. Note that doing so will limit post-processing capabilities, such as automatic merging of audio/video, format conversion, or embedding metadata. This workaround is mainly useful for testing whether FFmpeg is causing the failure and should be combined with other methods like using combined formats or lower-resolution streams for reliable results.
Tip: If you remove FFmpeg, you can later manually merge or convert formats using a separate FFmpeg command once the download completes successfully.
Switch to CLI if Using a GUI
Some GUI frontends for yt-dlp may lag behind the latest updates, meaning they could still be using an outdated backend that is incompatible with YouTube’s recent API or SABR streaming changes. This often results in 403 errors or missing formats when downloading videos. Using the command-line interface (CLI) ensures you are running the most up-to-date yt-dlp code, fully compatible with YouTube’s API and new player changes. The CLI version also allows greater control over format selection, cookies, sleep intervals, and other advanced options that GUIs may not expose.
Command example:
yt-dlp -f best --cookies-from-browser firefox <video_url>
Tip: Always update the CLI version regularly using yt-dlp -U or nightly builds to ensure compatibility with recent YouTube changes, especially if your GUI continues to produce errors.
Handle Audio-Only Downloads Correctly
Downloading audio-only formats like MP3 or M4A directly from YouTube often fails due to server-side restrictions, format changes, or authentication issues. A more reliable approach is to first download the best available audio stream (e.g., -f bestaudio) in its native container, then convert it to the desired format using FFmpeg. This method ensures that you obtain a complete, playable audio file without corruption, and avoids the 403 errors commonly encountered with direct MP3 downloads. It also gives you flexibility to choose output quality and format after download.
Command example:
yt-dlp -f bestaudio <video_url> -o "video.m4a" ffmpeg -i video.m4a output.mp3
Tips:
Ensure FFmpeg is installed and accessible in your system PATH. You can adjust the output format (e.g., opus, AAC) by changing the FFmpeg conversion command. If cookies or login are required for the video, include --cookies-from-browser firefox or similar flags in the yt-dlp command to avoid download failures.
Prepare for Deno & Python ≥3.10 Requirement
Future yt-dlp versions will require Deno to execute YouTube’s JS player code. Installing Deno in advance avoids interruptions:
winget install DenoLand.Deno deno --version
yt-dlp will automatically detect Deno, similar to how it handles FFmpeg.
Additional Fixes to yt-dlp Not Working
Following these steps further reduces yt-dlp not working errors:
- Use an archive file to avoid duplicate downloads:
--download-archive "Path/to/archive.txt"
- Embed metadata, thumbnails, and chapters:
--embed-metadata --embed-thumbnail --embed-chapters <video_url>
- Fix SRT subtitles:
--write-sub --write-auto-sub --sub-lang en --sub-format srt --use-postprocessor srt_fix
- Prefer Opus audio when possible:
-x --audio-format opus
- Monitor GitHub Issue #14680 or Reddit for temporary API changes.
Important: Combining browser cookies, sleep intervals, simpler format selection, nightly builds, and monitoring updates is the safest approach to bypass 403 errors and ensure yt-dlp downloads continue smoothly.
Read More: 4K Video Downloader Not Working/Can’t Parse Link/Retrieving Video Info.
yt-dlp Not Working? Try the Free Working yt-dlp Alternative
If you're frustrated with yt-dlp suddenly failing with 403 errors or broken downloads every month or week, WinX YouTube Downloader offers a hassle-free alternative that keeps up with YouTube's frequent changes:
- Proactive update mechanism: WinX automatically adapts to YouTube's playback or JS verification updates, minimizing download interruptions.
- Wide platform support: Download videos from YouTube, Vimeo, Facebook, Dailymotion, and over 300 other sites without compatibility issues.
- Flexible formats & resolutions: Supports MP4, WebM, FLV, and resolutions from 720p to 4K, letting you choose quality that suits your needs.
- Stable, user-friendly experience: No command-line hassles, no frequent dependency updates, just reliable one-click downloads.

In most cases, any occasional yt-dlp not working errors can be quickly resolved by following the steps outlined above.


Free Download
Free Download