{"record":{"id":"243f5f5cfed52996","repo":"ytdl-org/youtube-dl","slug":"s-does-not-exist","errorCode":null,"errorMessage":"%s does not exist","messagePattern":"(.+?) does not exist","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/twitch.py","lineNumber":790,"sourceCode":"                'operationName': 'ComscoreStreamingQuery',\n                'variables': {\n                    'channel': channel_name,\n                    'clipSlug': '',\n                    'isClip': False,\n                    'isLive': True,\n                    'isVodOrCollection': False,\n                    'vodID': '',\n                },\n            }, {\n                'operationName': 'VideoPreviewOverlay',\n                'variables': {'login': channel_name},\n            }],\n            'Downloading stream GraphQL')\n\n        user = gql[0]['data']['user']\n\n        if not user:\n            raise ExtractorError(\n                '%s does not exist' % channel_name, expected=True)\n\n        stream = user['stream']\n\n        if not stream:\n            raise ExtractorError('%s is offline' % channel_name, expected=True)\n\n        access_token = self._download_access_token(\n            channel_name, 'stream', 'channelName')\n        token = access_token['value']\n\n        stream_id = stream.get('id') or channel_name\n        query = {\n            'allow_source': 'true',\n            'allow_audio_only': 'true',\n            'allow_spectre': 'true',\n            'p': random.randint(1000000, 10000000),\n            'player': 'twitchweb',","sourceCodeStart":772,"sourceCodeEnd":808,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/twitch.py#L772-L808","documentation":"Raised by TwitchStreamIE when the stream GraphQL response's data.user is falsy — Twitch reports no user object for the channel name, i.e. the channel does not exist (renamed, banned, or typo). Expected error naming the channel.","triggerScenarios":"Extracting a twitch.tv/<name> live URL where the StreamMetadata query returns user: null — nonexistent or renamed channel names.","commonSituations":"Channels renamed by the owner (old URLs die), suspended/banned channels, typos in the channel name, localized display names used instead of the login slug.","solutions":["Verify the channel name on twitch.tv and use the current login slug from the directory URL.","If the channel was renamed, find its new name and retry.","If suspended, no fix — content is gone.","Update to yt-dlp in case the GraphQL shape changed."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import requests\nq = [{'operationName': 'StreamMetadata', 'variables': {'login': channel}}]\nr = requests.post('https://gql.twitch.tv/gql', json=q, headers={'Client-ID': CLIENT_ID})\nif not r.json()[0]['data'].get('user'):\n    skip(channel, 'channel does not exist')","typeGuard":"def channel_exists(data: dict) -> bool:\n    return bool(data.get('user'))","tryCatchPattern":"try:\n    ydl.extract_info(channel_url)\nexcept ExtractorError as e:\n    if 'does not exist' in str(e):\n        resolve_new_channel_name(channel)  # renamed channels keep old URLs dead\n    else:\n        raise","preventionTips":["Always use the channel's login slug from the current directory URL, not display names.","Store channel ids, not names, in long-lived scripts; resolve names at runtime."],"tags":["twitch","channel","not-found","live"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}