ytdl-org/youtube-dl · error · ExtractorError

Wrong video password

Error message

Wrong video password

What it means

Raised by VimeoIE._verify_player_video_password when the player.vimeo.com /check-password endpoint returns JSON that is exactly False — Vimeo's explicit signal that the base64-submitted password did not match. expected=True, deterministic per attempt.

Source

Thrown at youtube_dl/extractor/vimeo.py:598

    @staticmethod
    def _extract_url(url, webpage):
        urls = VimeoIE._extract_urls(url, webpage)
        return urls[0] if urls else None

    def _verify_player_video_password(self, url, video_id, headers):
        password = self._get_video_password()
        data = urlencode_postdata({
            'password': base64.b64encode(password.encode()),
        })
        headers = merge_dicts(headers, {
            'Content-Type': 'application/x-www-form-urlencoded',
        })
        checked = self._download_json(
            url + '/check-password', video_id,
            'Verifying the password', data=data, headers=headers)
        if checked is False:
            raise ExtractorError('Wrong video password', expected=True)
        return checked

    def _real_initialize(self):
        self._login()

    def _extract_from_api(self, video_id, unlisted_hash=None):
        token = self._download_json(
            'https://vimeo.com/_rv/jwt', video_id, headers={
                'X-Requested-With': 'XMLHttpRequest'
            })['token']
        api_url = 'https://api.vimeo.com/videos/' + video_id
        if unlisted_hash:
            api_url += ':' + unlisted_hash
        video = self._download_json(
            api_url, video_id, headers={
                'Authorization': 'jwt ' + token,
            }, query={
                'fields': 'config_url,created_time,description,license,metadata.connections.comments.total,metadata.connections.likes.total,release_time,stats.plays',

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Re-enter the exact video password (not the login password) via --video-password.
  2. Verify the password in a browser by opening the same player URL.
  3. Trim whitespace/newlines when injecting the password from files or env vars in scripts.
  4. On repeated failures, ask the uploader to confirm the password — it may have been rotated.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if e.expected and 'Wrong video password' in str(e):
        re_prompt_password_retry(max_attempts=3, then_skip=True)
    else:
        raise

Prevention

When it happens

Trigger: Calling a player.vimeo.com/video/<id> URL for a password-protected video where the POSTed password (base64-encoded in _verify_player_video_password) is incorrect; the check-password response is literal false.

Common situations: Typo'd --video-password; password changed since the link was shared; case/whitespace issues when copying; passing the account password instead of the video password.

Related errors


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