ytdl-org/youtube-dl · error · ExtractorError
Vidme said: Sorry, this video has been deleted.
Error message
Vidme said: Sorry, this video has been deleted.
What it means
Raised by the Vidme extractor when the API succeeds but response['video']['state'] == 'deleted'. The video object exists but the platform marked it deleted, so no formats would be returned. expected=True — deterministic content state, not a transient failure.
Source
Thrown at youtube_dl/extractor/vidme.py:155
try:
response = self._download_json(
'https://api.vid.me/videoByUrl/%s' % video_id, video_id)
except ExtractorError as e:
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 400:
response = self._parse_json(e.cause.read(), video_id)
else:
raise
error = response.get('error')
if error:
raise ExtractorError(
'%s returned error: %s' % (self.IE_NAME, error), expected=True)
video = response['video']
if video.get('state') == 'deleted':
raise ExtractorError(
'Vidme said: Sorry, this video has been deleted.',
expected=True)
if video.get('state') in ('user-disabled', 'suspended'):
raise ExtractorError(
'Vidme said: This video has been suspended either due to a copyright claim, '
'or for violating the terms of use.',
expected=True)
formats = []
for f in video.get('formats', []):
format_url = url_or_none(f.get('uri'))
if not format_url:
continue
format_type = f.get('type')
if format_type == 'dash':
formats.extend(self._extract_mpd_formats(
format_url, video_id, mpd_id='dash', fatal=False))View on GitHub (pinned to 956b8c5855)
Solutions
- Treat as permanent: the uploader or Vidme removed the video.
- Look for mirrors on other platforms; the original vid.me asset is unrecoverable.
- Skip vid.me links in automated archives.
- No code change helps — the state comes straight from the (defunct) API.
Defensive patterns
Strategy: validation
Validate before calling
state = get_nested(fetch_json('https://api.vid.me/videoByUrl/%s' % video_id), 'video', 'state')
if state == 'deleted':
skip(video_id, 'deleted on vidme') Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'has been deleted' in str(e):
archive_dead(url)
raise Prevention
- Treat deleted-state errors as permanent; never requeue.
- Cache video.state checks for URLs seen before.
- For defunct services, domain-level dead lists beat per-URL probing.
When it happens
Trigger: Extracting a vid.me video URL whose API payload has video.state == 'deleted' — user-deleted or moderation-removed uploads.
Common situations: Since Vidme closed in 2017, all remaining ids return deleted/absent states; users following links from old forum posts and archived pages.
Related errors
- %s returned error: %s
- Video %s is no longer available
- %s returned error: %s
- Vidme said: This video has been suspended either due to a co
- no video on the webpage
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/7cc2e544a3f3514c.
Report an issue: GitHub.