{"record":{"id":"e9f8cf478fb7eec9","repo":"crowdsecurity/crowdsec","slug":"s-doesn-t-exist-w","errorCode":null,"errorMessage":"'%s' doesn't exist: %w","messagePattern":"'(.+?)' doesn't exist: %w","errorType":"validation","errorClass":"InvalidFilter","httpStatus":null,"severity":"error","filePath":"pkg/database/decisions.go","lineNumber":256,"sourceCode":"\t\tcase \"scopes\":\n\t\t\tdecisions = decisions.Where(decision.ScopeEQ(value[0]))\n\t\tcase \"uuid\":\n\t\t\tdecisions = decisions.Where(decision.UUIDIn(value...))\n\t\tcase \"origin\":\n\t\t\tdecisions = decisions.Where(decision.OriginEQ(value[0]))\n\t\tcase \"value\":\n\t\t\tdecisions = decisions.Where(decision.ValueEQ(value[0]))\n\t\tcase \"type\":\n\t\t\tdecisions = decisions.Where(decision.TypeEQ(value[0]))\n\t\tcase \"ip\", \"range\":\n\t\t\trng, err = csnet.NewRange(value[0])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, nil, fmt.Errorf(\"unable to convert '%s' to int: %w: %w\", value[0], err, InvalidIPOrRange)\n\t\t\t}\n\t\tcase \"scenario\":\n\t\t\tdecisions = decisions.Where(decision.ScenarioEQ(value[0]))\n\t\tdefault:\n\t\t\treturn 0, nil, fmt.Errorf(\"'%s' doesn't exist: %w\", param, InvalidFilter)\n\t\t}\n\t}\n\n\tdecisions, err = decisionIPFilter(decisions, contains, rng)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\tdecisionsToDelete, err := decisions.All(ctx)\n\tif err != nil {\n\t\tc.Log.Warningf(\"ExpireDecisionsWithFilter : %s\", err)\n\t\treturn 0, nil, fmt.Errorf(\"expire decisions with provided filter: %w\", DeleteFail)\n\t}\n\n\tcount, err := c.ExpireDecisions(ctx, decisionsToDelete)\n\tif err != nil {\n\t\treturn 0, nil, fmt.Errorf(\"expire decisions with provided filter: %w: %w\", err, DeleteFail)\n\t}","sourceCodeStart":238,"sourceCodeEnd":274,"githubUrl":"https://github.com/crowdsecurity/crowdsec/blob/909b5157986a2b2c2163300fdaef5ed01289f7d2/pkg/database/decisions.go#L238-L274","documentation":"ExpireDecisionsWithFilter only supports the filter keys 'contains', 'scopes', 'uuid', 'origin', 'value', 'type', 'ip', 'range' and 'scenario'. Any other key hits the default branch and returns this error wrapped with the InvalidFilter sentinel, meaning the filter parameter is unrecognized.","triggerScenarios":"Passing a misspelled or unsupported key in the filter map, e.g. \"scope\" instead of \"scopes\", \"values\", or \"origin_\" when calling ExpireDecisionsWithFilter / DeleteDecisions / DecisionCmd.","commonSituations":"API clients guessing filter key names; refactors renaming keys on one side only; scripts translated from v1 decisions API which used different parameter names.","solutions":["Use one of the supported keys: contains, scopes, uuid, origin, value, type, ip, range, scenario","Fix misspellings (scopes not scope, scenario not scenarios)","Check errors.Is(err, database.InvalidFilter) to return a 400 to API callers"],"exampleFix":"// before\nc.ExpireDecisionsWithFilter(ctx, map[string][]string{\"scope\": {\"ban\"}})\n// after\nc.ExpireDecisionsWithFilter(ctx, map[string][]string{\"scopes\": {\"ban\"}})","handlingStrategy":"validation","validationCode":"var validFilterKeys = map[string]bool{\n    \"contains\": true, \"scopes\": true, \"uuid\": true, \"origin\": true,\n    \"value\": true, \"type\": true, \"ip\": true, \"range\": true, \"scenario\": true,\n}\nfor k := range filter {\n    if !validFilterKeys[k] { return fmt.Errorf(\"unsupported filter key %q\", k) }\n}","typeGuard":null,"tryCatchPattern":"if _, _, err := client.ExpireDecisionsWithFilter(ctx, filter); err != nil {\n    if errors.Is(err, database.InvalidFilter) {\n        return fmt.Errorf(\"unknown filter parameter: %w\", err)\n    }\n    return err\n}","preventionTips":["Keep a shared constant list of allowed filter keys used by both caller and callee","Check the decisions API swagger for the authoritative parameter names","Cover filter key names with a unit test against ExpireDecisionsWithFilter"],"tags":["go","filter","validation","api"],"backgroundTag":"invalid-query-parameter","analyzedSha":"909b5157986a2b2c2163300fdaef5ed01289f7d2","analyzedAt":"2026-09-06T12:27:26.012Z","contentChangedAt":"2026-09-06T12:27:26.012Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}