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

  1. Add and enable a client matching the release's DownloadProtocol (usenet or torrent).
  2. Enable an existing but disabled client for that protocol.
  3. 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

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


AI-assisted analysis of Sonarr/Sonarr@da2284d7ea (2026-08-13). Data as JSON: /api/errors/05ff7b3f277c2a4b. Report an issue: GitHub.