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
- Send a Title that follows series naming (e.g. 'Series.Name.S01E02.1080p').
- Verify the title contains a recognizable season/episode or absolute pattern.
- Push the release to Radarr if it is actually a movie.
- 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
- Push only titles with recognizable season/episode patterns.
- Route movie releases to Radarr, not Sonarr.
- Keep scene/absolute mappings current for anime.
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
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Unable to parse episodes in the release, will need to be man
- Unable to find matching series and episodes, will need to be
- seriesId or episodeFileIds must be provided
- seriesId or episodeIds must be provided
- seriesIds must be provided
AI-assisted analysis of Sonarr/Sonarr@da2284d7ea (2026-08-13).
Data as JSON: /api/errors/2c14a6175742f478.
Report an issue: GitHub.