n8n-io/n8n · error

FILTER_MISSING_OPTIONS

FILTER_MISSING_OPTIONS

Error message

${nodeRef} is missing 'options' in ${paramPath}. Add: options: { caseSensitive: false, leftValue: '', typeValidation: 'strict' }

What it means

Error-level validator issue (code FILTER_MISSING_OPTIONS) emitted when a Filter node's filter value object is missing the 'options' key (or options is not an object). n8n's Filter node requires options (caseSensitive, leftValue, typeValidation) to evaluate conditions deterministically; the message suggests the canonical default object.

Source

Thrown at packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/filter-node-validator.ts:39

} from '../types';

const FILTER_NODE_TYPES = ['n8n-nodes-base.if', 'n8n-nodes-base.switch', 'n8n-nodes-base.filter'];

/**
 * Check a single filter value object for missing required fields.
 */
function validateFilterValue(
	filterValue: Record<string, unknown>,
	nodeRef: string,
	paramPath: string,
	nodeName: string,
	originalName: string | undefined,
): ValidationIssue[] {
	const issues: ValidationIssue[] = [];

	if (!filterValue.options || typeof filterValue.options !== 'object') {
		issues.push({
			code: 'FILTER_MISSING_OPTIONS',
			message: `${nodeRef} is missing 'options' in ${paramPath}. Add: options: { caseSensitive: false, leftValue: '', typeValidation: 'strict' }`,
			severity: 'error',
			nodeName,
			originalName,
			parameterPath: `${paramPath}.options`,
		});
	}

	if (!Array.isArray(filterValue.conditions) || filterValue.conditions.length === 0) {
		issues.push({
			code: 'FILTER_MISSING_CONDITIONS',
			message: `${nodeRef} is missing or has empty 'conditions' array in ${paramPath}. Add at least one condition with leftValue, operator, and rightValue.`,
			severity: 'error',
			nodeName,
			originalName,
			parameterPath: `${paramPath}.conditions`,
		});
	}

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Add options: { caseSensitive: false, leftValue: '', typeValidation: 'strict' } to the filter value.
  2. Confirm options is an object literal, not a primitive.
  3. Re-run the validator to confirm the error clears.

Example fix

// before
filter({ conditions: [...] })
// after
filter({
  options: { caseSensitive: false, leftValue: '', typeValidation: 'strict' },
  conditions: [...]
})
Defensive patterns

Strategy: validation

Validate before calling

function hasFilterOptions(fv: Record<string, unknown>): boolean {
  return !!fv.options && typeof fv.options === 'object';
}
if (!hasFilterOptions(filterValue)) {
  // error: add options object
}

Type guard

function isFilterOptions(v: unknown): v is { caseSensitive: boolean; leftValue: string; typeValidation: string } {
  return typeof v === 'object' && v !== null && 'typeValidation' in v;
}

Prevention

When it happens

Trigger: Defining a Filter node with conditions but omitting the options object; passing options as a primitive or array.

Common situations: Hand-authoring filter config without the full schema; LLM-generated filter that omits options; minimal config that assumed defaults.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/82e07b9d2ee8646f. Report an issue: GitHub.