addedInput schema / properties / filter / anyOf
Added value: +[
+ {
+ "additionalProperties": false,
+ "description": "A single condition evaluated against one user profile field",
+ "properties": {
+ "operator": {
+ "description": "Comparison to apply, e.g. \"EQ\", \"INCLUDES\", \"IS_AFTER\"",
+ "enum": [
+ "ENDS_WITH",
+ "EQ",
+ "EXISTS",
+ "GT",
+ "GTE",
+ "INCLUDES",
+ "IS_AFTER",
+ "IS_BEFORE",
+ "LT",
+ "LTE",
+ "MEMBER_OF",
+ "NEQ",
+ "OMIT",
+ "STARTS_WITH"
+ ],
+ "type": "string"
+ },
+ "path": {
+ "description": "Dot-notation path into the user profile, e.g. \"title\" or \"location.city\"",
+ "type": "string"
+ },
+ "value": {
+ "description": "Value to compare against. Omit for existence checks like \"EXISTS\"",
+ "type": [
+ "string",
+ "number",
+ "boolean"
+ ]
+ }
+ },
+ "required": [
+ "operator",
+ "path"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A group combining nested filters with AND/OR",
+ "properties": {
+ "filters": {
+ "description": "Conditions and/or nested groups to combine",
+ "items": {
+ "$ref": "#/properties/filter"
+ },
+ "type": "array"
+ },
+ "operator": {
+ "description": "How the nested filters combine. The combinator lives on the group itself",
+ "enum": [
+ "AND",
+ "OR"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "operator",
+ "filters"
+ ],
+ "type": "object"
+ }
+]
changedInput schema / properties / filter / description
Previous value: -"Filter definition object (operator, rules)"New value: +"Audience membership filter. Either a single condition ({ operator, path, value }) or a group ({ operator: \"AND\" | \"OR\", filters: [...] }) nesting to any depth. Example: { \"operator\": \"AND\", \"filters\": [{ \"operator\": \"EQ\", \"path\": \"title\", \"value\": \"Engineer\" }, { \"operator\": \"INCLUDES\", \"path\": \"tags\", \"value\": \"beta\" }] }"