Sonarr/Sonarr · error · ValidationException

Unable to parse

Error message

Unable to parse

What it means

Returned by POST /api/v3/release/push when the pushed release's title could not be parsed into a ParsedEpisodeInfo after decision processing — decision?.RemoteEpisode.ParsedEpisodeInfo is null. Sonarr throws a ValidationException attaching the failure to the 'Title' field with the supplied release.Title as the attempted value. HTTP 400 (model validation).

Source

Thrown at src/Sonarr.Api.V3/Indexers/ReleasePushController.cs:78

            ResolveIndexer(info);

            var downloadClientId = ResolveDownloadClientId(release);

            DownloadDecision decision;

            lock (PushLock)
            {
                var decisions = _downloadDecisionMaker.GetRssDecision(new List<ReleaseInfo> { info }, true);

                decision = decisions.FirstOrDefault();

                _downloadDecisionProcessor.ProcessDecision(decision, downloadClientId).GetAwaiter().GetResult();
            }

            if (decision?.RemoteEpisode.ParsedEpisodeInfo == null)
            {
                throw new ValidationException(new List<ValidationFailure> { new("Title", "Unable to parse", release.Title) });
            }

            return MapDecisions(new[] { decision });
        }

        private void ResolveIndexer(ReleaseInfo release)
        {
            var indexer = _indexerFactory.ResolveIndexer(release.IndexerId, release.Indexer);

            if (indexer == null)
            {
                _logger.Debug("Push Release {0} not associated with an indexer.", release.Title);
            }
            else
            {
                _logger.Debug("Push Release {0} associated with indexer '{1} ({2})", release.Title, indexer.Name, indexer.Id);

                release.IndexerId = indexer.Id;

View on GitHub (pinned to da2284d7ea)

Solutions

  1. Send a Title that follows series naming (e.g. 'Series.Name.S01E02.1080p').
  2. Verify the title contains a recognizable season/episode or absolute pattern.
  3. Push the release to Radarr if it is actually a movie.
  4. Improve parser/scene mapping for the series if the title is valid but unrecognized.

Example fix

// before
{ "title":"Some.Movie.2023.1080p", "downloadUrl":"...", "protocol":"torrent", "publishDate":"..." }

// after
{ "title":"Series.Name.S01E02.1080p.WEB-DL", "downloadUrl":"...", "protocol":"torrent", "publishDate":"..." }
Defensive patterns

Strategy: validation

Validate before calling

function looksLikeSeries(t){ return /S\d{1,2}E\d{1,2}|\d{1,3}x\d{1,2}|\b\d{2,4}\b/i.test(t); }
if (!looksLikeSeries(release.title)) throw new Error('title does not parse as an episode');
fetch('/api/v3/release/push', { method:'POST', body: JSON.stringify(release) });

Type guard

function isParsableEpisodeTitle(t){ return typeof t === 'string' && /S\d{1,2}E\d{1,2}/i.test(t); }

Try / catch

try { await push(release); }
catch (e) { if (/unable to parse/i.test(e.message)) { console.warn('not a series release; route to Radarr?'); } }

Prevention

When it happens

Trigger: POST /api/v3/release/push with a Title that the parser cannot turn into episode info — e.g. a movie release name, garbage characters, a title with no season/episode pattern, or an anime title the parser doesn't recognize.

Common situations: Third-party tool pushing a release with a non-series title; copy-paste typos in the title; pushing a movie to Sonarr instead of Radarr; missing scene/absolute-number mapping.

Understand the failure class

Related errors


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