{"record":{"id":"09032aaf3fc11fd6","repo":"ytdl-org/youtube-dl","slug":"this-video-is-only-available-via-cable-service-pro-09032a","errorCode":null,"errorMessage":"This video is only available via cable service provider subscription. You may want to use --cookies.","messagePattern":"This video is only available via cable service provider subscription\\. You may want to use --cookies\\.","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/fox.py","lineNumber":74,"sourceCode":"    _access_token = None\n\n    def _call_api(self, path, video_id, data=None):\n        headers = {\n            'X-Api-Key': self._API_KEY,\n        }\n        if self._access_token:\n            headers['Authorization'] = 'Bearer ' + self._access_token\n        try:\n            return self._download_json(\n                'https://api2.fox.com/v2.0/' + path,\n                video_id, data=data, headers=headers)\n        except ExtractorError as e:\n            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:\n                entitlement_issues = self._parse_json(\n                    e.cause.read().decode(), video_id)['entitlementIssues']\n                for e in entitlement_issues:\n                    if e.get('errorCode') == 1005:\n                        raise ExtractorError(\n                            'This video is only available via cable service provider '\n                            'subscription. You may want to use --cookies.', expected=True)\n                messages = ', '.join([e['message'] for e in entitlement_issues])\n                raise ExtractorError(messages, expected=True)\n            raise\n\n    def _real_initialize(self):\n        if not self._access_token:\n            mvpd_auth = self._get_cookies(self._HOME_PAGE_URL).get('mvpd-auth')\n            if mvpd_auth:\n                self._access_token = (self._parse_json(compat_urllib_parse_unquote(\n                    mvpd_auth.value), None, fatal=False) or {}).get('accessToken')\n            if not self._access_token:\n                self._access_token = self._call_api(\n                    'login', None, json.dumps({\n                        'deviceId': compat_str(uuid.uuid4()),\n                    }).encode())['accessToken']\n","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/fox.py#L56-L92","documentation":"Raised by the FOX extractor when the api2.fox.com call returns 403 and the parsed entitlementIssues contain an entry with errorCode 1005. That code specifically means the content requires an MVPD (cable TV provider) subscription that the current session does not have. Marked expected=True; the suggested remedy in the message itself is to supply cookies.","triggerScenarios":"_call_api('vodplayer/<id>') gets a 403 whose body lists entitlementIssues; one has errorCode == 1005. Occurs when no mvpd-auth cookie / access token with a valid TV-provider login is present, or the linked provider subscription lacks the channel carrying the show.","commonSituations":"Downloading FOX or National Geographic shows without authenticating; cookies exported from a free FOX account instead of one linked to a cable provider; provider subscription lapsed so entitlement checks fail even with cookies.","solutions":["Log in to fox.com with your cable provider in a browser, export cookies.txt, and run with --cookies","Verify the provider subscription is active and includes the channel of the requested show","Confirm you are not geo-blocked (FOX enforces US-only) by using a US IP","If you have no cable subscription, the content is not obtainable via this extractor"],"exampleFix":"# before\nyoutube_dl 'https://www.fox.com/watch/empire-some-episode/'\n# ERROR: This video is only available via cable service provider subscription...\n\n# after\nyoutube_dl --cookies fox_cookies.txt 'https://www.fox.com/watch/empire-some-episode/'","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'cable service provider subscription' in str(e):\n        rerun_with_mvpd_cookies(url)  # cookies exported after provider login","preventionTips":["Export cookies from a browser logged into fox.com via your cable provider before extraction","Treat this error as a hard stop unless credentials change — retrying without cookies never helps"],"tags":["fox","extractor","entitlement","authentication","paywall"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}