/services/reach_plan_service.proto

--- v19/services/reach_plan_service.proto   2025-05-30 15:35:57.000000000 +0000
+++ v20/services/reach_plan_service.proto   2025-05-30 15:36:04.000000000 +0000
@@ -118,12 +121,33 @@
   rpc GenerateReachForecast(GenerateReachForecastRequest)
       returns (GenerateReachForecastResponse) {
     option (google.api.http) = {
-      post: "/v19/customers/{customer_id=*}:generateReachForecast"
+      post: "/v20/customers/{customer_id=*}:generateReachForecast"
       body: "*"
     };
     option (google.api.method_signature) =
         "customer_id,campaign_duration,planned_products";
   }
+
+  // Returns the list of plannable user lists with their plannable status.
+  //
+  // List of thrown errors:
+  //   [AuthenticationError]()
+  //   [AuthorizationError]()
+  //   [FieldError]()
+  //   [HeaderError]()
+  //   [InternalError]()
+  //   [QuotaError]()
+  //   [RangeError]()
+  //   [ReachPlanError]()
+  //   [RequestError]()
+  rpc ListPlannableUserLists(ListPlannableUserListsRequest)
+      returns (ListPlannableUserListsResponse) {
+    option (google.api.http) = {
+      post: "/v20:listPlannableUserLists"
+      body: "*"
+    };
+    option (google.api.method_signature) = "customer_id";
+  }
 }

 // Request message for
@@ -135,6 +159,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.v20.common.AdditionalApplicationInfo
+      reach_application_info = 3 [(google.api.field_behavior) = OPTIONAL];
 }

 // Response message for
@@ -163,8 +191,12 @@
 }

 // Request message for
-// [ReachPlanService.ListPlannableLocations][google.ads.googleads.v19.services.ReachPlanService.ListPlannableLocations].
-message ListPlannableLocationsRequest {}
+// [ReachPlanService.ListPlannableLocations][google.ads.googleads.v20.services.ReachPlanService.ListPlannableLocations].
+message ListPlannableLocationsRequest {
+  // Optional. Additional information on the application issuing the request.
+  google.ads.googleads.v20.common.AdditionalApplicationInfo
+      reach_application_info = 1 [(google.api.field_behavior) = OPTIONAL];
+}

 // The list of plannable locations.
 message ListPlannableLocationsResponse {
@@ -202,8 +234,12 @@
 message ListPlannableProductsRequest {
   // Required. The ID of the selected location for planning. To list the
   // available plannable location IDs use
-  // [ReachPlanService.ListPlannableLocations][google.ads.googleads.v19.services.ReachPlanService.ListPlannableLocations].
+  // [ReachPlanService.ListPlannableLocations][google.ads.googleads.v20.services.ReachPlanService.ListPlannableLocations].
   string plannable_location_id = 2 [(google.api.field_behavior) = REQUIRED];
+
+  // Optional. Additional information on the application issuing the request.
+  google.ads.googleads.v20.common.AdditionalApplicationInfo
+      reach_application_info = 3 [(google.api.field_behavior) = OPTIONAL];
 }

 // A response with all available products.
@@ -227,6 +263,41 @@
   PlannableTargeting plannable_targeting = 2;
 }

+// Request message for
+// [ReachPlanService.ListPlannableUserLists][google.ads.googleads.v20.services.ReachPlanService.ListPlannableUserLists]
+// that lists the available user lists for a customer.
+message ListPlannableUserListsRequest {
+  // Required. The ID of the customer.
+  string customer_id = 1 [(google.api.field_behavior) = REQUIRED];
+
+  // The name of the customer being planned for. This is a user-defined value.
+  optional string customer_reach_group = 2;
+}
+
+// A response with all available user lists with their plannable status.
+message ListPlannableUserListsResponse {
+  // The list of user lists available for planning and related targeting
+  // metadata.
+  repeated PlannableUserList plannable_user_lists = 1;
+}
+
+// A plannable user list.
+message PlannableUserList {
+  // The user list ID.
+  google.ads.googleads.v20.common.UserListInfo user_list_info = 1;
+
+  // The name of the user list.
+  string display_name = 2;
+
+  // The user list type.
+  google.ads.googleads.v20.enums.UserListTypeEnum.UserListType user_list_type =
+      3;
+
+  // The plannable status of the user list.
+  google.ads.googleads.v20.enums.ReachPlanPlannableUserListStatusEnum
+      .ReachPlanPlannableUserListStatus plannable_status = 4;
+}
+
 // The targeting for which traffic metrics will be reported.
 message PlannableTargeting {
   // Allowed plannable age ranges for the product for which metrics will be
@@ -327,6 +398,10 @@

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

 // Effective frequency limit.