Jackett/Jackett · error · Exception

Unexpected response content from indexer request: {jsonRespo

Error message

Unexpected response content from indexer request: {jsonResponse.Message ?? "Check the logs for more information."}

What it means

Thrown by MyAnonamouse.PerformQuery when the JSON deserialized successfully but jsonResponse.Data is null, and the response is not the benign 'Nothing returned, out of' sentinel (which returns an empty list normally). This is the structured application-error path: MyAnonamouse returned valid JSON with an error/rate-limit condition, surfacing jsonResponse.Message (or a fallback log hint) as the exception text.

Source

Thrown at src/Jackett.Common/Indexers/Definitions/MyAnonamouse.cs:288

            {
                throw new Exception(response.ContentString);
            }

            try
            {
                var sitelink = new Uri(SiteLink);

                var jsonResponse = JsonConvert.DeserializeObject<MyAnonamouseResponse>(response.ContentString);

                var error = jsonResponse.Error;
                if (error.IsNotNullOrWhiteSpace() && error.StartsWithIgnoreCase("Nothing returned, out of"))
                {
                    return releases;
                }

                if (jsonResponse.Data == null)
                {
                    throw new Exception($"Unexpected response content from indexer request: {jsonResponse.Message ?? "Check the logs for more information."}");
                }

                foreach (var item in jsonResponse.Data)
                {
                    var id = item.Id;
                    var details = new Uri(sitelink, $"/t/{id}");

                    var isFreeLeech = item.Free || item.PersonalFreeLeech;

                    var release = new ReleaseInfo
                    {
                        Guid = details,
                        Title = item.Title.Trim(),
                        Description = item.Description.Trim(),
                        Link = GetDownloadUrl(id),
                        Details = details,
                        Category = MapTrackerCatToNewznab(item.Category),
                        PublishDate = DateTime.ParseExact(item.Added, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime(),

View on GitHub (pinned to adff194147)

Solutions

  1. Read jsonResponse.Message in the exception — it states the API's reason (rate limit, permission, etc.).
  2. If rate-limited, reduce Jackett query frequency and offset/limit parameters.
  3. If permission-related, verify the account standing on MyAnonamouse.
  4. Retry after the rate-limit window expires.

Example fix

// before
if (jsonResponse.Data == null)
{
    throw new Exception($"Unexpected response content from indexer request: {jsonResponse.Message ?? "Check the logs for more information."}");
}

// after — distinguish rate-limit (retryable) from hard errors
if (jsonResponse.Data == null)
{
    var msg = jsonResponse.Message ?? "unknown";
    if (msg.ContainsIgnoreCase("rate") || msg.ContainsIgnoreCase("limit"))
        throw new Exception($"MyAnonamouse rate limit: {msg}");
    throw new Exception($"Unexpected MyAnonamouse response: {msg}");
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Inspect jsonResponse fields before the null-Data throw
if (jsonResponse.Data == null && jsonResponse.Message.IsNotNullOrWhiteSpace())
    logger.Warn("MyAnonamouse returned structured message: {0}", jsonResponse.Message);

Type guard

private static bool IsRateLimitMessage(string msg) =>
    msg != null && (msg.ContainsIgnoreCase("rate") || msg.ContainsIgnoreCase("limit"));

Try / catch

if (jsonResponse.Data == null)
{
    if (IsRateLimitMessage(jsonResponse.Message))
        throw new Exception($"MyAnonamouse rate limit: {jsonResponse.Message}"); // retryable upstream
    throw new Exception($"Unexpected MyAnonamouse response: {jsonResponse.Message ?? "Check logs"}");
}

Prevention

When it happens

Trigger: The search JSON parses into MyAnonamouseResponse, but Data is null while Error does not start with 'Nothing returned, out of'. The code throws with jsonResponse.Message if present, else a 'Check the logs' fallback. Typical of API rate-limit responses or permission errors returned as structured JSON.

Common situations: Rate-limit JSON response (Data null, Message describes the limit); account permission error; the search exceeded allowed pagination (the 'out of' case is handled, but other limit messages are not); API version returning a new error envelope.

Related errors


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