xref: /aosp_15_r20/external/googleapis/google/cloud/recommender/v1beta1/recommender_service.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2022 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.cloud.recommender.v1beta1;
18
19import "google/api/annotations.proto";
20import "google/api/client.proto";
21import "google/api/field_behavior.proto";
22import "google/api/resource.proto";
23import "google/cloud/recommender/v1beta1/insight.proto";
24import "google/cloud/recommender/v1beta1/insight_type_config.proto";
25import "google/cloud/recommender/v1beta1/recommendation.proto";
26import "google/cloud/recommender/v1beta1/recommender_config.proto";
27import "google/protobuf/field_mask.proto";
28
29option csharp_namespace = "Google.Cloud.Recommender.V1Beta1";
30option go_package = "cloud.google.com/go/recommender/apiv1beta1/recommenderpb;recommenderpb";
31option java_multiple_files = true;
32option java_outer_classname = "RecommenderProto";
33option java_package = "com.google.cloud.recommender.v1beta1";
34option objc_class_prefix = "CREC";
35
36// Provides insights and recommendations for cloud customers for various
37// categories like performance optimization, cost savings, reliability, feature
38// discovery, etc. Insights and recommendations are generated automatically
39// based on analysis of user resources, configuration and monitoring metrics.
40service Recommender {
41  option (google.api.default_host) = "recommender.googleapis.com";
42  option (google.api.oauth_scopes) =
43      "https://www.googleapis.com/auth/cloud-platform";
44
45  // Lists insights for the specified Cloud Resource. Requires the
46  // recommender.*.list IAM permission for the specified insight type.
47  rpc ListInsights(ListInsightsRequest) returns (ListInsightsResponse) {
48    option (google.api.http) = {
49      get: "/v1beta1/{parent=projects/*/locations/*/insightTypes/*}/insights"
50      additional_bindings {
51        get: "/v1beta1/{parent=billingAccounts/*/locations/*/insightTypes/*}/insights"
52      }
53      additional_bindings {
54        get: "/v1beta1/{parent=folders/*/locations/*/insightTypes/*}/insights"
55      }
56      additional_bindings {
57        get: "/v1beta1/{parent=organizations/*/locations/*/insightTypes/*}/insights"
58      }
59    };
60    option (google.api.method_signature) = "parent";
61  }
62
63  // Gets the requested insight. Requires the recommender.*.get IAM permission
64  // for the specified insight type.
65  rpc GetInsight(GetInsightRequest) returns (Insight) {
66    option (google.api.http) = {
67      get: "/v1beta1/{name=projects/*/locations/*/insightTypes/*/insights/*}"
68      additional_bindings {
69        get: "/v1beta1/{name=billingAccounts/*/locations/*/insightTypes/*/insights/*}"
70      }
71      additional_bindings {
72        get: "/v1beta1/{name=folders/*/locations/*/insightTypes/*/insights/*}"
73      }
74      additional_bindings {
75        get: "/v1beta1/{name=organizations/*/locations/*/insightTypes/*/insights/*}"
76      }
77    };
78    option (google.api.method_signature) = "name";
79  }
80
81  // Marks the Insight State as Accepted. Users can use this method to
82  // indicate to the Recommender API that they have applied some action based
83  // on the insight. This stops the insight content from being updated.
84  //
85  // MarkInsightAccepted can be applied to insights in ACTIVE state. Requires
86  // the recommender.*.update IAM permission for the specified insight.
87  rpc MarkInsightAccepted(MarkInsightAcceptedRequest) returns (Insight) {
88    option (google.api.http) = {
89      post: "/v1beta1/{name=projects/*/locations/*/insightTypes/*/insights/*}:markAccepted"
90      body: "*"
91      additional_bindings {
92        post: "/v1beta1/{name=billingAccounts/*/locations/*/insightTypes/*/insights/*}:markAccepted"
93        body: "*"
94      }
95      additional_bindings {
96        post: "/v1beta1/{name=folders/*/locations/*/insightTypes/*/insights/*}:markAccepted"
97        body: "*"
98      }
99      additional_bindings {
100        post: "/v1beta1/{name=organizations/*/locations/*/insightTypes/*/insights/*}:markAccepted"
101        body: "*"
102      }
103    };
104    option (google.api.method_signature) = "name,state_metadata,etag";
105  }
106
107  // Lists recommendations for the specified Cloud Resource. Requires the
108  // recommender.*.list IAM permission for the specified recommender.
109  rpc ListRecommendations(ListRecommendationsRequest)
110      returns (ListRecommendationsResponse) {
111    option (google.api.http) = {
112      get: "/v1beta1/{parent=projects/*/locations/*/recommenders/*}/recommendations"
113      additional_bindings {
114        get: "/v1beta1/{parent=billingAccounts/*/locations/*/recommenders/*}/recommendations"
115      }
116      additional_bindings {
117        get: "/v1beta1/{parent=folders/*/locations/*/recommenders/*}/recommendations"
118      }
119      additional_bindings {
120        get: "/v1beta1/{parent=organizations/*/locations/*/recommenders/*}/recommendations"
121      }
122    };
123    option (google.api.method_signature) = "parent,filter";
124  }
125
126  // Gets the requested recommendation. Requires the recommender.*.get
127  // IAM permission for the specified recommender.
128  rpc GetRecommendation(GetRecommendationRequest) returns (Recommendation) {
129    option (google.api.http) = {
130      get: "/v1beta1/{name=projects/*/locations/*/recommenders/*/recommendations/*}"
131      additional_bindings {
132        get: "/v1beta1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}"
133      }
134      additional_bindings {
135        get: "/v1beta1/{name=folders/*/locations/*/recommenders/*/recommendations/*}"
136      }
137      additional_bindings {
138        get: "/v1beta1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}"
139      }
140    };
141    option (google.api.method_signature) = "name";
142  }
143
144  // Marks the Recommendation State as Claimed. Users can use this method to
145  // indicate to the Recommender API that they are starting to apply the
146  // recommendation themselves. This stops the recommendation content from being
147  // updated. Associated insights are frozen and placed in the ACCEPTED state.
148  //
149  // MarkRecommendationClaimed can be applied to recommendations in CLAIMED or
150  // ACTIVE state.
151  //
152  // Requires the recommender.*.update IAM permission for the specified
153  // recommender.
154  rpc MarkRecommendationClaimed(MarkRecommendationClaimedRequest)
155      returns (Recommendation) {
156    option (google.api.http) = {
157      post: "/v1beta1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markClaimed"
158      body: "*"
159      additional_bindings {
160        post: "/v1beta1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markClaimed"
161        body: "*"
162      }
163      additional_bindings {
164        post: "/v1beta1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markClaimed"
165        body: "*"
166      }
167      additional_bindings {
168        post: "/v1beta1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markClaimed"
169        body: "*"
170      }
171    };
172    option (google.api.method_signature) = "name,state_metadata,etag";
173  }
174
175  // Marks the Recommendation State as Succeeded. Users can use this method to
176  // indicate to the Recommender API that they have applied the recommendation
177  // themselves, and the operation was successful. This stops the recommendation
178  // content from being updated. Associated insights are frozen and placed in
179  // the ACCEPTED state.
180  //
181  // MarkRecommendationSucceeded can be applied to recommendations in ACTIVE,
182  // CLAIMED, SUCCEEDED, or FAILED state.
183  //
184  // Requires the recommender.*.update IAM permission for the specified
185  // recommender.
186  rpc MarkRecommendationSucceeded(MarkRecommendationSucceededRequest)
187      returns (Recommendation) {
188    option (google.api.http) = {
189      post: "/v1beta1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markSucceeded"
190      body: "*"
191      additional_bindings {
192        post: "/v1beta1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markSucceeded"
193        body: "*"
194      }
195      additional_bindings {
196        post: "/v1beta1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markSucceeded"
197        body: "*"
198      }
199      additional_bindings {
200        post: "/v1beta1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markSucceeded"
201        body: "*"
202      }
203    };
204    option (google.api.method_signature) = "name,state_metadata,etag";
205  }
206
207  // Marks the Recommendation State as Failed. Users can use this method to
208  // indicate to the Recommender API that they have applied the recommendation
209  // themselves, and the operation failed. This stops the recommendation content
210  // from being updated. Associated insights are frozen and placed in the
211  // ACCEPTED state.
212  //
213  // MarkRecommendationFailed can be applied to recommendations in ACTIVE,
214  // CLAIMED, SUCCEEDED, or FAILED state.
215  //
216  // Requires the recommender.*.update IAM permission for the specified
217  // recommender.
218  rpc MarkRecommendationFailed(MarkRecommendationFailedRequest)
219      returns (Recommendation) {
220    option (google.api.http) = {
221      post: "/v1beta1/{name=projects/*/locations/*/recommenders/*/recommendations/*}:markFailed"
222      body: "*"
223      additional_bindings {
224        post: "/v1beta1/{name=billingAccounts/*/locations/*/recommenders/*/recommendations/*}:markFailed"
225        body: "*"
226      }
227      additional_bindings {
228        post: "/v1beta1/{name=folders/*/locations/*/recommenders/*/recommendations/*}:markFailed"
229        body: "*"
230      }
231      additional_bindings {
232        post: "/v1beta1/{name=organizations/*/locations/*/recommenders/*/recommendations/*}:markFailed"
233        body: "*"
234      }
235    };
236    option (google.api.method_signature) = "name,state_metadata,etag";
237  }
238
239  // Gets the requested Recommender Config. There is only one instance of the
240  // config for each Recommender.
241  rpc GetRecommenderConfig(GetRecommenderConfigRequest)
242      returns (RecommenderConfig) {
243    option (google.api.http) = {
244      get: "/v1beta1/{name=projects/*/locations/*/recommenders/*/config}"
245      additional_bindings {
246        get: "/v1beta1/{name=organizations/*/locations/*/recommenders/*/config}"
247      }
248    };
249    option (google.api.method_signature) = "name";
250  }
251
252  // Updates a Recommender Config. This will create a new revision of the
253  // config.
254  rpc UpdateRecommenderConfig(UpdateRecommenderConfigRequest)
255      returns (RecommenderConfig) {
256    option (google.api.http) = {
257      patch: "/v1beta1/{recommender_config.name=projects/*/locations/*/recommenders/*/config}"
258      body: "recommender_config"
259      additional_bindings {
260        post: "/v1beta1/{recommender_config.name=organizations/*/locations/*/recommenders/*/config}"
261        body: "recommender_config"
262      }
263    };
264    option (google.api.method_signature) = "recommender_config,update_mask";
265  }
266
267  // Gets the requested InsightTypeConfig. There is only one instance of the
268  // config for each InsightType.
269  rpc GetInsightTypeConfig(GetInsightTypeConfigRequest)
270      returns (InsightTypeConfig) {
271    option (google.api.http) = {
272      get: "/v1beta1/{name=projects/*/locations/*/insightTypes/*/config}"
273      additional_bindings {
274        get: "/v1beta1/{name=organizations/*/locations/*/insightTypes/*/config}"
275      }
276    };
277    option (google.api.method_signature) = "name";
278  }
279
280  // Updates an InsightTypeConfig change. This will create a new revision of the
281  // config.
282  rpc UpdateInsightTypeConfig(UpdateInsightTypeConfigRequest)
283      returns (InsightTypeConfig) {
284    option (google.api.http) = {
285      patch: "/v1beta1/{insight_type_config.name=projects/*/locations/*/insightTypes/*/config}"
286      body: "insight_type_config"
287      additional_bindings {
288        post: "/v1beta1/{insight_type_config.name=organizations/*/locations/*/insightTypes/*/config}"
289        body: "insight_type_config"
290      }
291    };
292    option (google.api.method_signature) = "insight_type_config,update_mask";
293  }
294
295  // Lists all available Recommenders.
296  // No IAM permissions are required.
297  rpc ListRecommenders(ListRecommendersRequest)
298      returns (ListRecommendersResponse) {
299    option (google.api.http) = {
300      get: "/v1beta1/recommenders"
301    };
302  }
303
304  // Lists available InsightTypes.
305  // No IAM permissions are required.
306  rpc ListInsightTypes(ListInsightTypesRequest)
307      returns (ListInsightTypesResponse) {
308    option (google.api.http) = {
309      get: "/v1beta1/insightTypes"
310    };
311  }
312}
313
314// Request for the `ListInsights` method.
315message ListInsightsRequest {
316  // Required. The container resource on which to execute the request.
317  // Acceptable formats:
318  //
319  // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]`
320  //
321  // * `projects/[PROJECT_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]`
322  //
323  // * `billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]`
324  //
325  // * `folders/[FOLDER_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]`
326  //
327  // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]`
328  //
329  // LOCATION here refers to GCP Locations:
330  // https://cloud.google.com/about/locations/
331  // INSIGHT_TYPE_ID refers to supported insight types:
332  // https://cloud.google.com/recommender/docs/insights/insight-types.
333  string parent = 1 [
334    (google.api.field_behavior) = REQUIRED,
335    (google.api.resource_reference) = {
336      type: "recommender.googleapis.com/InsightType"
337    }
338  ];
339
340  // Optional. The maximum number of results to return from this request.
341  // Non-positive values are ignored. If not specified, the server will
342  // determine the number of results to return.
343  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
344
345  // Optional. If present, retrieves the next batch of results from the
346  // preceding call to this method. `page_token` must be the value of
347  // `next_page_token` from the previous response. The values of other method
348  // parameters must be identical to those in the previous call.
349  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
350
351  // Optional. Filter expression to restrict the insights returned. Supported
352  // filter fields:
353  //
354  // * `stateInfo.state`
355  //
356  // * `insightSubtype`
357  //
358  // * `severity`
359  //
360  // Examples:
361  //
362  // * `stateInfo.state = ACTIVE OR stateInfo.state = DISMISSED`
363  //
364  // * `insightSubtype = PERMISSIONS_USAGE`
365  //
366  // * `severity = CRITICAL OR severity = HIGH`
367  //
368  // * `stateInfo.state = ACTIVE AND (severity = CRITICAL OR severity = HIGH)`
369  //
370  // (These expressions are based on the filter language described at
371  // https://google.aip.dev/160)
372  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
373}
374
375// Response to the `ListInsights` method.
376message ListInsightsResponse {
377  // The set of insights for the `parent` resource.
378  repeated Insight insights = 1;
379
380  // A token that can be used to request the next page of results. This field is
381  // empty if there are no additional results.
382  string next_page_token = 2;
383}
384
385// Request to the `GetInsight` method.
386message GetInsightRequest {
387  // Required. Name of the insight.
388  string name = 1 [
389    (google.api.field_behavior) = REQUIRED,
390    (google.api.resource_reference) = {
391      type: "recommender.googleapis.com/Insight"
392    }
393  ];
394}
395
396// Request for the `MarkInsightAccepted` method.
397message MarkInsightAcceptedRequest {
398  // Required. Name of the insight.
399  string name = 1 [
400    (google.api.field_behavior) = REQUIRED,
401    (google.api.resource_reference) = {
402      type: "recommender.googleapis.com/Insight"
403    }
404  ];
405
406  // Optional. State properties user wish to include with this state.  Full
407  // replace of the current state_metadata.
408  map<string, string> state_metadata = 2
409      [(google.api.field_behavior) = OPTIONAL];
410
411  // Required. Fingerprint of the Insight. Provides optimistic locking.
412  string etag = 3 [(google.api.field_behavior) = REQUIRED];
413}
414
415// Request for the `ListRecommendations` method.
416message ListRecommendationsRequest {
417  // Required. The container resource on which to execute the request.
418  // Acceptable formats:
419  //
420  // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]`
421  //
422  // * `projects/[PROJECT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]`
423  //
424  // * `billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]`
425  //
426  // * `folders/[FOLDER_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]`
427  //
428  // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]`
429  //
430  // LOCATION here refers to GCP Locations:
431  // https://cloud.google.com/about/locations/
432  // RECOMMENDER_ID refers to supported recommenders:
433  // https://cloud.google.com/recommender/docs/recommenders.
434  string parent = 1 [
435    (google.api.field_behavior) = REQUIRED,
436    (google.api.resource_reference) = {
437      type: "recommender.googleapis.com/Recommender"
438    }
439  ];
440
441  // Optional. The maximum number of results to return from this request.
442  // Non-positive values are ignored. If not specified, the server will
443  // determine the number of results to return.
444  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
445
446  // Optional. If present, retrieves the next batch of results from the
447  // preceding call to this method. `page_token` must be the value of
448  // `next_page_token` from the previous response. The values of other method
449  // parameters must be identical to those in the previous call.
450  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
451
452  // Filter expression to restrict the recommendations returned. Supported
453  // filter fields:
454  //
455  // * `state_info.state`
456  //
457  // * `recommenderSubtype`
458  //
459  // * `priority`
460  //
461  // Examples:
462  //
463  // * `stateInfo.state = ACTIVE OR stateInfo.state = DISMISSED`
464  //
465  // * `recommenderSubtype = REMOVE_ROLE OR recommenderSubtype = REPLACE_ROLE`
466  //
467  // * `priority = P1 OR priority = P2`
468  //
469  // * `stateInfo.state = ACTIVE AND (priority = P1 OR priority = P2)`
470  //
471  // (These expressions are based on the filter language described at
472  // https://google.aip.dev/160)
473  string filter = 5;
474}
475
476// Response to the `ListRecommendations` method.
477message ListRecommendationsResponse {
478  // The set of recommendations for the `parent` resource.
479  repeated Recommendation recommendations = 1;
480
481  // A token that can be used to request the next page of results. This field is
482  // empty if there are no additional results.
483  string next_page_token = 2;
484}
485
486// Request to the `GetRecommendation` method.
487message GetRecommendationRequest {
488  // Required. Name of the recommendation.
489  string name = 1 [
490    (google.api.field_behavior) = REQUIRED,
491    (google.api.resource_reference) = {
492      type: "recommender.googleapis.com/Recommendation"
493    }
494  ];
495}
496
497// Request for the `MarkRecommendationClaimed` Method.
498message MarkRecommendationClaimedRequest {
499  // Required. Name of the recommendation.
500  string name = 1 [
501    (google.api.field_behavior) = REQUIRED,
502    (google.api.resource_reference) = {
503      type: "recommender.googleapis.com/Recommendation"
504    }
505  ];
506
507  // State properties to include with this state. Overwrites any existing
508  // `state_metadata`.
509  // Keys must match the regex `/^[a-z0-9][a-z0-9_.-]{0,62}$/`.
510  // Values must match the regex `/^[a-zA-Z0-9_./-]{0,255}$/`.
511  map<string, string> state_metadata = 2;
512
513  // Required. Fingerprint of the Recommendation. Provides optimistic locking.
514  string etag = 3 [(google.api.field_behavior) = REQUIRED];
515}
516
517// Request for the `MarkRecommendationSucceeded` Method.
518message MarkRecommendationSucceededRequest {
519  // Required. Name of the recommendation.
520  string name = 1 [
521    (google.api.field_behavior) = REQUIRED,
522    (google.api.resource_reference) = {
523      type: "recommender.googleapis.com/Recommendation"
524    }
525  ];
526
527  // State properties to include with this state. Overwrites any existing
528  // `state_metadata`.
529  // Keys must match the regex `/^[a-z0-9][a-z0-9_.-]{0,62}$/`.
530  // Values must match the regex `/^[a-zA-Z0-9_./-]{0,255}$/`.
531  map<string, string> state_metadata = 2;
532
533  // Required. Fingerprint of the Recommendation. Provides optimistic locking.
534  string etag = 3 [(google.api.field_behavior) = REQUIRED];
535}
536
537// Request for the `MarkRecommendationFailed` Method.
538message MarkRecommendationFailedRequest {
539  // Required. Name of the recommendation.
540  string name = 1 [
541    (google.api.field_behavior) = REQUIRED,
542    (google.api.resource_reference) = {
543      type: "recommender.googleapis.com/Recommendation"
544    }
545  ];
546
547  // State properties to include with this state. Overwrites any existing
548  // `state_metadata`.
549  // Keys must match the regex `/^[a-z0-9][a-z0-9_.-]{0,62}$/`.
550  // Values must match the regex `/^[a-zA-Z0-9_./-]{0,255}$/`.
551  map<string, string> state_metadata = 2;
552
553  // Required. Fingerprint of the Recommendation. Provides optimistic locking.
554  string etag = 3 [(google.api.field_behavior) = REQUIRED];
555}
556
557// Request for the GetRecommenderConfig` method.
558message GetRecommenderConfigRequest {
559  // Required. Name of the Recommendation Config to get.
560  //
561  // Acceptable formats:
562  //
563  // * `projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config`
564  //
565  // * `projects/[PROJECT_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config`
566  //
567  // * `organizations/[ORGANIZATION_ID]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config`
568  string name = 1 [
569    (google.api.field_behavior) = REQUIRED,
570    (google.api.resource_reference) = {
571      type: "recommender.googleapis.com/RecommenderConfig"
572    }
573  ];
574}
575
576// Request for the `UpdateRecommenderConfig` method.
577message UpdateRecommenderConfigRequest {
578  // Required. The RecommenderConfig to update.
579  RecommenderConfig recommender_config = 1
580      [(google.api.field_behavior) = REQUIRED];
581
582  // The list of fields to be updated.
583  google.protobuf.FieldMask update_mask = 2;
584
585  // If true, validate the request and preview the change, but do not actually
586  // update it.
587  bool validate_only = 3;
588}
589
590// Request for the GetInsightTypeConfig` method.
591message GetInsightTypeConfigRequest {
592  // Required. Name of the InsightTypeConfig to get.
593  //
594  // Acceptable formats:
595  //
596  // * `projects/[PROJECT_NUMBER]/locations/global/recommenders/[INSIGHT_TYPE_ID]/config`
597  //
598  // * `projects/[PROJECT_ID]/locations/global/recommenders/[INSIGHT_TYPE_ID]/config`
599  //
600  // * `organizations/[ORGANIZATION_ID]/locations/global/recommenders/[INSIGHT_TYPE_ID]/config`
601  string name = 1 [
602    (google.api.field_behavior) = REQUIRED,
603    (google.api.resource_reference) = {
604      type: "recommender.googleapis.com/InsightTypeConfig"
605    }
606  ];
607}
608
609// Request for the `UpdateInsightTypeConfig` method.
610message UpdateInsightTypeConfigRequest {
611  // Required. The InsightTypeConfig to update.
612  InsightTypeConfig insight_type_config = 1
613      [(google.api.field_behavior) = REQUIRED];
614
615  // The list of fields to be updated.
616  google.protobuf.FieldMask update_mask = 2;
617
618  // If true, validate the request and preview the change, but do not actually
619  // update it.
620  bool validate_only = 3;
621}
622
623// Request for the `ListRecommender` method.
624message ListRecommendersRequest {
625  // The number of RecommenderTypes to return per page. The service may return
626  // fewer than this value.
627  int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL];
628
629  // A page token, received from a previous `ListRecommenders` call.
630  // Provide this to retrieve the subsequent page.
631  string page_token = 2 [(google.api.field_behavior) = OPTIONAL];
632}
633
634// Response for the `ListRecommender` method.
635message ListRecommendersResponse {
636  // The set of recommenders available
637  repeated RecommenderType recommenders = 1;
638
639  // A token, which can be sent as `page_token` to retrieve the next page.
640  // If this field is omitted, there are no subsequent pages.
641  string next_page_token = 2;
642}
643
644// Request for the `ListInsightTypes` method.
645message ListInsightTypesRequest {
646  // The number of InsightTypes to return per page. The service may return
647  // fewer than this value.
648  int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL];
649
650  // A page token, received from a previous `ListRecommenders` call.
651  // Provide this to retrieve the subsequent page.
652  string page_token = 2 [(google.api.field_behavior) = OPTIONAL];
653}
654
655// Response for the `ListInsightTypes` method.
656message ListInsightTypesResponse {
657  // The set of recommenders available
658  repeated InsightType insight_types = 1;
659
660  // A token, which can be sent as `page_token` to retrieve the next page.
661  // If this field is omitted, there are no subsequent pages.
662  string next_page_token = 2;
663}
664