ytdl-org/youtube-dl · error · ExtractorError

details (dynamic from authorize XML response, xml_text(autho

Error message

details (dynamic from authorize XML response, xml_text(authorize, 'details'))

What it means

Raised when the Adobe Pass 'authorize' endpoint response XML contains an '<error' element. The message text is taken dynamically from the XML's <details> node, so the exact wording comes from Adobe's server. Expected=True marks it as a server-side authorization refusal (e.g. not entitled, session invalid) rather than an extractor bug.

Source

Thrown at youtube_dl/extractor/adobepass.py:1550

            authz_token = requestor_info.get(guid)
            if authz_token and is_expired(authz_token, 'simpleTokenTTL'):
                authz_token = None
            if not authz_token:
                authorize = self._download_webpage(
                    self._SERVICE_PROVIDER_TEMPLATE % 'authorize', video_id,
                    'Retrieving Authorization Token', data=urlencode_postdata({
                        'resource_id': resource,
                        'requestor_id': requestor_id,
                        'authentication_token': authn_token,
                        'mso_id': xml_text(authn_token, 'simpleTokenMsoID'),
                        'userMeta': '1',
                    }), headers=mvpd_headers)
                if '<pendingLogout' in authorize:
                    self._downloader.cache.store(self._MVPD_CACHE, requestor_id, {})
                    count += 1
                    continue
                if '<error' in authorize:
                    raise ExtractorError(xml_text(authorize, 'details'), expected=True)
                authz_token = unescapeHTML(xml_text(authorize, 'authzToken'))
                requestor_info[guid] = authz_token
                self._downloader.cache.store(self._MVPD_CACHE, requestor_id, requestor_info)

            mvpd_headers.update({
                'ap_19': xml_text(authn_token, 'simpleSamlNameID'),
                'ap_23': xml_text(authn_token, 'simpleSamlSessionIndex'),
            })

            short_authorize = self._download_webpage(
                self._SERVICE_PROVIDER_TEMPLATE % 'shortAuthorize',
                video_id, 'Retrieving Media Token', data=urlencode_postdata({
                    'authz_token': authz_token,
                    'requestor_id': requestor_id,
                    'session_guid': xml_text(authn_token, 'simpleTokenAuthenticationGuid'),
                    'hashed_guid': 'false',
                }), headers=mvpd_headers)
            if '<pendingLogout' in short_authorize:

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Treat the dynamic <details> text as authoritative: it usually states 'not authorized' or 'authentication expired' — act on that first
  2. If it mentions authentication, clear the Adobe Pass cache and re-authenticate fresh (--ap-* credentials)
  3. Verify the MVPD subscription actually includes the channel of the requested video
  4. Report the exact details string upstream if it persists with a fully entitled account, since it may indicate a changed Adobe Pass contract
Defensive patterns

Strategy: try-catch

Try / catch

try:
    info = ydl.extract_info(url)
except ExtractorError as e:
    # e.msg is the dynamic <details> text from the authorize XML
    log_mvpd_authorize_failure(url, str(e))
    if 'authentication' in str(e).lower():
        clear_adobepass_cache_and_requeue(url)

Prevention

When it happens

Trigger: POSTing resource_id/requestor_id/authentication_token to the authorize endpoint and receiving '<error' in the XML; the MVPD account is not subscribed to the channel carrying the video; authentication token expired between authn and authz; requestor_id not provisioned for the resource.

Common situations: Cable subscription tier lacks the requested network; token staleness after long-running batch jobs; the network's requestor_id changed server-side; geolocation mismatch between the IP and the MVPD account region.

Related errors


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