/services/reach_plan_service.proto

--- v20/services/reach_plan_service.proto   2025-08-05 14:39:41.000000000 +0000
+++ v21/services/reach_plan_service.proto   2025-08-05 14:39:49.000000000 +0000
@@ -147,7 +148,31 @@
   rpc ListPlannableUserLists(ListPlannableUserListsRequest)
       returns (ListPlannableUserListsResponse) {
     option (google.api.http) = {
-      post: "/v20:listPlannableUserLists"
+      post: "/v21:listPlannableUserLists"
+      body: "*"
+    };
+    option (google.api.method_signature) = "customer_id";
+  }
+
+  // Returns the list of plannable user interests.
+  // A plannable user interest is one that can be targeted in a reach forecast
+  // using
+  // [ReachPlanService.GenerateReachForecast][google.ads.googleads.v21.services.ReachPlanService.GenerateReachForecast].
+  //
+  // List of thrown errors:
+  //   [AuthenticationError]()
+  //   [AuthorizationError]()
+  //   [FieldError]()
+  //   [HeaderError]()
+  //   [InternalError]()
+  //   [ListOperationError]()
+  //   [QuotaError]()
+  //   [RequestError]()
+  //   [StringLengthError]()
+  rpc ListPlannableUserInterests(ListPlannableUserInterestsRequest)
+      returns (ListPlannableUserInterestsResponse) {
+    option (google.api.http) = {
+      post: "/v21:listPlannableUserInterests"
       body: "*"
     };
     option (google.api.method_signature) = "customer_id";
@@ -276,6 +301,10 @@

   // The name of the customer being planned for. This is a user-defined value.
   optional string customer_reach_group = 2;
+
+  // Optional. Additional information on the application issuing the request.
+  google.ads.googleads.v21.common.AdditionalApplicationInfo
+      reach_application_info = 3 [(google.api.field_behavior) = OPTIONAL];
 }

 // A response with all available user lists with their plannable status.
@@ -332,7 +361,63 @@
 }

 // Request message for
-// [ReachPlanService.GenerateReachForecast][google.ads.googleads.v20.services.ReachPlanService.GenerateReachForecast].
+// [ReachPlanService.ListPlannableUserInterests][google.ads.googleads.v21.services.ReachPlanService.ListPlannableUserInterests].
+message ListPlannableUserInterestsRequest {
+  // Required. The ID of the customer.
+  string customer_id = 1 [(google.api.field_behavior) = REQUIRED];
+
+  // Optional. A filter by user interest type. If set, only user interests with
+  // a type listed in the filter will be returned. If not set, user interests of
+  // all supported types will be returned. Supported user interest types are
+  // AFFINITY and IN_MARKET. Each type must be specified at most once.
+  repeated google.ads.googleads.v21.enums.UserInterestTaxonomyTypeEnum
+      .UserInterestTaxonomyType user_interest_taxonomy_types = 2
+      [(google.api.field_behavior) = OPTIONAL];
+
+  // A filter by user interest name. If set, only user interests with a name
+  // containing the literal string (case insensitive) in the filter will be
+  // returned. Maximum length is 200 characters.
+  optional string name_query = 3;
+
+  // A filter by user interest path. If set, only user interests with a path
+  // containing the literal string (case insensitive) in the filter will be
+  // returned. Maximum length is 200 characters.
+  optional string path_query = 4;
+
+  // Optional. Additional information on the application issuing the request.
+  google.ads.googleads.v21.common.AdditionalApplicationInfo
+      reach_application_info = 5 [(google.api.field_behavior) = OPTIONAL];
+}
+
+// Response message for
+// [ReachPlanService.ListPlannableUserInterests][google.ads.googleads.v21.services.ReachPlanService.ListPlannableUserInterests].
+message ListPlannableUserInterestsResponse {
+  // The list of plannable user interests.
+  repeated PlannableUserInterest plannable_user_interests = 1;
+}
+
+// A plannable user interest that can be targeted in a reach forecast using
+// [ReachPlanService.GenerateReachForecast][google.ads.googleads.v21.services.ReachPlanService.GenerateReachForecast].
+message PlannableUserInterest {
+  // The user interest id.
+  google.ads.googleads.v21.common.UserInterestInfo user_interest = 1;
+
+  // The user interest type.
+  google.ads.googleads.v21.enums.UserInterestTaxonomyTypeEnum
+      .UserInterestTaxonomyType user_interest_type = 2;
+
+  // The user interest display name.
+  // For example, "Autos & Vehicles"
+  string user_interest_display_name = 3;
+
+  // The user interest path.
+  // For example, "/Autos & Vehicles/Motor Vehicles/Motor Vehicles by
+  // Type/Off-Road Vehicles"
+  string user_interest_path = 4;
+}
+
+// Request message for
+// [ReachPlanService.GenerateReachForecast][google.ads.googleads.v21.services.ReachPlanService.GenerateReachForecast].
 message GenerateReachForecastRequest {
   // Required. The ID of the customer.
   string customer_id = 1 [(google.api.field_behavior) = REQUIRED];