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
- Re-enter the exact video password (not the login password) via --video-password.
- Verify the password in a browser by opening the same player URL.
- Trim whitespace/newlines when injecting the password from files or env vars in scripts.
- 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
- Trim whitespace when reading video passwords from files/env.
- Confirm the password in a browser on the same player URL.
- Rate-limit password attempts; Vimeo can throttle repeated check-password calls.
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
- This video is protected by a password, use the --video-passw
- Video %s %s
- Cannot download embed-only video without embedding URL. Plea
- %s said: %s
- This album is protected by a password, use the --video-passw
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/5c6fa964469a7b84.
Report an issue: GitHub.