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

  1. Inspect the HTTP status code in the message: 429 → slow down; 403/503 → anti-bot/Cloudflare; 5xx → server issue, retry later.
  2. Reduce Jackett query frequency / cap concurrent requests to the indexer.
  3. Re-configure the indexer (credentials/cookies) if the status suggests an auth failure (401/403).
  4. 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

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


AI-assisted analysis of Jackett/Jackett@adff194147 (2026-08-13). Data as JSON: /api/errors/e76f5a792ea37eb0. Report an issue: GitHub.