Skip to content

Can't download Kick Sub-Only VODs #13442

Description

@helpimnotdrowning

Checklist

  • I'm reporting that yt-dlp is broken on a supported site
  • I've verified that I have updated yt-dlp to nightly or master (update instructions)
  • I've checked that all provided URLs are playable in a browser with the same IP and same login details
  • I've checked that all URLs and arguments with special characters are properly quoted or escaped
  • I've searched known issues, the FAQ, and the bugtracker for similar issues including closed ones. DO NOT post duplicates
  • I've read about sharing account credentials and I'm willing to share it if required

Region

United States

Provide a description that is worded well enough to be understood

Downloading normal VODs is working fine. VODs marked "Sub-only" (ex https://kick.com/mikeneko/videos/69d65b8d-89e2-4a5f-89b8-d2572d2f18cf) throw a 403.

Using the Stream Detector extension, I can generate a working link (yt-dlp --no-part --restrict-filenames -N 8 --extractor-args generic:is_live=true -vv --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0" --cookies-from-browser firefox --referer "https://kick.com/" "https://stream.kick.com/ivs/v1/<...>/master.m3u8"), though it of course has no metadata.

Provide verbose output that clearly demonstrates the problem

  • Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
  • If using API, add 'verbose': True to YoutubeDL params instead
  • Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output

[debug] Command-line config: ['--cookies-from-browser', 'firefox', '--verbose', '--format', 'bestvideo[vcodec^=avc]+bestaudio[acodec^=mp4a]/bestvideo+bestaudio/best', '--force-ipv4', '--sleep-requests', '1', '--sleep-interval', '5', '--max-sleep-interval', '30', '--ignore-errors', '--no-continue', '--no-overwrites', '--add-metadata', '--write-description', '--write-info-json', '--write-annotations', '--write-thumbnail', '--embed-thumbnail', '--all-subs', '--skip-unavailable-fragments', '--embed-subs', '--check-formats', '--concurrent-fragments', '5', '--sponsorblock-mark', 'all,-poi_highlight,-filler', '--output', 'E:/ytdl//%(uploader)s/%(upload_date)s - %(title)s/%(title)s [%(id)s] f%(format_id)s.%(ext)s', 'https://kick.com/mikeneko/videos/4cc7e69f-0500-46a3-8f53-be1786c5567c', '-vU']
[debug] Encodings: locale cp65001, fs utf-8, pref cp65001, out utf-8, error utf-8 (No VT), screen utf-8
[debug] yt-dlp version nightly@2025.06.09.234059 from yt-dlp/yt-dlp-nightly-builds [339614a17] (win_exe)
[debug] Python 3.10.11 (CPython AMD64 64bit) - Windows-10-10.0.26200-SP0 (OpenSSL 1.1.1t  7 Feb 2023)
Extracting cookies from firefox
[debug] exe versions: ffmpeg 7.0-full_build-www.gyan.dev (setts), ffprobe 7.0-full_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.23.0, brotli-1.1.0, certifi-2025.04.26, curl_cffi-0.10.0, mutagen-1.47.0, requests-2.32.4, sqlite3-3.40.1, urllib3-2.4.0, websockets-15.0.1
[debug] Proxy map: {}
[debug] Extracting cookies from: "C:\Users\helpi\AppData\Roaming\Mozilla\Firefox\Profiles\xnfqorwk.default-release\cookies.sqlite"
Extracted 2092 cookies from firefox
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Plugin directories: none
[debug] Loaded 1859 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest
Latest version: nightly@2025.06.09.234059 from yt-dlp/yt-dlp-nightly-builds
yt-dlp is up to date (nightly@2025.06.09.234059 from yt-dlp/yt-dlp-nightly-builds)
[kick:vod] Setting up session
[kick:vod] Extracting URL: https://kick.com/mikeneko/videos/4cc7e69f-0500-46a3-8f53-be1786c5567c
[kick:vod] Sleeping 1.0 seconds ...
[debug] [kick:vod] kick.com did not set XSRF-TOKEN cookie
[kick:vod] 4cc7e69f-0500-46a3-8f53-be1786c5567c: Downloading API JSON
ERROR: [kick:vod] 4cc7e69f-0500-46a3-8f53-be1786c5567c: Unable to download JSON metadata: HTTP Error 403: Forbidden (caused by <HTTPError 403: Forbidden>)
  File "yt_dlp\extractor\common.py", line 748, in extract
  File "yt_dlp\extractor\kick.py", line 126, in _real_extract
  File "yt_dlp\extractor\kick.py", line 31, in _call_api
  File "yt_dlp\extractor\common.py", line 1145, in download_content
  File "yt_dlp\extractor\common.py", line 1103, in download_handle
  File "yt_dlp\extractor\common.py", line 968, in _download_webpage_handle
  File "yt_dlp\extractor\common.py", line 917, in _request_webpage

  File "yt_dlp\extractor\common.py", line 904, in _request_webpage
  File "yt_dlp\YoutubeDL.py", line 4195, in urlopen
  File "yt_dlp\networking\common.py", line 117, in send
  File "yt_dlp\networking\_curlcffi.py", line 194, in send
  File "yt_dlp\networking\_helper.py", line 194, in wrapper
  File "yt_dlp\networking\common.py", line 359, in send
  File "yt_dlp\networking\_curlcffi.py", line 290, in _send
yt_dlp.networking.exceptions.HTTPError: HTTP Error 403: Forbidden

Metadata

Metadata

Assignees

No one assigned

    Labels

    account-neededAccount details are needed to test/fix thiscan-share-accountSomeone is willing to provide account details for developmentsite-bugIssue with a specific website

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions