/common/criteria.proto

--- v23/common/criteria.proto   2026-04-17 05:00:50.000000000 +0000
+++ v24/common/criteria.proto   2026-04-17 05:00:52.000000000 +0000
@@ -925,3 +925,48 @@
     int64 hotel_class = 6;
   }
 }
+
+// Represents a Retail Filter Bundle, used to link an ad group to a shared set
+// containing retail filters.
+message RetailFilterBundle {
+  // The resource name of the shared set that contains the retail filter.
+  // This field is required.
+  optional string shared_set = 1;
+}
+
+// Represents a Retail Filter.
+message RetailFilter {
+  // Type of the retail filter node.
+  oneof node {
+    // An expression node. At this time, this can only be an OR node.
+    RetailFilterExpression expression = 1;
+
+    // A tag node.
+    RetailTag tag = 2;
+  }
+}
+
+// Represents a Retail Filter Expression. Tags grouped within an expression
+// are joined with OR operator. A product needs to have any of these tags to
+// satisfy expression condition.
+message RetailFilterExpression {
+  // The name of the expression. This name is used for grouping Retail Tags into
+  // one logical expression with OR operator.
+  // The name can contain at most 20 characters. Only lowercase
+  // latin letters, underscores, and numbers are allowed.
+  // This field is required and must be unique within the shared set.
+  optional string name = 1;
+}
+
+// Represents a Retail Filter Tag.
+message RetailTag {
+  // The value of the tag.
+  // It can contain at most 50 characters. All Unicode characters except comma
+  // and newline are allowed.
+  // This field is required.
+  optional string value = 1;
+
+  // The name of the expression this tag belongs to. If empty, the tag is
+  // a top-level condition.
+  optional string expression_name = 2;
+}