cube-js/cube · error · UserError
Operator ${f.operator} not supported for filter: ${JSON.stri
Error message
Operator ${f.operator} not supported for filter: ${JSON.stringify(f)} What it means
Whitelist guard in normalizeQueryFilters: the filter's `operator` value is present but not in the supported `operators` list. It fires when clients send misspelled or unsupported operator names for a filter.
Source
Thrown at packages/cubejs-api-gateway/src/query.js:373
const normalizeQueryFilters = (filter, timezone) => (
filter.map(f => {
const res = { ...f };
if (f.or) {
res.or = normalizeQueryFilters(f.or, timezone);
return res;
}
if (f.and) {
res.and = normalizeQueryFilters(f.and, timezone);
return res;
}
if (!f.operator) {
throw new UserError(`Operator required for filter: ${JSON.stringify(f)}`);
}
if (operators.indexOf(f.operator) === -1) {
throw new UserError(`Operator ${f.operator} not supported for filter: ${JSON.stringify(f)}`);
}
if ((!f.values || f.values.length === 0) && ['set', 'notSet', 'measureFilter'].indexOf(f.operator) === -1) {
throw new UserError(`Values required for filter: ${JSON.stringify(f)}`);
}
if (f.values) {
res.values = f.values.map(v => (v != null ? v.toString() : v));
}
if (f.dimension) {
res.member = f.dimension;
delete res.dimension;
}
return normalizeDateFilterValues(res, timezone);
})
);View on GitHub (pinned to 7d981676b3)
Solutions
- Replace the operator with one from the supported set (equals, notEquals, contains, notContains, set, notSet, inDateRange, beforeOrOnDate, afterOrOnDate, measureFilter, etc.).
- Check for typos or casing differences in the operator string.
- Consult the Cube REST API filter documentation for the exact operator names.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/cubejs-api-gateway/src/query.js:373 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02).
Data as JSON: /api/errors/13ee2ba1e289b0eb.
Report an issue: GitHub.