ytdl-org/youtube-dl · error · ExtractorError
Unable to log in: bad username or password
Error message
Unable to log in: bad username or password
What it means
Raised by VimeoBaseInfoExtractor._login when the POST to vimeo.com/log_in comes back with HTTP 418 — Vimeo's cheeky 'I'm a teapot' response for failed login. It means credentials were submitted but rejected as wrong username/password. expected=True, deterministic.
Source
Thrown at youtube_dl/extractor/vimeo.py:71
token, vuid = self._extract_xsrft_and_vuid(webpage)
data = {
'action': 'login',
'email': username,
'password': password,
'service': 'vimeo',
'token': token,
}
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(View on GitHub (pinned to 956b8c5855)
Solutions
- Verify the email/password pair by logging in at vimeo.com/log_in in a browser with the same credentials.
- Update the netrc entry or --username/--password flags with the correct password.
- If the account uses SSO/Google login only, create a Vimeo-native password in account settings first.
- For 2FA-protected accounts, password login from the extractor may be blocked — use a cookie-based approach or an account without 2FA.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'bad username or password' in str(e):
halt_and_prompt('vimeo credentials rejected — verify at vimeo.com/log_in, update netrc') # do NOT retry loop
raise Prevention
- Verify credentials via a browser login before long batch runs.
- Keep netrc entries in a secret manager and sync them on password rotation.
- Avoid 2FA-only or SSO-only accounts for extractor login; set a native Vimeo password.
When it happens
Trigger: Logging in with an incorrect email/password pair (from CLI flags or netrc); the 418 status on the login POST triggers this specific branch before the generic 'Unable to log in' fallback.
Common situations: Typo'd or rotated passwords in netrc; accounts with 2FA where plain password auth fails; password managers inserting stale credentials; users confusing Vimeo password with Google/SSO login used in the browser.
Related errors
- No login info available, needed for using %s.
- This video is only available for users of participating TV p
- We're sorry, but either the User ID or Password entered is n
- Unable to login: %s said: %s
- Unable to login: %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/505334f2d6181537.
Report an issue: GitHub.