yt-dlp/yt-dlp · error · ExtractorError

Could not decrypt data: {e}

Error message

Could not decrypt data: {e}

What it means

Error "Could not decrypt data: {e}" thrown in yt-dlp/yt-dlp.

Source

Thrown at yt_dlp/extractor/wrestleuniverse.py:138

            headers['Authorization'] = f'Bearer {self._TOKEN}'
        return self._download_json(
            f'https://{self._API_HOST}/v1/{self._API_PATH}/{video_id}{param}', video_id,
            note=f'Downloading {msg} JSON', errnote=f'Failed to download {msg} JSON',
            data=data, headers=headers, query=query, fatal=fatal)

    def _call_encrypted_api(self, video_id, param='', msg='API', data={}, query={}, fatal=True):
        if not Cryptodome.RSA:
            raise ExtractorError('pycryptodomex not found. Please install', expected=True)
        private_key = Cryptodome.RSA.generate(2048)
        cipher = Cryptodome.PKCS1_OAEP.new(private_key, hashAlgo=Cryptodome.SHA1)

        def decrypt(data):
            if not data:
                return None
            try:
                return cipher.decrypt(base64.b64decode(data)).decode()
            except (ValueError, binascii.Error) as e:
                raise ExtractorError(f'Could not decrypt data: {e}')

        token = base64.b64encode(private_key.public_key().export_key('DER')).decode()
        api_json = self._call_api(video_id, param, msg, data={
            'deviceId': self._DEVICE_ID,
            'token': token,
            **data,
        }, query=query, fatal=fatal)
        return api_json, decrypt

    def _download_metadata(self, url, video_id, lang, props_keys):
        metadata = self._call_api(video_id, msg='metadata', query={'al': lang or 'ja'}, auth=False, fatal=False)
        if not metadata:
            webpage = self._download_webpage(url, video_id)
            nextjs_data = self._search_nextjs_data(webpage, video_id, fatal=False)
            metadata = traverse_obj(nextjs_data, (
                'props', 'pageProps', *variadic(props_keys, (str, bytes, dict, set)), {dict})) or {}
        return metadata

View on GitHub (pinned to 81ecd58b13)

Solutions

  1. Re-export fresh cookies; the decryption key may be tied to your session
  2. Update yt-dlp if the site changed its encryption scheme
  3. Report the error with verbose logs if it persists

When it happens

Trigger: AES decryption of the Wrestle Universe API response fails, usually due to an invalid/expired key or a changed encryption scheme.

Common situations: See trigger scenarios.


AI-assisted analysis of yt-dlp/yt-dlp@81ecd58b13 (2026-08-22). Data as JSON: /api/errors/0cebe4ff05586eaa. Report an issue: GitHub.