{"record":{"id":"b40a4e063efbe86c","repo":"Jackett/Jackett","slug":"indexer-error-jsonresponse-statusmessage","errorCode":null,"errorMessage":"Indexer Error: {jsonResponse.StatusMessage}","messagePattern":"Indexer Error: (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/Jackett.Common/Indexers/Definitions/BeyondHDAPI.cs","lineNumber":270,"sourceCode":"\n            if (indexerResponse.Content.StartsWith(\"<\"))\n            {\n                // The response was not JSON, likely a HTML page for a server outage\n                _logger.Warn(\"The response was not JSON: {0}\", indexerResponse.Content);\n\n                throw new Exception(\"The response was not JSON\");\n            }\n\n            if (indexerResponse.Content.ContainsIgnoreCase(\"Invalid API Key\"))\n            {\n                throw new Exception(\"API Key invalid or not authorized\");\n            }\n\n            var jsonResponse = JsonConvert.DeserializeObject<BHDResponse>(indexerResponse.Content);\n\n            if (jsonResponse.StatusCode == 0)\n            {\n                throw new Exception($\"Indexer Error: {jsonResponse.StatusMessage}\");\n            }\n\n            foreach (var row in jsonResponse.Results)\n            {\n                if (row.DownloadUrl.IsNullOrWhiteSpace() || row.InfoUrl.IsNullOrWhiteSpace())\n                {\n                    _logger.Warn(\"Missing download or info url for release with the Id {0}, skipping.\", row.Id);\n                    continue;\n                }\n\n                // Skip invalid results when freeleech or limited filtering is set\n                if ((_configData.FilterFreeleech.Value && !row.Freeleech) || (_configData.FilterLimited.Value && !row.Limited))\n                {\n                    continue;\n                }\n\n                var releaseInfo = new ReleaseInfo\n                {","sourceCodeStart":252,"sourceCodeEnd":288,"githubUrl":"https://github.com/Jackett/Jackett/blob/adff1941476d8057a430cf55360356c1d23e971e/src/Jackett.Common/Indexers/Definitions/BeyondHDAPI.cs#L252-L288","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"null","handlingStrategy":"try-catch","validationCode":"null","typeGuard":"static bool IsBHDErrorStatus(BHDResponse r) => r?.StatusCode == 0;","tryCatchPattern":"try { return parser.ParseResponse(indexerResponse); }\ncatch (Exception ex) when (ex.Message.StartsWith(\"Indexer Error:\"))\n{\n    logger.Warn(\"BeyondHD application error: {Message}\", ex.Message);\n    if (LooksLikeRateLimit(ex.Message)) await BackoffAsync();\n    throw;\n}","preventionTips":["Inspect StatusMessage verbatim for the real reason.","Apply backoff when StatusMessage indicates rate limiting.","Track StatusCode==0 occurrences to detect persistent account/API issues."],"tags":["beyondhd","parse","api-error","rate-limit","json"],"backgroundTag":null,"analyzedSha":"adff1941476d8057a430cf55360356c1d23e971e","analyzedAt":"2026-08-13T15:06:32.872Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}