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

  1. Verify the email/password pair by logging in at vimeo.com/log_in in a browser with the same credentials.
  2. Update the netrc entry or --username/--password flags with the correct password.
  3. If the account uses SSO/Google login only, create a Vimeo-native password in account settings first.
  4. 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

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


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