{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/google-cloud-recommendations-ai/json-schema/google-cloud-recommendations-ai-google-cloud-recommender-v1-list-recommendations-response-schema.json",
  "title": "GoogleCloudRecommenderV1ListRecommendationsResponse",
  "description": "Response to the `ListRecommendations` method.",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/google-cloud-recommendations-ai-recommender-folders-api-openapi.yml#/components/schemas/GoogleCloudRecommenderV1ListRecommendationsResponse",
  "type": "object",
  "properties": {
    "recommendations": {
      "description": "The set of recommendations for the `parent` resource.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/GoogleCloudRecommenderV1Recommendation"
      }
    },
    "nextPageToken": {
      "description": "A token that can be used to request the next page of results. This field is empty if there are no additional results.",
      "type": "string"
    }
  },
  "$defs": {
    "GoogleCloudRecommenderV1CostProjection": {
      "description": "Contains metadata about how much money a recommendation can save or incur.",
      "type": "object",
      "properties": {
        "cost": {
          "$ref": "#/$defs/GoogleTypeMoney",
          "description": "An approximate projection on amount saved or amount incurred. Negative cost units indicate cost savings and positive cost units indicate increase. See google.type.Money documentation for positive/negative units. A user's permissions may affect whether the cost is computed using list prices or custom contract prices."
        },
        "duration": {
          "description": "Duration for which this cost applies.",
          "format": "google-duration",
          "type": "string"
        },
        "costInLocalCurrency": {
          "$ref": "#/$defs/GoogleTypeMoney",
          "description": "The approximate cost savings in the billing account's local currency."
        }
      }
    },
    "GoogleCloudRecommenderV1Impact": {
      "type": "object",
      "description": "Contains the impact a recommendation can have for a given category.",
      "properties": {
        "service": {
          "type": "string",
          "description": "The service that this impact is associated with."
        },
        "category": {
          "type": "string",
          "description": "Category that is being targeted.",
          "enum": [
            "CATEGORY_UNSPECIFIED",
            "COST",
            "SECURITY",
            "PERFORMANCE",
            "MANAGEABILITY",
            "SUSTAINABILITY",
            "RELIABILITY"
          ]
        },
        "securityProjection": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1SecurityProjection",
          "description": "Use with CategoryType.SECURITY"
        },
        "sustainabilityProjection": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1SustainabilityProjection",
          "description": "Use with CategoryType.SUSTAINABILITY"
        },
        "reliabilityProjection": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1ReliabilityProjection",
          "description": "Use with CategoryType.RELIABILITY"
        },
        "costProjection": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1CostProjection",
          "description": "Use with CategoryType.COST"
        }
      }
    },
    "GoogleCloudRecommenderV1Operation": {
      "type": "object",
      "properties": {
        "valueMatcher": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1ValueMatcher",
          "description": "Can be set for action 'test' for advanced matching for the value of 'path' field. Either this or `value` will be set for 'test' operation."
        },
        "action": {
          "type": "string",
          "description": "Type of this operation. Contains one of 'add', 'remove', 'replace', 'move', 'copy', 'test' and custom operations. This field is case-insensitive and always populated."
        },
        "value": {
          "description": "Value for the `path` field. Will be set for actions:'add'/'replace'. Maybe set for action: 'test'. Either this or `value_matcher` will be set for 'test' operation. An exact match must be performed."
        },
        "resourceType": {
          "description": "Type of GCP resource being modified/tested. This field is always populated. Example: cloudresourcemanager.googleapis.com/Project, compute.googleapis.com/Instance",
          "type": "string"
        },
        "pathFilters": {
          "description": "Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: ``` { \"/versions/*/name\" : \"it-123\" \"/versions/*/targetSize/percent\": 20 } ``` * Example: ``` { \"/bindings/*/role\": \"roles/owner\" \"/bindings/*/condition\" : null } ``` * Example: ``` { \"/bindings/*/role\": \"roles/owner\" \"/bindings/*/members/*\" : [\"x@example.com\", \"y@example.com\"] } ``` When both path_filters and path_value_matchers are set, an implicit AND must be performed.",
          "additionalProperties": {},
          "type": "object"
        },
        "sourcePath": {
          "type": "string",
          "description": "Can be set with action 'copy' or 'move' to indicate the source field within resource or source_resource, ignored if provided for other operation types."
        },
        "sourceResource": {
          "description": "Can be set with action 'copy' to copy resource configuration across different resources of the same type. Example: A resource clone can be done via action = 'copy', path = \"/\", from = \"/\", source_resource = and resource_name = . This field is empty for all other values of `action`.",
          "type": "string"
        },
        "path": {
          "description": "Path to the target field being operated on. If the operation is at the resource level, then path should be \"/\". This field is always populated.",
          "type": "string"
        },
        "resource": {
          "description": "Contains the fully qualified resource name. This field is always populated. ex: //cloudresourcemanager.googleapis.com/projects/foo.",
          "type": "string"
        },
        "pathValueMatchers": {
          "additionalProperties": {
            "$ref": "#/$defs/GoogleCloudRecommenderV1ValueMatcher"
          },
          "description": "Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.",
          "type": "object"
        }
      },
      "description": "Contains an operation for a resource loosely based on the JSON-PATCH format with support for: * Custom filters for describing partial array patch. * Extended path values for describing nested arrays. * Custom fields for describing the resource for which the operation is being described. * Allows extension to custom operations not natively supported by RFC6902. See https://tools.ietf.org/html/rfc6902 for details on the original RFC."
    },
    "GoogleCloudRecommenderV1OperationGroup": {
      "description": "Group of operations that need to be performed atomically.",
      "type": "object",
      "properties": {
        "operations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/GoogleCloudRecommenderV1Operation"
          },
          "description": "List of operations across one or more resources that belong to this group. Loosely based on RFC6902 and should be performed in the order they appear."
        }
      }
    },
    "GoogleCloudRecommenderV1Recommendation": {
      "properties": {
        "targetResources": {
          "description": "Fully qualified resource names that this recommendation is targeting.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "additionalImpact": {
          "type": "array",
          "description": "Optional set of additional impact that this recommendation may have when trying to optimize for the primary category. These may be positive or negative.",
          "items": {
            "$ref": "#/$defs/GoogleCloudRecommenderV1Impact"
          }
        },
        "primaryImpact": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1Impact",
          "description": "The primary impact that this recommendation can have while trying to optimize for one category."
        },
        "description": {
          "type": "string",
          "description": "Free-form human readable summary in English. The maximum length is 500 characters."
        },
        "name": {
          "type": "string",
          "description": "Identifier. Name of recommendation."
        },
        "priority": {
          "description": "Recommendation's priority.",
          "enum": [
            "PRIORITY_UNSPECIFIED",
            "P4",
            "P3",
            "P2",
            "P1"
          ],
          "type": "string"
        },
        "xorGroupId": {
          "type": "string",
          "description": "Corresponds to a mutually exclusive group ID within a recommender. A non-empty ID indicates that the recommendation belongs to a mutually exclusive group. This means that only one recommendation within the group is suggested to be applied."
        },
        "lastRefreshTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Last time this recommendation was refreshed by the system that created it in the first place."
        },
        "etag": {
          "type": "string",
          "description": "Fingerprint of the Recommendation. Provides optimistic locking when updating states."
        },
        "content": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1RecommendationContent",
          "description": "Content of the recommendation describing recommended changes to resources."
        },
        "recommenderSubtype": {
          "description": "Contains an identifier for a subtype of recommendations produced for the same recommender. Subtype is a function of content and impact, meaning a new subtype might be added when significant changes to `content` or `primary_impact.category` are introduced. See the Recommenders section to see a list of subtypes for a given Recommender. Examples: For recommender = \"google.iam.policy.Recommender\", recommender_subtype can be one of \"REMOVE_ROLE\"/\"REPLACE_ROLE\"",
          "type": "string"
        },
        "stateInfo": {
          "$ref": "#/$defs/GoogleCloudRecommenderV1RecommendationStateInfo",
          "description": "Information for state. Contains state and metadata."
        },
        "associatedInsights": {
          "items": {
            "$ref": "#/$defs/GoogleCloudRecommenderV1RecommendationInsightReference"
          },
          "type": "array",
          "description": "Insights that led to this recommendation."
        }
      },
      "type": "object",
      "description": "A recommendation along with a suggested action. E.g., a rightsizing recommendation for an underutilized VM, IAM role recommendations, etc"
    },
    "GoogleCloudRecommenderV1RecommendationContent": {
      "properties": {
        "operationGroups": {
          "description": "Operations to one or more Google Cloud resources grouped in such a way that, all operations within one group are expected to be performed atomically and in an order.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/GoogleCloudRecommenderV1OperationGroup"
          }
        },
        "overview": {
          "description": "Condensed overview information about the recommendation.",
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object."
          }
        }
      },
      "description": "Contains what resources are changing and how they are changing.",
      "type": "object"
    },
    "GoogleCloudRecommenderV1RecommendationInsightReference": {
      "description": "Reference to an associated insight.",
      "type": "object",
      "properties": {
        "insight": {
          "description": "Insight resource name, e.g. projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID]",
          "type": "string"
        }
      }
    },
    "GoogleCloudRecommenderV1RecommendationStateInfo": {
      "description": "Information for state. Contains state and metadata.",
      "type": "object",
      "properties": {
        "state": {
          "enum": [
            "STATE_UNSPECIFIED",
            "ACTIVE",
            "CLAIMED",
            "SUCCEEDED",
            "FAILED",
            "DISMISSED"
          ],
          "description": "The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED.",
          "type": "string"
        },
        "stateMetadata": {
          "type": "object",
          "description": "A map of metadata for the state, provided by user or automations systems.",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "GoogleCloudRecommenderV1ReliabilityProjection": {
      "type": "object",
      "description": "Contains information on the impact of a reliability recommendation.",
      "properties": {
        "details": {
          "description": "Per-recommender projection.",
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object."
          }
        },
        "risks": {
          "items": {
            "enum": [
              "RISK_TYPE_UNSPECIFIED",
              "SERVICE_DISRUPTION",
              "DATA_LOSS",
              "ACCESS_DENY"
            ],
            "type": "string"
          },
          "type": "array",
          "description": "Reliability risks mitigated by this recommendation."
        }
      }
    },
    "GoogleCloudRecommenderV1SecurityProjection": {
      "type": "object",
      "description": "Contains various ways of describing the impact on Security.",
      "properties": {
        "details": {
          "description": "Additional security impact details that is provided by the recommender.",
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object."
          }
        }
      }
    },
    "GoogleCloudRecommenderV1SustainabilityProjection": {
      "properties": {
        "kgCO2e": {
          "type": "number",
          "format": "double",
          "description": "Carbon Footprint generated in kg of CO2 equivalent. Chose kg_c_o2e so that the name renders correctly in camelCase (kgCO2e)."
        },
        "duration": {
          "description": "Duration for which this sustainability applies.",
          "format": "google-duration",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Contains metadata about how much sustainability a recommendation can save or incur."
    },
    "GoogleCloudRecommenderV1ValueMatcher": {
      "type": "object",
      "properties": {
        "matchesPattern": {
          "description": "To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch",
          "type": "string"
        }
      },
      "description": "Contains various matching options for values for a GCP resource field."
    },
    "GoogleTypeMoney": {
      "properties": {
        "units": {
          "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
          "format": "int64",
          "type": "string"
        },
        "nanos": {
          "format": "int32",
          "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
          "type": "integer"
        },
        "currencyCode": {
          "description": "The three-letter currency code defined in ISO 4217.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Represents an amount of money with its currency type."
    }
  }
}