{"record":{"id":"ded55e9721b46276","repo":"Jackett/Jackett","slug":"indexer-api-call-returned-an-error-jsonresponse","errorCode":null,"errorMessage":"Indexer API call returned an error [{jsonResponse.Error}]","messagePattern":"Indexer API call returned an error \\[(.+?)\\]","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/Jackett.Common/Indexers/Definitions/BroadcasTheNet.cs","lineNumber":251,"sourceCode":"    {\n        private readonly string _siteLink;\n        private readonly TorznabCapabilitiesCategories _categories;\n\n        public BroadcastheNetParser(string siteLink, TorznabCapabilitiesCategories categories)\n        {\n            _siteLink = siteLink;\n            _categories = categories;\n        }\n\n        public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)\n        {\n            var releases = new List<ReleaseInfo>();\n\n            var jsonResponse = JsonConvert.DeserializeObject<BroadcastheNetResponse>(indexerResponse.Content);\n\n            if (jsonResponse.Error != null)\n            {\n                throw new Exception($\"Indexer API call returned an error [{jsonResponse.Error}]\");\n            }\n\n            if (jsonResponse.Result?.Torrents?.Values == null)\n            {\n                return releases;\n            }\n\n            foreach (var btnResult in jsonResponse.Result.Torrents.Values)\n            {\n                var descriptions = new List<string>();\n\n                if (btnResult.Series.IsNotNullOrWhiteSpace())\n                {\n                    descriptions.Add(\"Series: \" + btnResult.Series);\n                }\n\n                if (btnResult.GroupName.IsNotNullOrWhiteSpace())\n                {","sourceCodeStart":233,"sourceCodeEnd":269,"githubUrl":"https://github.com/Jackett/Jackett/blob/adff1941476d8057a430cf55360356c1d23e971e/src/Jackett.Common/Indexers/Definitions/BroadcasTheNet.cs#L233-L269","documentation":"Thrown in BroadcastheNetParser.ParseResponse when the BTN JSON-RPC response's top-level Error field is non-null. The BTN API uses JSON-RPC 2.0, where errors are returned as an error object rather than an HTTP status code.","triggerScenarios":"Any BTN API call (search/manual) where the server reports an error: invalid API key, rate limit exceeded, malformed method parameters, banned IP, or an internal BTN server error.","commonSituations":"API key revoked after setup; hitting the BTN rate limit (5s request delay enforced); IP banned; passing a tvdbId/parameter BTN does not accept; BTN performing maintenance.","solutions":["Check the bracketed error text: 'API key not found' -> regenerate key; 'rate limit' -> slow down queries; IP ban -> rotate IP / VPN.","Update the API key in the indexer config.","If the error is transient, reduce search frequency or rely on Jackett's cache.","Consult https://btn.trackerstatus.info/ for BTN-side outages."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { var releases = parser.ParseResponse(indexerResponse); }\ncatch (Exception e) when (e.Message.Contains(\"Indexer API call returned an error\"))\n{\n    // parse the bracketed text: invalid key -> reconfigure; rate limit -> back off\n    logger.Warn(\"BTN API error: {0}\", e.Message);\n}","preventionTips":["Respect the 5s request delay to avoid rate-limit errors.","Keep the API key current; revoke/rotate promptly if leaked.","Monitor btn.trackerstatus.info for outages."],"tags":["api","json-rpc","parsing","broadcasthenet"],"backgroundTag":null,"analyzedSha":"adff1941476d8057a430cf55360356c1d23e971e","analyzedAt":"2026-08-13T15:06:32.872Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}