{"record":{"id":"0d005f54f199a28c","repo":"ytdl-org/youtube-dl","slug":"s","errorCode":null,"errorMessage":"%s","messagePattern":"%s","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/limelight.py","lineNumber":79,"sourceCode":"                smuggle('limelight:media:%s' % video_id),\n                LimelightMediaIE.ie_key(), video_id))\n        return entries\n\n    def _call_playlist_service(self, item_id, method, fatal=True, referer=None):\n        headers = {}\n        if referer:\n            headers['Referer'] = referer\n        try:\n            return self._download_json(\n                self._PLAYLIST_SERVICE_URL % (self._PLAYLIST_SERVICE_PATH, item_id, method),\n                item_id, 'Downloading PlaylistService %s JSON' % method,\n                fatal=fatal, headers=headers)\n        except ExtractorError as e:\n            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:\n                error = self._parse_json(e.cause.read().decode(), item_id)['detail']['contentAccessPermission']\n                if error == 'CountryDisabled':\n                    self.raise_geo_restricted()\n                raise ExtractorError(error, expected=True)\n            raise\n\n    def _extract(self, item_id, pc_method, mobile_method, referer=None):\n        pc = self._call_playlist_service(item_id, pc_method, referer=referer)\n        mobile = self._call_playlist_service(\n            item_id, mobile_method, fatal=False, referer=referer)\n        return pc, mobile\n\n    def _extract_info(self, pc, mobile, i, referer):\n        get_item = lambda x, y: try_get(x, lambda x: x[y][i], dict) or {}\n        pc_item = get_item(pc, 'playlistItems')\n        mobile_item = get_item(mobile, 'mediaList')\n        video_id = pc_item.get('mediaId') or mobile_item['mediaId']\n        title = pc_item.get('title') or mobile_item['title']\n\n        formats = []\n        urls = []\n        for stream in pc_item.get('streams', []):","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/limelight.py#L61-L97","documentation":"Raised by the Limelight extractor when the PlaylistService API returns HTTP 403: the 403 body's detail.contentAccessPermission value is re-raised verbatim as the error message (with 'CountryDisabled' upgraded to a geo-restriction error). It is expected=True and encodes the publisher's access-permission refusal.","triggerScenarios":"Requesting a Limelight media/channel id whose PlaylistService call (playlist.<method>.json) responds 403 with a contentAccessPermission such as 'CountryDisabled', 'DomainDisabled', or expired/unpublished media — e.g. embeds restricted to the publisher's own domain or region.","commonSituations":"Videos restricted to specific domains (referrers) opened directly; geo-disabled media; unpublished or deleted channel items still referenced by old pages; missing Referer when the embed requires it.","solutions":["If the message says CountryDisabled, use a proxy in an allowed country","If domain-restricted, open the video from the original embedding page (or pass its URL as Referer via --add-headers)","Confirm the media id is still published in the publisher's Limelight dashboard","Update to yt-dlp for improved Limelight handling"],"exampleFix":"# supply the embedding page as referer\n# yt-dlp --add-headers 'Referer:https://original-site.example/page' 'https://assets.delvenetworks.com/...'","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    msg = str(e)\n    if 'CountryDisabled' in msg:\n        retry_with_regional_proxy(url)\n    elif 'DomainDisabled' in msg or 'PermissionDenied' in msg:\n        retry_with_referer(url, embedding_page_url)\n    else:\n        raise","preventionTips":["Pass the embedding page URL as Referer for domain-restricted Limelight embeds","Match egress region to the publisher's licensing before extracting"],"tags":["limelight","access-permission","geo-restriction","http-403","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}