ytdl-org/youtube-dl · error · ExtractorError

This video is protected by a password, use the --video-passw

Error message

This video is protected by a password, use the --video-password option

What it means

Raised by VimeoBaseInfoExtractor._get_video_password when the target video presents a password form but the caller supplied no --video-password / videopassword param. It is a configuration precondition: the video is private-but-link-accessible and Vimeo requires the per-video password before serving data. expected=True.

Source

Thrown at youtube_dl/extractor/vimeo.py:79

        self._set_vimeo_cookie('vuid', vuid)
        try:
            self._download_webpage(
                self._LOGIN_URL, None, 'Logging in',
                data=urlencode_postdata(data), headers={
                    'Content-Type': 'application/x-www-form-urlencoded',
                    'Referer': self._LOGIN_URL,
                })
        except ExtractorError as e:
            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 418:
                raise ExtractorError(
                    'Unable to log in: bad username or password',
                    expected=True)
            raise ExtractorError('Unable to log in')

    def _get_video_password(self):
        password = self._downloader.params.get('videopassword')
        if password is None:
            raise ExtractorError(
                'This video is protected by a password, use the --video-password option',
                expected=True)
        return password

    def _verify_video_password(self, url, video_id, password, token, vuid):
        if url.startswith('http://'):
            # vimeo only supports https now, but the user can give an http url
            url = url.replace('http://', 'https://')
        self._set_vimeo_cookie('vuid', vuid)
        return self._download_webpage(
            url + '/password', video_id, 'Verifying the password',
            'Wrong password', data=urlencode_postdata({
                'password': password,
                'token': token,
            }), headers={
                'Content-Type': 'application/x-www-form-urlencoded',
                'Referer': url,
            })

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Supply the password: --video-password SECRET on the CLI, or {'videopassword': '...'} in params for API use.
  2. If the password is correct but you still fail later, see the 'Wrong video password' error (check-password returning false).
  3. Store passwords out of shell history (prompt or netrc-style secret files) when scripting.
  4. For embed URLs, the password check goes through _verify_player_video_password — same param name applies.

Example fix

# before
youtube_dl 'https://vimeo.com/12345678'
# after
youtube_dl --video-password 'hunter2' 'https://vimeo.com/12345678'
Defensive patterns

Strategy: validation

Validate before calling

params = ydl.params
if needs_password_check(url) and not params.get('videopassword'):
    fail_fast('this video is password-protected: pass --video-password before extracting')

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if e.expected and '--video-password' in str(e):
        prompt_and_set_video_password_then_retry_once()
    else:
        raise

Prevention

When it happens

Trigger: Extracting a Vimeo URL whose page contains the pw_form / password check while self._downloader.params.get('videopassword') is None — i.e. forgot the option in CLI or API params.

Common situations: Event recordings, client-review uploads, and paid-course videos shared with a password; batch scripts not passing --video-password; API users omitting 'videopassword' in params.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/e8d7732c610e20cb. Report an issue: GitHub.