{"record":{"id":"505334f2d6181537","repo":"ytdl-org/youtube-dl","slug":"unable-to-log-in-bad-username-or-password","errorCode":null,"errorMessage":"Unable to log in: bad username or password","messagePattern":"Unable to log in: bad username or password","errorType":"exception","errorClass":"ExtractorError","httpStatus":418,"severity":"error","filePath":"youtube_dl/extractor/vimeo.py","lineNumber":71,"sourceCode":"        token, vuid = self._extract_xsrft_and_vuid(webpage)\n        data = {\n            'action': 'login',\n            'email': username,\n            'password': password,\n            'service': 'vimeo',\n            'token': token,\n        }\n        self._set_vimeo_cookie('vuid', vuid)\n        try:\n            self._download_webpage(\n                self._LOGIN_URL, None, 'Logging in',\n                data=urlencode_postdata(data), headers={\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    'Referer': self._LOGIN_URL,\n                })\n        except ExtractorError as e:\n            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 418:\n                raise ExtractorError(\n                    'Unable to log in: bad username or password',\n                    expected=True)\n            raise ExtractorError('Unable to log in')\n\n    def _get_video_password(self):\n        password = self._downloader.params.get('videopassword')\n        if password is None:\n            raise ExtractorError(\n                'This video is protected by a password, use the --video-password option',\n                expected=True)\n        return password\n\n    def _verify_video_password(self, url, video_id, password, token, vuid):\n        if url.startswith('http://'):\n            # vimeo only supports https now, but the user can give an http url\n            url = url.replace('http://', 'https://')\n        self._set_vimeo_cookie('vuid', vuid)\n        return self._download_webpage(","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/vimeo.py#L53-L89","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if e.expected and 'bad username or password' in str(e):\n        halt_and_prompt('vimeo credentials rejected — verify at vimeo.com/log_in, update netrc')  # do NOT retry loop\n    raise","preventionTips":["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."],"tags":["authentication","vimeo","credentials","http-418"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}