Jackett/Jackett · error · Exception

Indexer Error: {jsonResponse.StatusMessage}

Error message

Indexer Error: {jsonResponse.StatusMessage}

What it means

Thrown in BeyondHDAPIParser.ParseResponse when the deserialized BHDResponse has StatusCode == 0, which the parser treats as an error sentinel, surfacing StatusMessage as the detail. This is an application-level error reported in valid JSON: the keys were accepted structurally but the API flagged a problem.

Source

Thrown at src/Jackett.Common/Indexers/Definitions/BeyondHDAPI.cs:270

            if (indexerResponse.Content.StartsWith("<"))
            {
                // The response was not JSON, likely a HTML page for a server outage
                _logger.Warn("The response was not JSON: {0}", indexerResponse.Content);

                throw new Exception("The response was not JSON");
            }

            if (indexerResponse.Content.ContainsIgnoreCase("Invalid API Key"))
            {
                throw new Exception("API Key invalid or not authorized");
            }

            var jsonResponse = JsonConvert.DeserializeObject<BHDResponse>(indexerResponse.Content);

            if (jsonResponse.StatusCode == 0)
            {
                throw new Exception($"Indexer Error: {jsonResponse.StatusMessage}");
            }

            foreach (var row in jsonResponse.Results)
            {
                if (row.DownloadUrl.IsNullOrWhiteSpace() || row.InfoUrl.IsNullOrWhiteSpace())
                {
                    _logger.Warn("Missing download or info url for release with the Id {0}, skipping.", row.Id);
                    continue;
                }

                // Skip invalid results when freeleech or limited filtering is set
                if ((_configData.FilterFreeleech.Value && !row.Freeleech) || (_configData.FilterLimited.Value && !row.Limited))
                {
                    continue;
                }

                var releaseInfo = new ReleaseInfo
                {

View on GitHub (pinned to adff194147)

Solutions

  1. Read jsonResponse.StatusMessage in the exception text for the exact API-reported reason.
  2. If rate-limited, reduce Jackett search frequency and retry after a delay.
  3. Confirm the account is in good standing on BeyondHD.
  4. Update Jackett in case the BHDResponse schema/semantics changed.

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

null

Type guard

static bool IsBHDErrorStatus(BHDResponse r) => r?.StatusCode == 0;

Try / catch

try { return parser.ParseResponse(indexerResponse); }
catch (Exception ex) when (ex.Message.StartsWith("Indexer Error:"))
{
    logger.Warn("BeyondHD application error: {Message}", ex.Message);
    if (LooksLikeRateLimit(ex.Message)) await BackoffAsync();
    throw;
}

Prevention

When it happens

Trigger: jsonResponse.StatusCode == 0 after successful JsonConvert.DeserializeObject<BHDResponse>. Causes: rate limiting reported by the API, malformed query, disabled account flagged by API, or any business error BeyondHD encodes with StatusCode 0 and a StatusMessage.

Common situations: BeyondHD rate-limited the request; the requested query/category is invalid; account flagged/restricted at the API layer; the API version changed and now returns StatusCode 0 for previously-fine calls.

Related errors


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