Sonarr/Sonarr · error · NzbDroneClientException
Unable to find matching series and episodes, will need to be
Error message
Unable to find matching series and episodes, will need to be manually provided
What it means
Returned as HTTP 404 (NzbDroneClientException NotFound) inside POST /api/v5/release when the cached RemoteEpisode has no Series and the request supplied neither SearchInfo.EpisodeId nor SearchInfo.SeriesId. Without one of those, Sonarr has no way to resolve which series/episodes the release belongs to, so it asks the caller to provide them manually.
Source
Thrown at src/Sonarr.Api.V5/Release/ReleaseController.cs:157
remoteEpisode.Series = _seriesService.GetSeries(episode.SeriesId);
remoteEpisode.Episodes = new List<Episode> { episode };
}
else if (release.SearchInfo?.SeriesId.HasValue == true)
{
var series = _seriesService.GetSeries(release.SearchInfo.SeriesId.Value);
var episodes = _parsingService.GetEpisodes(remoteEpisode.ParsedEpisodeInfo, series, true);
if (episodes.Empty())
{
throw new NzbDroneClientException(HttpStatusCode.NotFound, "Unable to parse episodes in the release, will need to be manually provided");
}
remoteEpisode.Series = series;
remoteEpisode.Episodes = episodes;
}
else
{
throw new NzbDroneClientException(HttpStatusCode.NotFound, "Unable to find matching series and episodes, will need to be manually provided");
}
}
else if (remoteEpisode.Episodes.Empty())
{
var episodes = _parsingService.GetEpisodes(remoteEpisode.ParsedEpisodeInfo, remoteEpisode.Series, true);
if (episodes.Empty() && release.SearchInfo?.EpisodeId.HasValue == true)
{
var episode = _episodeService.GetEpisode(release.SearchInfo.EpisodeId.Value);
episodes = new List<Episode> { episode };
}
remoteEpisode.Episodes = episodes;
}
if (remoteEpisode.Episodes.Empty())
{View on GitHub (pinned to da2284d7ea)
Solutions
- Include SearchInfo with at least EpisodeId or SeriesId in the grab request
- Use the Override block to specify SeriesId (and preferably EpisodeIds)
- If the series genuinely isn't in Sonarr, add it first, then re-search and grab
Example fix
// before — no series resolution metadata
{ "guid": "..." }
// after — supply search info
{ "guid": "...", "searchInfo": { "seriesId": 5 } } Defensive patterns
Strategy: validation
Validate before calling
// ensure the grab carries enough metadata to resolve the series
bool hasResolution = release.SearchInfo?.EpisodeId.HasValue == true
|| release.SearchInfo?.SeriesId.HasValue == true
|| release.Override?.SeriesId != null;
if (!hasResolution)
throw new ArgumentException("Provide SearchInfo.EpisodeId or SeriesId (or Override.SeriesId) so the release can be resolved"); Prevention
- Always include SearchInfo (EpisodeId or SeriesId) when grabbing an unmatched release
- Use the Override block to specify the series explicitly
- Add the series to Sonarr before grabbing if it isn't imported yet
When it happens
Trigger: POST /api/v5/release for a cached release whose RemoteEpisode.Series is null, with no SearchInfo block (or SearchInfo lacking both EpisodeId and SeriesId).
Common situations: The release is unmatched (parser found no series) and the user attempts to grab without supplying override/search metadata. An automated client forwards a grab without enrichment.
Related errors
- Unable to parse episodes in the release, will need to be man
- Couldn't find requested release in cache, try searching agai
- Indexer API call returned NotFound, the Indexer API may have
- Couldn't find requested release in cache, try searching agai
- Unable to parse episodes in the release, will need to be man
AI-assisted analysis of Sonarr/Sonarr@da2284d7ea (2026-08-13).
Data as JSON: /api/errors/0867dd10829f70c5.
Report an issue: GitHub.