Sonarr/Sonarr · error · DownloadClientUnavailableException
No {remoteEpisode.Release.DownloadProtocol} download client
Error message
No {remoteEpisode.Release.DownloadProtocol} download client available What it means
In DownloadService.DownloadReport, GetDownloadClients returned an empty list for the release's protocol after all filtering, so there is no client to grab with. DownloadClientUnavailableException. Distinct from 186: 186 fires inside the provider during filtering, whereas 190 fires in the service after the provider already returned empty (e.g. no enabled client for the protocol at all).
Source
Thrown at src/NzbDrone.Core/Download/DownloadService.cs:77
var tags = remoteEpisode.Series?.Tags;
if (downloadClientId.HasValue)
{
var specificClient = _downloadClientProvider.Get(downloadClientId.Value);
await DownloadReport(remoteEpisode, specificClient);
return;
}
var availableClients = _downloadClientProvider.GetDownloadClients(
remoteEpisode.Release.DownloadProtocol,
remoteEpisode.Release.IndexerId,
filterBlockedClients,
tags).ToList();
if (!availableClients.Any())
{
throw new DownloadClientUnavailableException($"No {remoteEpisode.Release.DownloadProtocol} download client available");
}
var triedClients = new HashSet<int>();
foreach (var downloadClient in availableClients)
{
if (triedClients.Contains(downloadClient.Definition.Id))
{
continue;
}
try
{
_logger.Debug("Attempting download with client: {0}", downloadClient.Definition.Name);
await DownloadReport(remoteEpisode, downloadClient);
_downloadClientProvider.ReportSuccessfulDownloadClient(
remoteEpisode.Release.DownloadProtocol,View on GitHub (pinned to da2284d7ea)
Solutions
- Add and enable a client matching the release's DownloadProtocol (usenet or torrent).
- Enable an existing but disabled client for that protocol.
- Fix client tags so at least one is eligible for the series.
Example fix
// before: usenet release grabbed with no usenet client configured // after: add a usenet client (Sabnzbd / Nzbget) and enable it
Defensive patterns
Strategy: validation
Validate before calling
var hasClient = _downloadClientFactory.GetAvailableProviders().Any(c => c.Protocol == release.DownloadProtocol);
if (!hasClient) { /* no enabled client for this protocol: configuration error, do not attempt grab */ } Try / catch
try { await _downloadService.DownloadReport(remoteEpisode, downloadClientId); }
catch (DownloadClientUnavailableException ex) when (ex.Message.Contains("download client available"))
{
// tell the user to add/enable a client for the release protocol
} Prevention
- Configure at least one enabled client for each protocol you use.
- Run a configuration health check on startup and when settings change.
- Surface 'no client for protocol' as a setup error, not a silent skip.
When it happens
Trigger: Grabbing a release whose DownloadProtocol has zero enabled, non-filtered clients after tag/indexer/blocked filtering: availableClients.Any() is false.
Common situations: No usenet client is configured but the release is usenet (or vice versa for torrents); all clients for the protocol are disabled; the tag filter excluded everyone.
Related errors
- Unable to determine qBittorrent API version
- Remote site redirected to {url}
- Failed to authenticate with Transmission. It may be necessar
- Remote host did not return a Session Id.
- Failed to authenticate with Transmission.
AI-assisted analysis of Sonarr/Sonarr@da2284d7ea (2026-08-13).
Data as JSON: /api/errors/05ff7b3f277c2a4b.
Report an issue: GitHub.