{"record":{"id":"875d17db358bc2f5","repo":"ytdl-org/youtube-dl","slug":"this-video-is-protected-by-a-passcode-use-the-v","errorCode":null,"errorMessage":"This video is protected by a passcode, use the --video-password option","messagePattern":"This video is protected by a passcode, use the --video-password option","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/zoom.py","lineNumber":40,"sourceCode":"        'info_dict': {\n            'id': 'dUk_CNBETmZ5VA2BwEl-jjakPpJ3M1pcfVYAPRsoIbEByGsLjUZtaa4yCATQuOL3der8BlTwxQePl_j0.EImBkXzTIaPvdZO5',\n            'ext': 'mp4',\n            'title': 'China\\'s \"two sessions\" and the new five-year plan',\n        }\n    }\n\n    def _real_extract(self, url):\n        base_url, play_id = re.match(self._VALID_URL, url).groups()\n        webpage = self._download_webpage(url, play_id)\n\n        try:\n            form = self._form_hidden_inputs('password_form', webpage)\n        except ExtractorError:\n            form = None\n        if form:\n            password = self._downloader.params.get('videopassword')\n            if not password:\n                raise ExtractorError(\n                    'This video is protected by a passcode, use the --video-password option', expected=True)\n            is_meeting = form.get('useWhichPasswd') == 'meeting'\n            validation = self._download_json(\n                base_url + 'rec/validate%s_passwd' % ('_meet' if is_meeting else ''),\n                play_id, 'Validating passcode', 'Wrong passcode', data=urlencode_postdata({\n                    'id': form[('meet' if is_meeting else 'file') + 'Id'],\n                    'passwd': password,\n                    'action': form.get('action'),\n                }))\n            if not validation.get('status'):\n                raise ExtractorError(validation['errorMessage'], expected=True)\n            webpage = self._download_webpage(url, play_id)\n\n        data = self._parse_json(self._search_regex(\n            r'(?s)window\\.__data__\\s*=\\s*({.+?});',\n            webpage, 'data'), play_id, js_to_json)\n\n        return {","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/zoom.py#L22-L58","documentation":"Raised by the Zoom extractor when the recording page contains a 'password_form' (the recording is protected by a passcode) but no --video-password option was supplied. It tells the user the download cannot proceed without the passcode.","triggerScenarios":"Running youtube-dl against a shared Zoom cloud-recording URL that has a passcode, without passing --video-password. The extractor detects the hidden password form on the page and immediately raises (expected=True).","commonSituations":"Following a recording link from email/chat where the passcode is in a separate part of the message; company Zoom accounts that enforce passcodes on all shared recordings.","solutions":["Get the passcode from the person who shared the recording link (usually alongside the URL)","Supply it with --video-password '<passcode>'","Alternatively use a URL that already embeds the passcode ( '?pwd=...' ) if the sharer provided one"],"exampleFix":"# before\nyoutube-dl 'https://zoom.us/rec/share/abc-def'\n# after\nyoutube-dl --video-password '123456' 'https://zoom.us/rec/share/abc-def'","handlingStrategy":"validation","validationCode":"# before calling youtube_dl, require the passcode for known Zoom share links\nif 'zoom.us/rec/' in url or 'zoom.us/rec/share/' in url:\n    assert options.get('videopassword'), 'Zoom recording URL needs --video-password'","typeGuard":null,"tryCatchPattern":"try:\n    ydl.download([url])\nexcept ExtractorError as e:\n    if 'protected by a passcode' in str(e):\n        prompt_for_password_and_retry(url)  # prompt once, then set ydl params['videopassword']","preventionTips":["Always collect the passcode together with the share link from the sender","Store passcodes alongside URLs in your job config so --video-password can be supplied automatically"],"tags":["zoom","password","access-control","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}