Jackett/Jackett · error · Exception
Error Parsing Json Response: Status={response.Status} Respon
Error message
Error Parsing Json Response: Status={response.Status} Response={results} What it means
Thrown during a JSON search path after the final (post-relogin) request when `response.Status != HttpStatusCode.OK`. The message includes the HTTP status and the raw response body, indicating the search endpoint returned a non-200 (e.g. 403, 500, 503) rather than valid JSON.
Source
Thrown at src/Jackett.Common/Indexers/Definitions/CardigannIndexer.cs:1614
{
throw new Exception("Relogin failed");
}
await TestLogin();
response = await RequestWithCookiesAsync(searchUrl, method: method, data: queryCollection, headers: headers);
if (response.IsRedirect && SearchPath.Followredirect)
{
response = await FollowIfRedirect(response);
}
results = response.ContentString;
}
if (response.Status != HttpStatusCode.OK)
{
throw new Exception($"Error Parsing Json Response: Status={response.Status} Response={results}");
}
if (response.Status == HttpStatusCode.OK
&& SearchPath.Response is { NoResultsMessage: not null }
&& (SearchPath.Response.NoResultsMessage != string.Empty && results.Contains(SearchPath.Response.NoResultsMessage) || (SearchPath.Response.NoResultsMessage == string.Empty && results == string.Empty)))
{
continue;
}
JToken parsedJson;
try
{
parsedJson = JToken.Parse(results);
}
catch (JsonReaderException ex)
{
logger.Warn("Unexpected response content ({0} bytes): {1}", response.ContentBytes.Length, response.ContentString);View on GitHub (pinned to adff194147)
Solutions
- Inspect the HTTP status code in the message: 429 → slow down; 403/503 → anti-bot/Cloudflare; 5xx → server issue, retry later.
- Reduce Jackett query frequency / cap concurrent requests to the indexer.
- Re-configure the indexer (credentials/cookies) if the status suggests an auth failure (401/403).
- Verify the search URL path in the definition is still valid.
Defensive patterns
Strategy: retry
Validate before calling
// Before parsing, classify the status to fail fast with a clearer message.
if (response.Status == HttpStatusCode.Forbidden || response.Status == HttpStatusCode.ServiceUnavailable)
logger.Warn("Anti-bot/rate-limit status {0}; search will fail JSON parsing.", response.Status); Try / catch
try { results = await indexer.PerformQuery(query); }
catch (Exception ex) when (ex.Message.Contains("Error Parsing Json Response: Status"))
{ logger.Warn("Non-OK status from tracker; retry later. {0}", ex.Message); await Task.Delay(backoff); } Prevention
- Rate-limit Jackett's query frequency to avoid 429s.
- Monitor for Cloudflare/anti-bot 403/503 and handle at the network layer.
When it happens
Trigger: The relogin-and-retry branch completed (or was skipped) and `response.Status` is still not 200. Typical for rate limiting (429), Cloudflare/anti-bot (403/503), server errors (500/502), or an expired session the relogin could not fix.
Common situations: Tracker rate-limited the IP; Cloudflare/WAF block; search endpoint temporarily down; session expired and relogin failed silently upstream.
Related errors
- Request to {Url} failed (Error {Status}) - The tracker seems
- Got redirected to another domain. Try changing the indexer U
- Selector \"{selectorSelector}\" didn't match {parentObj.ToSt
- None of the case selectors \"{string.Join(",", Selector.Case
- Relogin failed
AI-assisted analysis of Jackett/Jackett@adff194147 (2026-08-13).
Data as JSON: /api/errors/e76f5a792ea37eb0.
Report an issue: GitHub.