{"record":{"id":"229776ad4170c93d","repo":"Radarr/Radarr","slug":"failed-to-add-nzb-0","errorCode":null,"errorMessage":"Failed to add nzb {0}","messagePattern":"Failed to add nzb (.+?)","errorType":"exception","errorClass":"DownloadClientException","httpStatus":null,"severity":"error","filePath":"src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs","lineNumber":43,"sourceCode":"                       IDiskProvider diskProvider,\n                       IRemotePathMappingService remotePathMappingService,\n                       IValidateNzbs nzbValidationService,\n                       Logger logger,\n                       ILocalizationService localizationService)\n            : base(httpClient, configService, diskProvider, remotePathMappingService, nzbValidationService, logger, localizationService)\n        {\n            _proxy = proxy;\n        }\n\n        protected override string AddFromNzbFile(RemoteMovie remoteMovie, string filename, byte[] fileContents)\n        {\n            var priority = remoteMovie.Movie.MovieMetadata.Value.IsRecentMovie ? Settings.RecentMoviePriority : Settings.OlderMoviePriority;\n\n            var response = _proxy.DownloadNzb(fileContents, filename, priority, Settings);\n\n            if (response == null)\n            {\n                throw new DownloadClientException(\"Failed to add nzb {0}\", filename);\n            }\n\n            return response;\n        }\n\n        public override string Name => \"NZBVortex\";\n\n        public override IEnumerable<DownloadClientItem> GetItems()\n        {\n            List<NzbVortexQueueItem> vortexQueue;\n\n            try\n            {\n                vortexQueue = _proxy.GetQueue(30, Settings);\n            }\n            catch (DownloadClientException ex)\n            {\n                _logger.Warn(\"Couldn't get download queue. {0}\", ex.Message);","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/Radarr/Radarr/blob/ca451608dc60c6cec754aba8d96bfa30e9468ed5/src/NzbDrone.Core/Download/Clients/NzbVortex/NzbVortex.cs#L25-L61","documentation":"Thrown by NzbVortex.AddFromNzbFile when _proxy.DownloadNzb() returns null instead of a response ID string. The proxy's DownloadNzb sends the NZB file to NZBVortex's nzb/add endpoint and returns response.Id. A null return means NZBVortex did not provide a download ID despite accepting the request, which Radarr treats as a failure to add.","triggerScenarios":"_proxy.DownloadNzb(fileContents, filename, priority, Settings) returns null. This occurs when the NzbVortexAddResponse from the nzb/add endpoint has a null or empty Id field.","commonSituations":"NZBVortex encountered an internal error processing the NZB but did not return an explicit error, the NZB file was malformed or empty, the group/category setting points to a non-existent NZBVortex group, or a version mismatch causes the response to lack the expected Id field.","solutions":["Verify the NZB file is valid and not corrupted before it reaches the download client.","Check that the NZBVortex group/category (TvCategory) in Radarr settings exists in NZBVortex.","Review NZBVortex logs for errors at the time of the add attempt.","Upgrade NZBVortex to a version compatible with the API level Radarr expects.","Test adding the same NZB manually through the NZBVortex UI to isolate the issue."],"exampleFix":"// before\nvar response = _proxy.DownloadNzb(fileContents, filename, priority, Settings);\nif (response == null)\n{\n    throw new DownloadClientException(\"Failed to add nzb {0}\", filename);\n}\n\n// after — log the NZBVortex response for diagnosis before throwing\nvar response = _proxy.DownloadNzb(fileContents, filename, priority, Settings);\nif (response == null)\n{\n    _logger.Error(\"NZBVortex returned null ID for NZB: {0}\", filename);\n    throw new DownloadClientException(\"Failed to add nzb {0}\", filename);\n}","handlingStrategy":"validation","validationCode":"// Validate NZB content before sending to NZBVortex\nif (fileContents == null || fileContents.Length == 0)\n{\n    throw new ArgumentException(\"NZB file contents are empty\");\n}\n// Verify the category exists in NZBVortex\nvar groups = _proxy.GetGroups(settings);\nif (settings.TvCategory.IsNotNullOrWhiteSpace() && !groups.Any(g => g.Name == settings.TvCategory))\n{\n    return $\"NZBVortex group '{settings.TvCategory}' does not exist\";\n}","typeGuard":"static bool IsNzbVortexAddFailed(Exception ex) => ex is DownloadClientException dce && dce.Message.Contains(\"Failed to add nzb\");","tryCatchPattern":"try\n{\n    var downloadId = _proxy.DownloadNzb(fileContents, filename, priority, Settings);\n}\ncatch (DownloadClientException ex) when (ex.Message.Contains(\"Failed to add nzb\"))\n{\n    _logger.Error(ex, \"NZBVortex did not return a download ID. Check NZBVortex logs.\");\n    // The release was not added — do not mark as downloaded\n}\ncatch (DownloadClientException ex)\n{\n    _logger.Error(ex, \"NZBVortex error.\");\n}","preventionTips":["Validate the NZB file is well-formed (non-empty, valid XML) before sending it to NZBVortex.","Ensure the configured TvCategory/group exists in NZBVortex before adding downloads.","Test adding NZBs manually through the NZBVortex UI to rule out server-side issues.","Keep NZBVortex updated to the API level Radarr expects."],"tags":["nzbvortex","download-client","nzb","configuration"],"backgroundTag":null,"analyzedSha":"ca451608dc60c6cec754aba8d96bfa30e9468ed5","analyzedAt":"2026-08-13T17:21:54.115Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}