ytdl-org/youtube-dl · error · ExtractorError

This video is only available for users of participating TV p

Error message

This video is only available for users of participating TV providers. Use --ap-mso to specify Adobe Pass Multiple-system operator Identifier and --ap-username and --ap-password or --netrc to provide account credentials.

What it means

Raised by the Adobe Pass MVPD helper when the target video is locked behind TV-provider (cable/satellite) authentication. The extractor reached the provider-selection stage and no valid MVPD session exists, so raise_mvpd_required() fires instead of proceeding. It is marked expected=True, so youtube-dl reports it as an expected extraction error rather than a bug.

Source

Thrown at youtube_dl/extractor/adobepass.py:1376

        def is_expired(token, date_ele):
            token_expires = unified_timestamp(re.sub(r'[_ ]GMT', '', xml_text(token, date_ele)))
            return token_expires and token_expires <= int(time.time())

        def post_form(form_page_res, note, data={}):
            form_page, urlh = form_page_res
            post_url = self._html_search_regex(r'<form[^>]+action=(["\'])(?P<url>.+?)\1', form_page, 'post url', group='url')
            if not re.match(r'https?://', post_url):
                post_url = compat_urlparse.urljoin(urlh.geturl(), post_url)
            form_data = self._hidden_inputs(form_page)
            form_data.update(data)
            return self._download_webpage_handle(
                post_url, video_id, note, data=urlencode_postdata(form_data), headers={
                    'Content-Type': 'application/x-www-form-urlencoded',
                })

        def raise_mvpd_required():
            raise ExtractorError(
                'This video is only available for users of participating TV providers. '
                'Use --ap-mso to specify Adobe Pass Multiple-system operator Identifier '
                'and --ap-username and --ap-password or --netrc to provide account credentials.', expected=True)

        def extract_redirect_url(html, url=None, fatal=False):
            # TODO: eliminate code duplication with generic extractor and move
            # redirection code into _download_webpage_handle
            REDIRECT_REGEX = r'[0-9]{,2};\s*(?:URL|url)=\'?([^\'"]+)'
            redirect_url = self._search_regex(
                r'(?i)<meta\s+(?=(?:[a-z-]+="[^"]+"\s+)*http-equiv="refresh")'
                r'(?:[a-z-]+="[^"]+"\s+)*?content="%s' % REDIRECT_REGEX,
                html, 'meta refresh redirect',
                default=NO_DEFAULT if fatal else None, fatal=fatal)
            if not redirect_url:
                return None
            if url:
                redirect_url = compat_urlparse.urljoin(url, unescapeHTML(redirect_url))
            return redirect_url

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Add --ap-mso <MSO_ID> with a provider from `youtube-dl --ap-list-mso` plus --ap-username and --ap-password
  2. Alternatively store credentials in ~/.netrc (machine <mso or site> login <user> password <pass>) and pass --netrc
  3. Verify the MSO identifier is exactly the one listed by --ap-list-mso for your TV provider
  4. If credentials were already supplied, clear the stale Adobe Pass cache (~/.cache/youtube-dl/adobepass) and retry

Example fix

# before
youtube-dl 'https://www.history.com/video/locked-episode'

# after
youtube-dl --ap-mso 'Comcast_SSO' --ap-username user@example.com --ap-password 'secret' 'https://www.history.com/video/locked-episode'
Defensive patterns

Strategy: validation

Validate before calling

# Before extraction, check credentials/MSO availability
import subprocess
msos = subprocess.run(['youtube-dl', '--ap-list-mso'], capture_output=True, text=True).stdout
has_creds = bool(args.ap_username and args.ap_password and args.ap_mso)
if not has_creds:
    print('Skipping %s: TV-provider (MVPD) credentials required' % url)

Try / catch

try:
    ydl.extract_info(url, download=True)
except YoutubeDLError as e:
    if 'only available for users of participating TV providers' in str(e):
        queue_for_mvpd_retry(url)  # collect and process later with --ap-* credentials
    else:
        raise

Prevention

When it happens

Trigger: Extracting a site whose theplatform/AETN metadata has an MVPD wall while no --ap-mso was given; calling an extractor that internally invokes _extract_mvpd_info() without credentials; Adobe Pass session cache empty or expired.

Common situations: Running youtube-dl on locked episodes of participating networks (A&E, History, etc.) without provider credentials; misconfigured .netrc missing the 'adobepass' or site entry; switching MSOs without clearing the MVPD cache.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/96a93f385b513c41. Report an issue: GitHub.