Use the API - Recommendations

This page explains how to view and managerecommendations inRecommender by usinggcloud commandsor theREST API.

A typical recommendation interaction with the Recommender API is:

  1. List the recommendations for aspecific project.

  2. Mark a recommendation that you intend toapply asclaimed, or mark a recommendation that you don't intend to applyasdismissed.

  3. Apply the recommendation. You can do this automaticallyusing Active Assistin the Google Cloud console, or manually using the Google Cloud CLI commands,REST API calls, or other tools.

    When you manually apply the recommendation, the commands or calls that youuse are specific to the resource type. For example, to change the size of aVM instance in response to a recommendation from the VM instance sizingrecommender, you use Compute Enginegcloud commands or calls tothe Compute EngineREST API.

    When you perform these operations, you identify the target resource by usingthe value of theresource field in theOperationsGroup array in thereturnedRecommendationentity. This field is in the following format:

    //API_NAME/RESOURCE_PATH

    For example:

    //compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/instance-1
  4. Mark the recommendation assucceeded orfailed.

Note that only recommendations retrieved through the API can be interacted withusing the API orBigQuery Export.

For information about changing the state of recommendations in theGoogle Cloud console, refer to the documentation forActive Assistor for the appropriaterecommender.

Warning:

Before applying recommendations in the Google Cloud console orusing the API, ensure that impacts are assessed by a reviewer within your organization.The reviewer should have the knowledge to assess impacts identified inrecommendations, as well as impacts specific to your infrastructure andbusiness. Applying recommendations without proper assessment could result inunexpected changes, such as issues with system performance, poor reliability, orloss of required permissions. If you choose to apply recommendations withouthuman review, ensure that you have set up a rollback process before making anychanges.

Set the default project

Set the default project if you haven't done so already:

gcloud config set projectPROJECT_ID

wherePROJECT_ID is the ID of your project.

Set environment variables

Set environment variables for Recommender interactions:

PROJECT=TARGET_PROJECT_IDLOCATION=LOCATION_IDRECOMMENDER=RECOMMENDER_ID

where:

SeeRecommenders for a table of links toinformation about each recommender, including supported locations andrecommender IDs.

Set permissions

You must have permissions to access recommendations in the target project.

  • For requesters who include abilling project in their request. The projectused in the request must be in good standing, and the user must have a role inthe project that contains theserviceusage.services.use permission. TheService Usage Consumer role contains the required permission.
  • Each recommender requires specific permissions. SeeRecommenders for a table of links toinformation about each recommender, including the required permissions.
Note: If you use thex-goog-user-project header oruserProject query string parameterin your request, you must have theserviceusage.services.use permission forthe project ID that you specify, in addition to the normal IAMpermissions required to make the request.

List recommendations

As shown in thegcloud Beta tab, you can list all of your project'srecommendations without having to specify a location and recommender. Thisfeature is in Preview.

The GA feature requires that you specify aproject, location, and recommender. For details, see thegcloud tab.

gcloud Beta

Preview

This feature is subject to the "Pre-GA Offerings Terms" in the General Service Terms section of theService Specific Terms. Pre-GA features are available "as is" and might have limited support. For more information, see thelaunch stage descriptions.

Enter the following:

gcloud beta recommender recommendations list \    --project=${PROJECT} \    --format=FORMAT

whereFORMAT is a supportedgcloudoutput format, such asjson.

For example:

gcloud beta recommender recommendations list \    --project=example-project \    --format=json
Note: Unlike the following output for thegcloud andRESTtabs, which is limited to recommendations for a location and recommender,the output will include all recommendations for the project.

gcloud

Enter the following:

gcloud recommender recommendations list \    --project=${PROJECT} \    --location=${LOCATION} \    --recommender=${RECOMMENDER} \    --format=FORMAT

whereFORMAT is a supportedgcloudoutput format (for example,json).

For example:

gcloud recommender recommendations list \    --project=example-project \    --location=us-central1-a \    --recommender=google.compute.instance.MachineTypeRecommender \    --format=json

REST

Enter the following:

curl \    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \    -H "x-goog-user-project: ${PROJECT}" \    "https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations"

For example:

curl \    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \    -H "x-goog-user-project: example-project" \    "https://recommender.googleapis.com/v1/projects/example-project/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations"

This operation outputs the current VM instance sizing recommendationsin the target project as a list ofRecommendationentities in the specified format.

The output is similar to the following:

[  {    "content": {      "operationGroups": [        {          "operations": [            {              "action": "test",              "path": "/machineType",              "resource": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/instance-1",              "resourceType": "compute.googleapis.com/Instance",              "valueMatcher": {                "matchesPattern": ".*zones/us-central1-a/machineTypes/n1-standard-4"              }            },            {              "action": "replace",              "path": "/machineType",              "resource": "//compute.googleapis.com/projects/example-project/zones/us-central1-a/instances/instance-1",              "resourceType": "compute.googleapis.com/Instance",              "value": "zones/us-central1-a/machineTypes/custom-2-5120"            }          ]        }      ]    },    "description": "Save cost by changing machine type from n1-standard-4 to custom-2-5120.",    "etag": "\"280b34810bba8a1a\"",    "lastRefreshTime": "2019-06-28T06:49:21Z",    "name": "projects/32428390823/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/a523ff7e-ed03-4143-a3a5-5b396b99cba9",    "primaryImpact": { ... },    "stateInfo": {      "state": "ACTIVE"    },    "recommenderSubtype": "CHANGE_MACHINE_TYPE"  }]

Note that the returned recommendations include the following fields:

  • Aname field in the following format:

    projects/PROJECT_ID/locations/LOCATION/recommenders/RECOMMENDER_ID/recommendations/RECOMMENDATION_ID

    whereRECOMMENDATION_ID uniquely identifies the recommendation

  • Anetag field that is associated with the current recommendation state.

When you reference a recommendation using subsequentGoogle Cloud CLI commands orREST API calls, you reference both the recommendation ID and etag, which makessure that any operations are performed only if the recommendation has notbeen modified since you last retrieved it.

Change the state of a recommendation

You can mark a recommendation as claimed to indicate that you intend to applythe recommended changes to the associated resource. When a recommendation isclaimed, your username is assigned as the actor for the recommendation, andRecommender does not update the recommendation with newer content.

You can mark a recommendation as dismissed to indicate that you don't intend toapply the recommended changes to the associated resource or that you don't wantto continue to see the recommendation. When a recommendation is dismissed, itwill no longer appear as an ACTIVE recommendation. Recommender mightcontinue to update the recommendation with newer content.

After you have applied a recommendation, you can mark it as succeeded or failed.

To change the state of a recommendation, complete the following steps:

gcloud

Enter the following:

gcloud recommender recommendationsSTATE_CHANGE \RECOMMENDATION_ID \    --project=${PROJECT} \    --location=${LOCATION} \    --recommender=${RECOMMENDER} \    --etag=ETAG \    --state-metadata=STATE_METADATA \    --format=FORMAT

Where

  • STATE_CHANGE is the change you want to make to a recommendation.Valid values are:
    • mark-claimed to mark the recommendation as claimed.
    • mark-dismissed to mark the recommendation as dismissed.
    • mark-succeeded to mark the recommendation as succeeded.
    • mark-failed to mark the recommendation as failed.
  • RECOMMENDATION_ID is the ID of a recommendation that youretrieved from a previous call to list recommendations.
  • ETAG is the returned etag representing the recommendation state
  • STATE_METADATA is optional metadata about the operation.Specify the metadata as a comma-separated list ofKEY=VALUE pairs. Thisoption is available when you mark a recommendation asclaimed, succeeded, or failed.

For example:

gcloud recommender recommendations mark-succeeded \    a523ff7e-ed03-4143-a3a5-5b396b99cba9 \    --project=example-project \    --location=us-central1-a \    --recommender=google.compute.instance.MachineTypeRecommender \    --etag='"5e3a63cccf1e0964"' \    --state-metadata=priority=high,tracking_number=12345 \    --format=json

REST

Enter the following

curl -X POST \    -H "Content-Type: application/json" \    -H "Authorization: Bearer $(gcloud auth print-access-token)" \    -H "x-goog-user-project: ${PROJECT}" \    --data-binary @- \    https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations/RECOMMENDATION_ID:STATE_CHANGE \<< EOM{  "etag": "ETAG"  "stateMetadata":STATE_METADATA}EOM

where:

  • RECOMMENDATION_ID is the ID of a recommendation that youretrieved from a previous call to list recommendations.
  • STATE_CHANGE is the change you want to make to a recommendation.Valid values are:
    • markClaimed to mark the recommendation as claimed.
    • markDismissed to mark the recommendation as dismissed.
    • markSucceeded to mark the recommendation as succeeded.
    • markFailed to mark the recommendation as failed.
  • ETAG is the returned etag representing the recommendation state
  • STATE_METADATA is an optional field with additional metadataabout the operation. Specify the metadata askey:value pairs. Thisfield is available when you mark a recommendation asclaimed, succeeded, or failed.

For example:

curl -X POST \    -H "Content-Type: application/json" \    -H "Authorization: Bearer $(gcloud auth print-access-token)" \    -H "x-goog-user-project: example-project" \    --data-binary @- \    https://recommender.googleapis.com/v1/projects/example-project/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/8f20d509-83d2-45d2-8152-1b8d5d7d5831:markSucceeded \<< EOM{  "etag": "\"280b34810bba8a1a\""  "stateMetadata": {    "priority" : "high",    "tracking_number": "12345"  }}EOM

This operation returns theRecommendationentity in the specified format after the operation has taken place.

The output is similar to the following:

{  "content": {    "operationGroups": [ ... ]  },  "description": "Save cost by changing machine type from n1-standard-4 to custom-2-5120.",  "etag": "\"5e3a63cccf1e053c\"",  "lastRefreshTime": "2019-06-28T06:49:21Z",  "name": "projects/32428390823/locations/us-central1-a/recommenders/google.compute.instance.MachineTypeRecommender/recommendations/a523ff7e-ed03-4143-a3a5-5b396b99cba9",  "primaryImpact": { ... },  "stateInfo": {    "state": "SUCCEEDED",    "stateMetadata": {      "priority" : "high",      "tracking_number": "12345"    }  }}

Note that the value of thestate field has changed toSUCCEEDED.

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-02-19 UTC.