Jackett/Jackett · error · ArgumentException
Invalid filter. Status should be '{Healthy}', {Failing} or '
Error message
Invalid filter. Status should be '{Healthy}', {Failing} or '{Unknown}' What it means
StatusFilterFunc.ToFunc validates the argument to the '*status=' filter and throws ArgumentException when it is not one of the three accepted constants Healthy, Failing, or Unknown (case-insensitive). The filter pipeline builds predicate functions from user-supplied query args, so this guards a public-ish query surface. The thrown ArgumentException carries the bad value's source parameter name.
Source
Thrown at src/Jackett.Common/Utils/FilterFuncs/StatusFilterFunc.cs:27
public const string Healthy = "healthy";
public const string Failing = "failing";
public const string Unknown = "unknown";
private StatusFilterFunc() : base("status")
{
}
public override Func<IIndexer, bool> ToFunc(string args)
{
if (args == null)
throw new ArgumentNullException(nameof(args));
if (string.Equals(Healthy, args, StringComparison.InvariantCultureIgnoreCase))
return i => IsValid(i) && i.IsHealthy && !i.IsFailing;
if (string.Equals(Failing, args, StringComparison.InvariantCultureIgnoreCase))
return i => IsValid(i) && !i.IsHealthy && i.IsFailing;
if (string.Equals(Unknown, args, StringComparison.InvariantCultureIgnoreCase))
return i => IsValid(i) && ((!i.IsHealthy && !i.IsFailing) || (i.IsHealthy && i.IsFailing));
throw new ArgumentException($"Invalid filter. Status should be '{Healthy}', {Failing} or '{Unknown}'", nameof(args));
}
}
}
View on GitHub (pinned to adff194147)
Solutions
- Use one of the documented values: 'healthy', 'failing', or 'unknown' (any casing).
- If you built the URL programmatically, validate the status against the allowed set before issuing the request.
- Trim whitespace and check for accidental quote characters in the query string.
- Make sure you did not confuse the 'status' filter with the 'test' filter (Passed/Failed).
Defensive patterns
Strategy: validation
Validate before calling
static readonly HashSet<string> StatusSet =
new(StringComparer.OrdinalIgnoreCase) { "healthy", "failing", "unknown" };
static bool IsValidStatus(string s) => s != null && StatusSet.Contains(s.Trim()); Type guard
static bool IsKnownStatus(string s) =>
s != null && (s.Equals("healthy", StringComparison.OrdinalIgnoreCase)
|| s.Equals("failing", StringComparison.OrdinalIgnoreCase)
|| s.Equals("unknown", StringComparison.OrdinalIgnoreCase)); Prevention
- Whitelist the status value before building the query URL.
- Do not mix 'status' and 'test' filter vocabularies.
- Trim whitespace from user-supplied filter values.
When it happens
Trigger: A search request URL contains a status filter whose value is outside the allowed set, e.g. '/api/v2.0/indexers/*,status=ok/results' or '*status=down'. Also hit by typos like '*status=helthy' or trailing whitespace the equality check does not trim.
Common situations: A user hand-edits a Jackett URL or a third-party client sends a status value from an older/newer Jackett API version. Copy-pasting a filter list and including a value that belongs to the 'test' filter (Passed/Failed) instead of 'status'.
Related errors
- Invalid filter. Status should be '{Passed}' or '{Failed}'
- unsupported diacritics filter argument
- Error while parsing field={Field.Key}, selector={Field.Value
- Username must be an e-mail address
- Unknown indexer: {name}
AI-assisted analysis of Jackett/Jackett@adff194147 (2026-08-13).
Data as JSON: /api/errors/87efd76cbb6187b3.
Report an issue: GitHub.