Radarr/Radarr · warning · ImportListException

Plex API responded with html content. Site is likely blocked

Error message

Plex API responded with html content. Site is likely blocked or unavailable.

What it means

Thrown by PlexParser.PreProcess when the response Content-Type contains 'text/json' but the request Accept did not request 'text/json', indicating the server returned an HTML page (login/captcha/block) instead of Plex JSON. It is an ImportListException tied to the response.

Source

Thrown at src/NzbDrone.Core/ImportLists/Plex/PlexParser.cs:63

                    Title = item.Title,
                    Year = item.Year
                });
            }

            return movies;
        }

        protected virtual bool PreProcess(ImportListResponse importListResponse)
        {
            if (importListResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
            {
                throw new ImportListException(importListResponse, "Plex API call resulted in an unexpected StatusCode [{0}]", importListResponse.HttpResponse.StatusCode);
            }

            if (importListResponse.HttpResponse.Headers.ContentType != null && importListResponse.HttpResponse.Headers.ContentType.Contains("text/json") &&
                importListResponse.HttpRequest.Headers.Accept != null && !importListResponse.HttpRequest.Headers.Accept.Contains("text/json"))
            {
                throw new ImportListException(importListResponse, "Plex API responded with html content. Site is likely blocked or unavailable.");
            }

            return true;
        }

        private string FindGuid(List<PlexSectionItemGuid> guids, string prefix)
        {
            var scheme = $"{prefix}://";

            return guids?.FirstOrDefault((guid) => guid.Id.StartsWith(scheme))?.Id.Replace(scheme, "");
        }
    }
}

View on GitHub (pinned to ca451608dc)

Solutions

  1. Re-authenticate the Plex list (OAuth) so requests carry a valid token and Plex returns JSON.
  2. Check for network-level blocks (VPN/ISP/Cloudflare) by opening the Plex API URL in a browser from the Radarr host.
  3. Disable the list if the block is permanent in your region.
Defensive patterns

Strategy: validation

Validate before calling

var ct = importResponse.HttpResponse.Headers.ContentType ?? string.Empty;
if (ct.Contains("text/html")) { /* blocked/login page served — re-auth or fix network */ }

Type guard

static bool IsHtmlIntercept(Exception ex) => ex is ImportListException && ex.Message.Contains("html content");

Try / catch

try { parser.ParseResponse(importResponse); }
catch (ImportListException ex) when (ex.Message.Contains("html content")) { _logger.Warn("Plex returned an HTML page; re-auth or check network: {0}", ex.Response.Request.Url); }

Prevention

When it happens

Trigger: Response Content-Type contains 'text/json' AND request Accept is non-null AND does NOT contain 'text/json'. Practically: Plex.tv (or an intermediary) served an HTML interstitial labelled with a JSON-ish content type.

Common situations: Cloudflare/Plex challenge page, an ISP block redirect, or the access token being rejected so Plex returns its HTML login page. Network-level interception is the usual cause.

Related errors


AI-assisted analysis of Radarr/Radarr@ca451608dc (2026-08-13). Data as JSON: /api/errors/4ae97c688bb1672e. Report an issue: GitHub.