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
- Read jsonResponse.StatusMessage in the exception text for the exact API-reported reason.
- If rate-limited, reduce Jackett search frequency and retry after a delay.
- Confirm the account is in good standing on BeyondHD.
- 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
- Inspect StatusMessage verbatim for the real reason.
- Apply backoff when StatusMessage indicates rate limiting.
- Track StatusCode==0 occurrences to detect persistent account/API issues.
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
- The response was not JSON
- API Key invalid or not authorized
- {response.ContentString}
- Unexpected response content from indexer request: {jsonRespo
- Invalid response from AvistaZ, the response is not valid JSO
AI-assisted analysis of Jackett/Jackett@adff194147 (2026-08-13).
Data as JSON: /api/errors/b40a4e063efbe86c.
Report an issue: GitHub.