{"record":{"id":"ae3ccf7cb903fe54","repo":"ytdl-org/youtube-dl","slug":"unable-to-download-video-webpage-s","errorCode":null,"errorMessage":"unable to download video webpage: %s","messagePattern":"unable to download video webpage: (.+?)","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/soundcloud.py","lineNumber":554,"sourceCode":"    }, {\n        'url': 'https://soundcloud.com/the-concept-band/sets/the-royal-concept-ep/token',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        mobj = re.match(self._VALID_URL, url)\n\n        full_title = '%s/sets/%s' % mobj.group('uploader', 'slug_title')\n        token = mobj.group('token')\n        if token:\n            full_title += '/' + token\n\n        info = self._download_json(self._resolv_url(\n            self._BASE_URL + full_title), full_title)\n\n        if 'errors' in info:\n            msgs = (compat_str(err['error_message']) for err in info['errors'])\n            raise ExtractorError('unable to download video webpage: %s' % ','.join(msgs))\n\n        return self._extract_set(info, token)\n\n\nclass SoundcloudPagedPlaylistBaseIE(SoundcloudIE):\n    def _extract_playlist(self, base_url, playlist_id, playlist_title):\n        # Per the SoundCloud documentation, the maximum limit for a linked partitioning query is 200.\n        # https://developers.soundcloud.com/blog/offset-pagination-deprecated\n        COMMON_QUERY = {\n            'limit': 200,\n            'linked_partitioning': '1',\n        }\n\n        query = COMMON_QUERY.copy()\n        query['offset'] = 0\n\n        next_href = base_url\n","sourceCodeStart":536,"sourceCodeEnd":572,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/soundcloud.py#L536-L572","documentation":"SoundcloudSetIE resolves a playlist/sets URL through the Soundcloud API; if the resolved info dict contains an 'errors' list, each entry's 'error_message' is joined and raised as 'unable to download video webpage: <msgs>'. This surfaces Soundcloud's own playlist-level failures (most commonly 'Not Found' / 404 for deleted or private sets).","triggerScenarios":"Resolving <uploader>/sets/<slug>[/<token>] where the API returns an errors array instead of playlist data: deleted playlist, private playlist accessed without its secret token, renamed uploader making the path stale.","commonSituations":"Deleted or made-private playlists (owner deleted the set or flipped visibility); a copied URL missing the secret token suffix; uploader renamed their account so the uploader segment of the URL no longer resolves; region/network blocks making the resolver return an error payload.","solutions":["Open the playlist URL in a browser to check whether it still exists / is public.","If private, obtain the full share link including the secret token path segment and use that exact URL.","If the uploader renamed, find their current handle and rebuild the URL.","Update yt-dlp - resolver contract changes also surface through this error."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"info = resolve(full_title)\nif 'errors' in info:\n    msgs = [e.get('error_message') for e in info['errors']]\n    if any('404' in str(m) or 'Not Found' in str(m) for m in msgs):\n        drop(url)","typeGuard":"def has_resolver_errors(info: dict) -> bool:\n    return 'errors' in info and bool(info['errors'])","tryCatchPattern":"try:\n    extract(url)\nexcept ExtractorError as e:\n    if 'unable to download video webpage' in str(e):\n        check_playlist_visibility(url)\n    else:\n        raise","preventionTips":["Use full share URLs including the secret token for private sets.","Refresh uploader handles when accounts are renamed.","Treat resolver 404s as permanent; do not retry."],"tags":["soundcloud","playlist","dead-link","private-content","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}