{
  "revision": "20260914",
  "batchPath": "batch",
  "title": "App Lifecycle Manager API",
  "version_module": true,
  "protocol": "rest",
  "ownerDomain": "google.com",
  "servicePath": "",
  "baseUrl": "https://saasservicemgmt.googleapis.com/",
  "name": "saasservicemgmt",
  "fullyEncodeReservedExpansion": true,
  "mtlsRootUrl": "https://saasservicemgmt.mtls.googleapis.com/",
  "canonicalName": "SaaS Service Management",
  "version": "v1beta1",
  "schemas": {
    "GoogleCloudLocationLocation": {
      "description": "A resource that represents a Google Cloud location.",
      "properties": {
        "locationId": {
          "type": "string",
          "description": "The canonical id for this location. For example: `\"us-east1\"`."
        },
        "metadata": {
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          },
          "type": "object",
          "description": "Service-specific metadata. For example the available capacity at the given location."
        },
        "displayName": {
          "type": "string",
          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\"."
        },
        "labels": {
          "type": "object",
          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
          "additionalProperties": {
            "type": "string"
          }
        },
        "name": {
          "type": "string",
          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`"
        }
      },
      "type": "object",
      "id": "GoogleCloudLocationLocation"
    },
    "ListFlagsResponse": {
      "id": "ListFlagsResponse",
      "description": "The response structure for the ListFlags method.",
      "type": "object",
      "properties": {
        "unreachable": {
          "items": {
            "type": "string"
          },
          "description": "Locations that could not be reached.",
          "type": "array"
        },
        "flags": {
          "items": {
            "$ref": "Flag"
          },
          "description": "The resulting flags.",
          "type": "array"
        },
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListFlags call to list the next page. If empty, there are no more pages.",
          "type": "string"
        }
      }
    },
    "Aggregate": {
      "properties": {
        "count": {
          "format": "int32",
          "type": "integer",
          "description": "Required. Number of records in the group."
        },
        "group": {
          "description": "Required. Group by which to aggregate.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Represents the aggregation of a set of population of like records by a certain group. For example, a collection of unit counts can be aggregated and grouped by their state.",
      "id": "Aggregate"
    },
    "Variant": {
      "id": "Variant",
      "description": "Variant is an identifier for a value (name assigned to a value). DEPRECATED: Use Flag.Variants instead.",
      "type": "object",
      "properties": {
        "intValue": {
          "type": "string",
          "description": "Optional. Integer flag value.",
          "format": "int64"
        },
        "name": {
          "type": "string",
          "description": "Required. Name of the variant. Max length: 128 bytes."
        },
        "stringValue": {
          "type": "string",
          "description": "Optional. String flag value."
        },
        "doubleValue": {
          "format": "double",
          "description": "Optional. Double flag value.",
          "type": "number"
        },
        "boolValue": {
          "type": "boolean",
          "description": "Optional. Boolean flag value."
        }
      }
    },
    "ErrorBudget": {
      "type": "object",
      "id": "ErrorBudget",
      "description": "The configuration for error budget. If the number of failed units exceeds max(allowed_count, allowed_ratio * total_units), the rollout will be paused.",
      "properties": {
        "allowedPercentage": {
          "description": "Optional. The maximum percentage of units allowed to fail (0, 100] within a location without pausing the rollout.",
          "format": "int32",
          "type": "integer"
        },
        "allowedCount": {
          "description": "Optional. The maximum number of failed units allowed in a location without pausing the rollout.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "FlagNameList": {
      "type": "object",
      "id": "FlagNameList",
      "properties": {
        "flags": {
          "description": "Required. Flags to be rolled out.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "Wrapper for a list of flags."
    },
    "ListUnitKindsResponse": {
      "type": "object",
      "properties": {
        "unitKinds": {
          "type": "array",
          "description": "The resulting unit kinds.",
          "items": {
            "$ref": "UnitKind"
          }
        },
        "unreachable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Locations that could not be reached."
        },
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListUnitKinds call to list the next page. If empty, there are no more pages.",
          "type": "string"
        }
      },
      "description": "The response structure for the ListUnitKinds method.",
      "id": "ListUnitKindsResponse"
    },
    "UnitOperation": {
      "type": "object",
      "description": "UnitOperation encapsulates the intent of changing/interacting with the service component represented by the specific Unit. Multiple UnitOperations can be created (requested) and scheduled in the future, however only one will be allowed to execute at a time (that can change in the future for non-mutating operations). UnitOperations allow different actors interacting with the same unit to focus only on the change they have requested. This is a base object that contains the common fields in all unit operations. Next: 22",
      "id": "UnitOperation",
      "properties": {
        "schedule": {
          "$ref": "Schedule",
          "description": "Optional. When to schedule this operation."
        },
        "flagUpdate": {
          "description": "Optional. Flag update operation.",
          "$ref": "FlagUpdate"
        },
        "engineState": {
          "description": "Optional. Output only. The engine state for on-going deployment engine operation(s). This field is opaque for external usage.",
          "type": "string",
          "readOnly": true
        },
        "cancel": {
          "description": "Optional. When true, attempt to cancel the operation. Cancellation may fail if the operation is already executing. (Optional)",
          "type": "boolean"
        },
        "parentUnitOperation": {
          "type": "string",
          "description": "Optional. Reference to parent resource: UnitOperation. If an operation needs to create other operations as part of its workflow, each of the child operations should have this field set to the parent. This can be used for tracing. (Optional)"
        },
        "rollout": {
          "type": "string",
          "description": "Optional. Specifies which rollout created this Unit Operation. This cannot be modified and is used for filtering purposes only. If a dependent unit and unit operation are created as part of another unit operation, they will use the same rolloutId."
        },
        "unit": {
          "description": "Required. Immutable. The Unit a given UnitOperation will act upon.",
          "type": "string"
        },
        "updateTime": {
          "type": "string",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "readOnly": true,
          "format": "google-datetime"
        },
        "state": {
          "type": "string",
          "description": "Optional. Output only. UnitOperationState describes the current state of the unit operation.",
          "enumDescriptions": [
            "Unit operation state is unknown.",
            "Unit operation is accepted but not ready to run.",
            "Unit operation is accepted and scheduled.",
            "Unit operation is running.",
            "Unit operation has completed successfully.",
            "Unit operation has failed.",
            "Unit operation was cancelled."
          ],
          "enum": [
            "UNIT_OPERATION_STATE_UNKNOWN",
            "UNIT_OPERATION_STATE_PENDING",
            "UNIT_OPERATION_STATE_SCHEDULED",
            "UNIT_OPERATION_STATE_RUNNING",
            "UNIT_OPERATION_STATE_SUCCEEDED",
            "UNIT_OPERATION_STATE_FAILED",
            "UNIT_OPERATION_STATE_CANCELLED"
          ],
          "readOnly": true
        },
        "provision": {
          "description": "Optional. Provision operation.",
          "$ref": "Provision"
        },
        "etag": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written."
        },
        "deleteTime": {
          "format": "google-datetime",
          "type": "string",
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was marked for deletion (deletion is an asynchronous operation)."
        },
        "errorCategory": {
          "type": "string",
          "enum": [
            "UNIT_OPERATION_ERROR_CATEGORY_UNSPECIFIED",
            "NOT_APPLICABLE",
            "FATAL",
            "RETRIABLE",
            "IGNORABLE",
            "STANDARD"
          ],
          "enumDescriptions": [
            "Unit operation error category is unspecified",
            "Unit operation error category is not applicable, or it is not an error",
            "Unit operation error category is fatal",
            "Unit operation error category is retriable",
            "Unit operation error category is ignorable",
            "Unit operation error category is standard, counts towards Rollout error budget"
          ],
          "readOnly": true,
          "description": "Optional. Output only. UnitOperationErrorCategory describe the error category."
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "createTime": {
          "description": "Output only. The timestamp when the resource was created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "upgrade": {
          "$ref": "Upgrade",
          "description": "Optional. Upgrade operation."
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object"
        },
        "deprovision": {
          "$ref": "Deprovision",
          "description": "Optional. Deprovision operation."
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitOperations/{unitOperation}\""
        },
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true,
          "type": "string"
        },
        "conditions": {
          "readOnly": true,
          "description": "Optional. Output only. A set of conditions which indicate the various conditions this resource can have.",
          "items": {
            "$ref": "UnitOperationCondition"
          },
          "type": "array"
        }
      }
    },
    "ListUnitsResponse": {
      "type": "object",
      "id": "ListUnitsResponse",
      "description": "The response structure for the ListUnits method.",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListUnits call to list the next page. If empty, there are no more pages."
        },
        "units": {
          "description": "The resulting units.",
          "items": {
            "$ref": "Unit"
          },
          "type": "array"
        },
        "unreachable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Locations that could not be reached."
        }
      }
    },
    "RolloutStats": {
      "id": "RolloutStats",
      "properties": {
        "operationsByState": {
          "readOnly": true,
          "items": {
            "$ref": "Aggregate"
          },
          "description": "Optional. Output only. Unordered list. A breakdown of the progress of operations triggered by the rollout. Provides a count of Operations by their state. This can be used to determine the number of units which have been updated, or are scheduled to be updated. There will be at most one entry per group. Possible values for operation groups are: - \"SCHEDULED\" - \"PENDING\" - \"RUNNING\" - \"SUCCEEDED\" - \"FAILED\" - \"CANCELLED\"",
          "type": "array"
        },
        "estimatedTotalUnitCount": {
          "type": "string",
          "format": "int64",
          "description": "Optional. Output only. Estimated number of units based. The estimation is computed upon creation of the rollout.",
          "readOnly": true
        }
      },
      "description": "RolloutStats contains information about the progress of a rollout.",
      "type": "object"
    },
    "FlagVariant": {
      "properties": {
        "booleanValue": {
          "type": "boolean",
          "description": "Optional. Boolean variant value."
        },
        "description": {
          "description": "Optional. A human-readable description of what this variant does or represents.",
          "type": "string"
        },
        "stringValue": {
          "type": "string",
          "description": "Optional. String variant value."
        },
        "doubleValue": {
          "format": "double",
          "description": "Optional. Double variant value.",
          "type": "number"
        },
        "integerValue": {
          "format": "int64",
          "type": "string",
          "description": "Optional. Integer variant value."
        },
        "trackingId": {
          "type": "string",
          "description": "Optional. trackingId is unique depending on name and value of the variant within the scope of the service. It is typically generated by the server and must not be changed. trackingId is used to uniquely identify and track variants."
        },
        "id": {
          "description": "Required. Variant ID. Max length: 128 bytes.",
          "type": "string"
        }
      },
      "id": "FlagVariant",
      "description": "Variant is an identifier for a value (name assigned to a value).",
      "type": "object"
    },
    "RolloutKind": {
      "description": "An object that describes various settings of Rollout execution. Includes built-in and customizable policies.",
      "type": "object",
      "id": "RolloutKind",
      "properties": {
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true,
          "type": "string"
        },
        "unitUpdatePacing": {
          "description": "Optional. Settings for controlling the pacing of rollouts i.e. the number of units to be rolled out in parallel in a region.",
          "$ref": "UnitUpdatePacing"
        },
        "unitKind": {
          "type": "string",
          "description": "Optional. Immutable. UnitKind that this rollout kind corresponds to. Rollouts stemming from this rollout kind will target the units of this unit kind. In other words, this defines the population of target units to be upgraded by rollouts."
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "type": "object"
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object"
        },
        "createTime": {
          "description": "Output only. The timestamp when the resource was created.",
          "readOnly": true,
          "format": "google-datetime",
          "type": "string"
        },
        "etag": {
          "readOnly": true,
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "type": "string"
        },
        "errorBudget": {
          "$ref": "ErrorBudget",
          "description": "Optional. The configuration for error budget. If the number of failed units exceeds max(allowed_count, allowed_ratio * total_units), the rollout will be paused. If not set, all units will be attempted to be updated regardless of the number of failures encountered."
        },
        "updateTime": {
          "readOnly": true,
          "type": "string",
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value."
        },
        "unitFilter": {
          "description": "Optional. CEL(https://github.com/google/cel-spec) formatted filter string against Unit. The filter will be applied to determine the eligible unit population. This filter can only reduce, but not expand the scope of the rollout.",
          "type": "string"
        },
        "rolloutOrchestrationStrategy": {
          "description": "Optional. The strategy used for executing a Rollout. This is a required field. There are two supported values strategies which are used to control - \"Google.Cloud.Simple.AllAtOnce\" - \"Google.Cloud.Simple.OneLocationAtATime\" A rollout with one of these simple strategies will rollout across all locations defined in the associated UnitKind's Saas Locations.",
          "type": "string"
        },
        "updateUnitKindStrategy": {
          "type": "string",
          "enum": [
            "UPDATE_UNIT_KIND_STRATEGY_UNSPECIFIED",
            "UPDATE_UNIT_KIND_STRATEGY_ON_START",
            "UPDATE_UNIT_KIND_STRATEGY_NEVER"
          ],
          "description": "Optional. The config for updating the unit kind. By default, the unit kind will be updated on the rollout start.",
          "enumDescriptions": [
            "Strategy unspecified.",
            "Update the unit kind strategy on the rollout start.",
            "Never update the unit kind."
          ]
        },
        "name": {
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/rolloutKinds/{rollout_kind_id}\"",
          "type": "string"
        }
      }
    },
    "FlagSetList": {
      "id": "FlagSetList",
      "type": "object",
      "properties": {
        "sets": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Required. Flag sets to be rolled out."
        }
      },
      "description": "Wrapper for a list of flag sets."
    },
    "Schedule": {
      "id": "Schedule",
      "description": "A time specification to schedule the maintenance.",
      "type": "object",
      "properties": {
        "startTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Optional. Start of operation. If not set, will be set to the start of the next window. (optional)"
        }
      }
    },
    "VariableMapping": {
      "type": "object",
      "properties": {
        "to": {
          "$ref": "ToMapping",
          "description": "Optional. Input variables whose values will be passed on to dependencies."
        },
        "from": {
          "description": "Optional. Output variables which will get their values from dependencies",
          "$ref": "FromMapping"
        },
        "variable": {
          "description": "Required. name of the variable",
          "type": "string"
        }
      },
      "id": "VariableMapping",
      "description": "Mapping of input variables to their respective output variable for depedenencies"
    },
    "AllocationSlot": {
      "type": "object",
      "properties": {
        "variant": {
          "description": "Required. Variant of the allocation slot.",
          "type": "string"
        },
        "weight": {
          "format": "int32",
          "type": "integer",
          "description": "Required. Weight defines the proportion of traffic to allocate to the variant, relative to other slots in the same allocation."
        }
      },
      "description": "AllocationSlot specifies a variant and the proportion of traffic allocated to it.",
      "id": "AllocationSlot"
    },
    "ListTenantsResponse": {
      "description": "The response structure for the ListTenants method.",
      "id": "ListTenantsResponse",
      "properties": {
        "tenants": {
          "type": "array",
          "items": {
            "$ref": "Tenant"
          },
          "description": "The resulting tenants."
        },
        "unreachable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Locations that could not be reached."
        },
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListTenants call to list the next page. If empty, there are no more pages."
        }
      },
      "type": "object"
    },
    "MaintenanceSettings": {
      "description": "Captures requested directives for performing future maintenance on the unit. This includes a request for the unit to skip maintenance for a period of time and remain pinned to its current release as well as controls for postponing maintenance scheduled in future.",
      "properties": {
        "pinnedUntilTime": {
          "format": "google-datetime",
          "description": "Optional. If present, it fixes the release on the unit until the given time; i.e. changes to the release field will be rejected. Rollouts should and will also respect this by not requesting an upgrade in the first place.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "MaintenanceSettings"
    },
    "ListFlagReleasesResponse": {
      "type": "object",
      "description": "The response structure for the ListFlagReleases method.",
      "properties": {
        "flagReleases": {
          "type": "array",
          "description": "The resulting flag releases.",
          "items": {
            "$ref": "FlagRelease"
          }
        },
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListFlagReleases call to list the next page. If empty, there are no more pages."
        },
        "unreachable": {
          "description": "Locations that could not be reached.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "ListFlagReleasesResponse"
    },
    "Tenant": {
      "type": "object",
      "properties": {
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "type": "object"
        },
        "consumerResource": {
          "description": "Optional. Immutable. A reference to the consumer resource this SaaS Tenant is representing. The relationship with a consumer resource can be used by App Lifecycle Manager for retrieving consumer-defined settings and policies such as maintenance policies (using Unified Maintenance Policy API).",
          "type": "string"
        },
        "updateTime": {
          "type": "string",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "format": "google-datetime",
          "readOnly": true
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/tenants/{tenant}\""
        },
        "saas": {
          "type": "string",
          "description": "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with App Lifecycle Manager. Part of the App Lifecycle Manager common data model."
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations"
        },
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true,
          "type": "string"
        },
        "etag": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written."
        },
        "createTime": {
          "readOnly": true,
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was created.",
          "type": "string"
        }
      },
      "id": "Tenant",
      "description": "Tenant represents the service producer side of an instance of the service created based on a request from a consumer. In a typical scenario a Tenant has a one-to-one mapping with a resource given out to a service consumer. Example: tenant: name: \"projects/svc1/locations/loc/tenants/inst-068afff8\" consumer_resource: \"projects/gshoe/locations/loc/shoes/black-shoe\""
    },
    "Upgrade": {
      "type": "object",
      "id": "Upgrade",
      "description": "Upgrade is the unit operation that upgrades a provisioned unit, which may also include the underlying resources represented by a Unit. Can only execute if the Unit is currently provisioned.",
      "properties": {
        "inputVariables": {
          "items": {
            "$ref": "UnitVariable"
          },
          "description": "Optional. Set of input variables. Maximum 100. (optional)",
          "type": "array"
        },
        "release": {
          "description": "Optional. Reference to the Release object to use for the Unit. (optional).",
          "type": "string"
        }
      }
    },
    "Decimal": {
      "properties": {
        "value": {
          "description": "The decimal value, as a string. The string representation consists of an optional sign, `+` (`U+002B`) or `-` (`U+002D`), followed by a sequence of zero or more decimal digits (\"the integer\"), optionally followed by a fraction, optionally followed by an exponent. An empty string **should** be interpreted as `0`. The fraction consists of a decimal point followed by zero or more decimal digits. The string must contain at least one digit in either the integer or the fraction. The number formed by the sign, the integer and the fraction is referred to as the significand. The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`) followed by one or more decimal digits. Services **should** normalize decimal values before storing them by: - Removing an explicitly-provided `+` sign (`+2.5` -\u003e `2.5`). - Replacing a zero-length integer value with `0` (`.5` -\u003e `0.5`). - Coercing the exponent character to upper-case, with explicit sign (`2.5e8` -\u003e `2.5E+8`). - Removing an explicitly-provided zero exponent (`2.5E0` -\u003e `2.5`). Services **may** perform additional normalization based on its own needs and the internal decimal implementation selected, such as shifting the decimal point and exponent value together (example: `2.5E-1` \u003c-\u003e `0.25`). Additionally, services **may** preserve trailing zeroes in the fraction to indicate increased precision, but are not required to do so. Note that only the `.` character is supported to divide the integer and the fraction; `,` **should not** be supported regardless of locale. Additionally, thousand separators **should not** be supported. If a service does support them, values **must** be normalized. The ENBF grammar is: DecimalString = '' | [Sign] Significand [Exponent]; Sign = '+' | '-'; Significand = Digits '.' | [Digits] '.' Digits; Exponent = ('e' | 'E') [Sign] Digits; Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' }; Services **should** clearly document the range of supported values, the maximum supported precision (total number of digits), and, if applicable, the scale (number of digits after the decimal point), as well as how it behaves when receiving out-of-bounds values. Services **may** choose to accept values passed as input even when the value has a higher precision or scale than the service supports, and **should** round the value to fit the supported scale. Alternatively, the service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC) if precision would be lost. Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC) if the service receives a value outside of the supported range.",
          "type": "string"
        }
      },
      "id": "Decimal",
      "type": "object",
      "description": "A representation of a decimal value, such as 2.5. Clients may convert values into language-native decimal formats, such as Java's [BigDecimal](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html) or Python's [decimal.Decimal](https://docs.python.org/3/library/decimal.html)."
    },
    "UnitCondition": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "description": "Required. Human readable message indicating details about the last transition."
        },
        "reason": {
          "description": "Required. Brief reason for the condition's last transition.",
          "type": "string"
        },
        "lastTransitionTime": {
          "type": "string",
          "description": "Required. Last time the condition transited from one status to another.",
          "format": "google-datetime"
        },
        "status": {
          "description": "Required. Status of the condition.",
          "enumDescriptions": [
            "Condition status is unspecified.",
            "Condition is unknown.",
            "Condition is true.",
            "Condition is false."
          ],
          "type": "string",
          "enum": [
            "STATUS_UNSPECIFIED",
            "STATUS_UNKNOWN",
            "STATUS_TRUE",
            "STATUS_FALSE"
          ]
        },
        "type": {
          "type": "string",
          "enum": [
            "TYPE_UNSPECIFIED",
            "TYPE_READY",
            "TYPE_UPDATING",
            "TYPE_PROVISIONED",
            "TYPE_OPERATION_ERROR",
            "TYPE_FLAGS_CONFIG_INITIALIZED",
            "TYPE_APP_CREATED_OR_ALREADY_EXISTS",
            "TYPE_APP_COMPONENTS_REGISTERED"
          ],
          "description": "Required. Type of the condition.",
          "enumDescriptions": [
            "Condition type is unspecified.",
            "Condition type is ready.",
            "Condition type is updating.",
            "Condition type is provisioned.",
            "Condition type is operationError. True when the last unit operation fails with a non-ignorable error.",
            "Condition type is flagsConfigInitialized. True when the flags configuration is synchronized and ready to be served.",
            "Indicates if AppHub app has been created or if Apphub app has already existed.",
            "Indicates if services and workloads have been registered with AppHub."
          ]
        }
      },
      "id": "UnitCondition",
      "description": "UnitCondition describes the status of an Unit. UnitCondition is individual components that contribute to an overall state."
    },
    "EvaluationRule": {
      "id": "EvaluationRule",
      "type": "object",
      "description": "EvaluationRule defines a single rule for evaluating a feature flag. A rule consists of a condition that, if met, assigns a specific variant or allocation to the user.",
      "properties": {
        "allocationId": {
          "type": "string",
          "description": "Optional. The ID of an allocation to target."
        },
        "target": {
          "deprecated": true,
          "type": "string",
          "description": "Optional. Deprecated: Use `rule_target` instead. The target variant or allocation to apply if the condition is met. This should match the name of a defined variant or allocation's ID."
        },
        "id": {
          "description": "Required. Evaluation rule ID. Max length: 128 bytes.",
          "type": "string"
        },
        "condition": {
          "description": "Required. A Common Expression Language (CEL) expression that evaluates to a boolean. The expression is evaluated against the provided context. If it returns true, the rule's target is applied.",
          "type": "string"
        },
        "variantId": {
          "description": "Optional. The name of a variant to target.",
          "type": "string"
        }
      }
    },
    "Saas": {
      "properties": {
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "updateTime": {
          "format": "google-datetime",
          "type": "string",
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value."
        },
        "state": {
          "description": "Output only. State of the Saas. It is always in STATE_ACTIVE state if the application_template is empty.",
          "readOnly": true,
          "type": "string",
          "enumDeprecated": [
            false,
            true,
            false,
            false,
            false
          ],
          "enumDescriptions": [
            "State is unspecified.",
            "State type is unspecified. Deprecated: Use STATE_UNSPECIFIED instead.",
            "The Saas is ready",
            "In the process of importing, synchronizing or replicating ApplicationTemplates",
            "Failure during process of importing, synchronizing or replicating ApplicationTemplate processing"
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "STATE_TYPE_UNSPECIFIED",
            "STATE_ACTIVE",
            "STATE_RUNNING",
            "STATE_FAILED"
          ]
        },
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true,
          "type": "string"
        },
        "error": {
          "$ref": "Status",
          "readOnly": true,
          "description": "Output only. If the state is FAILED, the corresponding error code and message. Defaults to code=OK for all other states."
        },
        "locations": {
          "items": {
            "$ref": "Location"
          },
          "description": "Optional. List of locations that the service is available in. Rollout refers to the list to generate a rollout plan.",
          "type": "array"
        },
        "annotations": {
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        "etag": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written."
        },
        "conditions": {
          "type": "array",
          "description": "Output only. A set of conditions which indicate the various conditions this resource can have.",
          "readOnly": true,
          "items": {
            "$ref": "SaasCondition"
          }
        },
        "blueprintRepo": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Name of repository in Artifact Registry for system-generated Blueprints, eg. Blueprints of imported ApplicationTemplates."
        },
        "applicationTemplate": {
          "$ref": "CompositeRef",
          "description": "Reference to composite ApplicationTemplate. When specified, the template components will be imported into their equivalent UnitKind, Release and Blueprint resources. Deleted references will not delete imported resources. Should only be specified on source regions, and be unspecified on replica regions."
        },
        "createTime": {
          "type": "string",
          "readOnly": true,
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was created."
        },
        "name": {
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/saas/{saas}\"",
          "type": "string"
        }
      },
      "id": "Saas",
      "description": "Saas is a representation of a SaaS service managed by the Producer.",
      "type": "object"
    },
    "Unit": {
      "type": "object",
      "id": "Unit",
      "properties": {
        "ongoingOperations": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "readOnly": true,
          "description": "Optional. Output only. List of concurrent UnitOperations that are operating on this Unit."
        },
        "uid": {
          "type": "string",
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true
        },
        "updateTime": {
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "format": "google-datetime",
          "type": "string"
        },
        "application": {
          "description": "Optional. Reference to the AppHub Application this unit belongs to. All resources deployed in this Unit will be associated with the specified Application.",
          "type": "string"
        },
        "scheduledOperations": {
          "description": "Optional. Output only. List of scheduled UnitOperations for this unit.",
          "readOnly": true,
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "satisfiesPzs": {
          "readOnly": true,
          "type": "boolean",
          "description": "Output only. Indicates whether the resource location satisfies Zone Separation constraints. This is false by default."
        },
        "state": {
          "enumDescriptions": [
            "Unspecified state.",
            "Unit is not provisioned.",
            "Unit is being provisioned.",
            "Unit is being updated. This is typically when a unit is being upgraded to a new release or some of the input variables on the Unit is being changed. Certain kinds of updates may cause the Unit to become unusable while the update is in progress.",
            "Unit is being deleted.",
            "Unit has been provisioned and is ready for use",
            "Unit has error, when it is not ready and some error operation"
          ],
          "enum": [
            "UNIT_STATE_UNSPECIFIED",
            "UNIT_STATE_NOT_PROVISIONED",
            "UNIT_STATE_PROVISIONING",
            "UNIT_STATE_UPDATING",
            "UNIT_STATE_DEPROVISIONING",
            "UNIT_STATE_READY",
            "UNIT_STATE_ERROR"
          ],
          "readOnly": true,
          "description": "Optional. Output only. Current lifecycle state of the resource (e.g. if it's being created or ready to use).",
          "type": "string"
        },
        "conditions": {
          "readOnly": true,
          "description": "Optional. Output only. A set of conditions which indicate the various conditions this resource can have.",
          "type": "array",
          "items": {
            "$ref": "UnitCondition"
          }
        },
        "release": {
          "readOnly": true,
          "description": "Optional. Output only. The current Release object for this Unit.",
          "type": "string"
        },
        "unitKind": {
          "description": "Optional. Reference to the UnitKind this Unit belongs to. Immutable once set.",
          "type": "string"
        },
        "outputVariables": {
          "type": "array",
          "description": "Optional. Output only. Set of key/value pairs corresponding to output variables from execution of actuation templates. The variables are declared in actuation configs (e.g in helm chart or terraform) and the values are fetched and returned by the actuation engine upon completion of execution.",
          "readOnly": true,
          "items": {
            "$ref": "UnitVariable"
          }
        },
        "maintenance": {
          "$ref": "MaintenanceSettings",
          "description": "Optional. Captures requested directives for performing future maintenance on the unit. This includes a request for the unit to skip maintenance for a period of time and remain pinned to its current release as well as controls for postponing maintenance scheduled in future."
        },
        "dependencies": {
          "readOnly": true,
          "description": "Optional. Output only. Set of dependencies for this unit. Maximum 10.",
          "items": {
            "$ref": "UnitDependency"
          },
          "type": "array"
        },
        "satisfiesPzi": {
          "description": "Output only. Reserved for future use.",
          "type": "boolean",
          "readOnly": true
        },
        "tenant": {
          "description": "Optional. Reference to the Saas Tenant resource this unit belongs to. This for example informs the maintenance policies to use for scheduling future updates on a unit. (optional and immutable once created)",
          "type": "string"
        },
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations"
        },
        "dependents": {
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "UnitDependency"
          },
          "description": "Optional. Output only. List of Units that depend on this unit. Unit can only be deprovisioned if this list is empty. Maximum 1000."
        },
        "inputVariables": {
          "items": {
            "$ref": "UnitVariable"
          },
          "description": "Optional. Output only. Indicates the current input variables deployed by the unit",
          "type": "array",
          "readOnly": true
        },
        "etag": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written."
        },
        "systemManagedState": {
          "description": "Optional. Output only. Indicates the system managed state of the unit.",
          "enumDescriptions": [
            "Unspecified system managed state.",
            "Unit has dependents attached.",
            "Unit has no dependencies attached, but attachment is allowed.",
            "Unit has no dependencies attached, and attachment is not allowed."
          ],
          "type": "string",
          "readOnly": true,
          "enum": [
            "SYSTEM_MANAGED_STATE_UNSPECIFIED",
            "SYSTEM_MANAGED_STATE_ACTIVE",
            "SYSTEM_MANAGED_STATE_INACTIVE",
            "SYSTEM_MANAGED_STATE_DECOMMISSIONED"
          ]
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "type": "object"
        },
        "unitGroup": {
          "type": "string",
          "readOnly": true,
          "description": "Optional. Output only. Reference to the UnitGroup this unit belongs to."
        },
        "managementMode": {
          "enumDescriptions": [
            "Unspecified management mode.",
            "Unit's lifecycle is managed by the user.",
            "The system will decide when to deprovision and delete the unit. User still can deprovision or delete the unit manually."
          ],
          "type": "string",
          "enum": [
            "MANAGEMENT_MODE_UNSPECIFIED",
            "MANAGEMENT_MODE_USER",
            "MANAGEMENT_MODE_SYSTEM"
          ],
          "description": "Optional. Immutable. Indicates whether the Unit life cycle is controlled by the user or by the system. Immutable once created."
        },
        "flagConfigName": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. This field stores the unique identifier for the flag configuration to be used by this Unit."
        },
        "systemCleanupAt": {
          "type": "string",
          "readOnly": true,
          "description": "Optional. Output only. If set, indicates the time when the system will start removing the unit.",
          "format": "google-datetime"
        },
        "name": {
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/units/{unit}\"",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The timestamp when the resource was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "flagRevisions": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Optional. Output only. Flag revisions used by this Unit.",
          "readOnly": true
        },
        "pendingOperations": {
          "type": "array",
          "readOnly": true,
          "description": "Optional. Output only. List of pending (wait to be executed) UnitOperations for this unit.",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "A unit of deployment that has its lifecycle via a CRUD API using an actuation engine under the hood (e.g. based on Terraform, Helm or a custom implementation provided by a service producer). A building block of a SaaS Tenant."
    },
    "ListRolloutsResponse": {
      "type": "object",
      "description": "The response structure for the ListRollouts method.",
      "id": "ListRolloutsResponse",
      "properties": {
        "rollouts": {
          "description": "The resulting rollouts.",
          "type": "array",
          "items": {
            "$ref": "Rollout"
          }
        },
        "unreachable": {
          "type": "array",
          "description": "Locations that could not be reached.",
          "items": {
            "type": "string"
          }
        },
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListRollouts call to list the next page. If empty, there are no more pages."
        }
      }
    },
    "UnitOperationCondition": {
      "properties": {
        "lastTransitionTime": {
          "type": "string",
          "description": "Required. Last time the condition transited from one status to another.",
          "format": "google-datetime"
        },
        "type": {
          "enumDescriptions": [
            "Condition type is unspecified.",
            "Condition type is scheduled.",
            "Condition type is running.",
            "Condition type is succeeded.",
            "Condition type is cancelled.",
            "Indicates if AppHub app has been created.",
            "Indicates if services and workloads have been registered with AppHub.",
            "Indicates if the UnitOperation's core workload execution completed successfully. The workload is the core execution operation performed for a UnitOperation (e.g., provisioning, updating, or deprovisioning resources) excluding post-operation checks."
          ],
          "type": "string",
          "enum": [
            "TYPE_UNSPECIFIED",
            "TYPE_SCHEDULED",
            "TYPE_RUNNING",
            "TYPE_SUCCEEDED",
            "TYPE_CANCELLED",
            "TYPE_APP_CREATED",
            "TYPE_APP_COMPONENTS_REGISTERED",
            "TYPE_WORKLOAD_SUCCEEDED"
          ],
          "description": "Required. Type of the condition."
        },
        "status": {
          "enumDescriptions": [
            "Condition status is unspecified.",
            "Condition is unknown.",
            "Condition is true.",
            "Condition is false."
          ],
          "type": "string",
          "enum": [
            "STATUS_UNSPECIFIED",
            "STATUS_UNKNOWN",
            "STATUS_TRUE",
            "STATUS_FALSE"
          ],
          "description": "Required. Status of the condition."
        },
        "message": {
          "description": "Required. Human readable message indicating details about the last transition.",
          "type": "string"
        },
        "reason": {
          "description": "Required. Brief reason for the condition's last transition.",
          "type": "string"
        }
      },
      "id": "UnitOperationCondition",
      "type": "object",
      "description": "UnitOperationCondition describes the status of an Unit Operation. UnitOperationCondition is individual components that contribute to an overall state."
    },
    "FlagRelease": {
      "type": "object",
      "properties": {
        "flagSetsRelease": {
          "$ref": "FlagSetList",
          "description": "Optional. Immutable. Specifies the release consisting of a list of flag sets."
        },
        "effectiveFlagRevisions": {
          "readOnly": true,
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Output only. An OUTPUT_ONLY field that contains FlagRevisions to be rolled out. This is the ultimate source of truth of what a Rollout or a UnitOperation carries."
        },
        "labels": {
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "unitKind": {
          "description": "Required. Immutable. The UnitKind this FlagRelease applies to.",
          "type": "string"
        },
        "etag": {
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "readOnly": true
        },
        "obsoleteFlags": {
          "description": "Optional. Immutable. Deprecated: Use the 'state' field in the 'Flag' resource to manage the cleanup of flag lifecycles including removal from UnitKind and Units. Flags to be removed from given UnitKind and all related Units. If Flag is provided here, its FlagRevisions will be removed from UnitKind and Units.",
          "deprecated": true,
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "flagSets": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "deprecated": true,
          "description": "Optional. Immutable. DEPRECATED: Use flag_sets_release instead. Flag sets to be rolled out. Only one of flag_revisions, all_flags, or flag_sets can be set."
        },
        "flagRevisionsRelease": {
          "description": "Optional. Immutable. Specifies the release consisting of a list of flag revisions.",
          "$ref": "FlagRevisionList"
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flagReleases/{flag_release_id}\""
        },
        "createTime": {
          "type": "string",
          "description": "Output only. The timestamp when the resource was created.",
          "format": "google-datetime",
          "readOnly": true
        },
        "allFlagsRelease": {
          "description": "Optional. Immutable. Specifies the release includes all flags.",
          "type": "boolean"
        },
        "uid": {
          "readOnly": true,
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "type": "string"
        },
        "flagNamesRelease": {
          "$ref": "FlagNameList",
          "description": "Optional. Immutable. Specifies the release consisting of a list of flags."
        },
        "updateTime": {
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "type": "string",
          "readOnly": true
        },
        "flagRevisions": {
          "description": "Optional. Immutable. DEPRECATED: Use flag_revisions_release instead. FlagRevisions to be rolled out. Only one of flag_revisions, all_flags, or flag_sets can be set. It used to be the ultimate source to truth and has been moved to effective_flag_revisions.",
          "items": {
            "type": "string"
          },
          "deprecated": true,
          "type": "array"
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object"
        },
        "allFlags": {
          "type": "boolean",
          "deprecated": true,
          "description": "Optional. Immutable. DEPRECATED: Use all_flags_release instead. Rollout all flags in the provided UnitKind. Only one of flag_revisions, all_flags, or flag_sets can be set."
        }
      },
      "description": "A collection of FlagRevisions.",
      "id": "FlagRelease"
    },
    "Release": {
      "id": "Release",
      "properties": {
        "annotations": {
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        "outputVariables": {
          "items": {
            "$ref": "UnitVariable"
          },
          "readOnly": true,
          "type": "array",
          "description": "Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status"
        },
        "inputVariableDefaults": {
          "items": {
            "$ref": "UnitVariable"
          },
          "type": "array",
          "description": "Optional. Mapping of input variables to default values. Maximum 100"
        },
        "etag": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written."
        },
        "unitKind": {
          "description": "Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).",
          "type": "string"
        },
        "applicationTemplateComponent": {
          "$ref": "ComponentRef",
          "description": "Output only. Reference to component and revision in a composite ApplicationTemplate.",
          "readOnly": true
        },
        "createTime": {
          "description": "Output only. The timestamp when the resource was created.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "inputVariables": {
          "items": {
            "$ref": "UnitVariable"
          },
          "description": "Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec",
          "type": "array",
          "readOnly": true
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/releases/{release}\""
        },
        "uid": {
          "readOnly": true,
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "type": "string"
        },
        "updateTime": {
          "type": "string",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "readOnly": true,
          "format": "google-datetime"
        },
        "blueprint": {
          "description": "Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.",
          "$ref": "Blueprint"
        },
        "releaseRequirements": {
          "description": "Optional. Set of requirements to be fulfilled on the Unit when using this Release.",
          "$ref": "ReleaseRequirements"
        }
      },
      "description": "A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.",
      "type": "object"
    },
    "ListUnitGroupsResponse": {
      "type": "object",
      "id": "ListUnitGroupsResponse",
      "description": "The response structure for the ListUnitGroups method.",
      "properties": {
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListUnitGroups call to list the next page. If empty, there are no more pages.",
          "type": "string"
        },
        "unitGroups": {
          "items": {
            "$ref": "UnitGroup"
          },
          "type": "array",
          "description": "The resulting unit groups."
        },
        "unreachable": {
          "description": "Locations that could not be reached.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "RolloutControl": {
      "properties": {
        "runParams": {
          "description": "Optional. Parameters for the RUN action. It is an error to specify this if the RolloutAction is not set to RUN. By default, the rollout will retry failed operations when resumed.",
          "$ref": "RunRolloutActionParams"
        },
        "action": {
          "enumDescriptions": [
            "Unspecified action, will be treated as RUN by default.",
            "Run the Rollout until it naturally reaches a terminal state. A rollout requested to run will progress through all natural Rollout States (such as RUNNING -\u003e SUCCEEDED or RUNNING -\u003e FAILED). If retriable errors are encountered during the rollout, the rollout will paused by default and can be resumed by re-requesting this RUN action.",
            "Pause the Rollout until it is resumed (i.e. RUN is requested).",
            "Cancel the Rollout permanently."
          ],
          "type": "string",
          "enum": [
            "ROLLOUT_ACTION_UNSPECIFIED",
            "ROLLOUT_ACTION_RUN",
            "ROLLOUT_ACTION_PAUSE",
            "ROLLOUT_ACTION_CANCEL"
          ],
          "description": "Required. Action to be performed on the Rollout. The default behavior is to run the rollout until it naturally reaches a terminal state."
        }
      },
      "id": "RolloutControl",
      "type": "object",
      "description": "RolloutControl provides a way to request a change to the execution of a Rollout by pausing or canceling it."
    },
    "ListSaasReleasesResponse": {
      "type": "object",
      "properties": {
        "unreachable": {
          "description": "Locations that could not be reached.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "saasReleases": {
          "type": "array",
          "items": {
            "$ref": "SaasRelease"
          },
          "description": "The resulting saas releases."
        },
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListSaasReleases call to list the next page. If empty, there are no more pages."
        }
      },
      "description": "The response structure for the ListSaasReleases method.",
      "id": "ListSaasReleasesResponse"
    },
    "ListFlagRevisionsResponse": {
      "description": "The response structure for the ListFlagRevisions method.",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListFlagRevisions call to list the next page. If empty, there are no more pages."
        },
        "unreachable": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Locations that could not be reached."
        },
        "flagRevisions": {
          "type": "array",
          "description": "The resulting flag revisions.",
          "items": {
            "$ref": "FlagRevision"
          }
        }
      },
      "id": "ListFlagRevisionsResponse",
      "type": "object"
    },
    "ListSaasResponse": {
      "properties": {
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListSaas call to list the next page. If empty, there are no more pages.",
          "type": "string"
        },
        "saas": {
          "items": {
            "$ref": "Saas"
          },
          "description": "The resulting saas.",
          "type": "array"
        },
        "unreachable": {
          "description": "Locations that could not be reached.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "ListSaasResponse",
      "description": "The response structure for the ListSaas method.",
      "type": "object"
    },
    "ListFlagAttributesResponse": {
      "description": "The response structure for the ListFlagAttributes method.",
      "id": "ListFlagAttributesResponse",
      "type": "object",
      "properties": {
        "flagAttributes": {
          "type": "array",
          "description": "The resulting flag attributes.",
          "items": {
            "$ref": "FlagAttribute"
          }
        },
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListFlagAttributes call to list the next page. If empty, there are no more pages."
        },
        "unreachable": {
          "description": "Locations that could not be reached.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      }
    },
    "ListRolloutKindsResponse": {
      "type": "object",
      "description": "The response structure for the ListRolloutKinds method.",
      "id": "ListRolloutKindsResponse",
      "properties": {
        "unreachable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Locations that could not be reached."
        },
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListRolloutKinds call to list the next page. If empty, there are no more pages.",
          "type": "string"
        },
        "rolloutKinds": {
          "items": {
            "$ref": "RolloutKind"
          },
          "description": "The resulting rollout kinds.",
          "type": "array"
        }
      }
    },
    "Rollout": {
      "type": "object",
      "description": "Represents a single rollout execution and its results",
      "properties": {
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "state": {
          "enumDescriptions": [
            "Unspecified state.",
            "Rollout is in progress.",
            "Rollout has been paused.",
            "Rollout completed successfully.",
            "Rollout has failed.",
            "Rollout has been canceled.",
            "Rollout is waiting for some condition to be met before starting.",
            "Rollout is being canceled.",
            "Rollout is being resumed.",
            "Rollout is being paused."
          ],
          "description": "Output only. Current state of the rollout.",
          "type": "string",
          "readOnly": true,
          "enum": [
            "ROLLOUT_STATE_UNSPECIFIED",
            "ROLLOUT_STATE_RUNNING",
            "ROLLOUT_STATE_PAUSED",
            "ROLLOUT_STATE_SUCCEEDED",
            "ROLLOUT_STATE_FAILED",
            "ROLLOUT_STATE_CANCELLED",
            "ROLLOUT_STATE_WAITING",
            "ROLLOUT_STATE_CANCELLING",
            "ROLLOUT_STATE_RESUMING",
            "ROLLOUT_STATE_PAUSING"
          ]
        },
        "updateTime": {
          "type": "string",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "format": "google-datetime",
          "readOnly": true
        },
        "parentRollout": {
          "type": "string",
          "description": "Optional. Output only. The direct parent rollout that this rollout is stemming from. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/rollouts/{rollout_id}\"",
          "readOnly": true
        },
        "unitFilter": {
          "type": "string",
          "description": "Optional. CEL(https://github.com/google/cel-spec) formatted filter string against Unit. The filter will be applied to determine the eligible unit population. This filter can only reduce, but not expand the scope of the rollout. If not provided, the unit_filter from the RolloutKind will be used."
        },
        "stateMessage": {
          "readOnly": true,
          "description": "Output only. Human readable message indicating details about the last state transition.",
          "type": "string"
        },
        "endTime": {
          "description": "Optional. Output only. The time when the rollout finished execution (regardless of success, failure, or cancellation). Will be empty if the rollout hasn't finished yet. Once set, the rollout is in terminal state and all the results are final.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "control": {
          "$ref": "RolloutControl",
          "description": "Optional. Requested change to the execution of this rollout. Default RolloutControl.action is ROLLOUT_ACTION_RUN meaning the rollout will be executed to completion while progressing through all natural Rollout States (such as RUNNING -\u003e SUCCEEDED or RUNNING -\u003e FAILED). Requests can only be made when the Rollout is in a non-terminal state."
        },
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true,
          "type": "string"
        },
        "flagRelease": {
          "type": "string",
          "description": "Optional. Immutable. Name of the FlagRelease to be rolled out to the target Units. Release and FlagRelease are mutually exclusive. Note: `release` comment needs to be adjusted to mention that \"Release and FlagRelease are mutually exclusive\" when visibility restriction will be lifted."
        },
        "effectiveUnitFilter": {
          "readOnly": true,
          "type": "string",
          "description": "Optional. Output only. Output only snapshot of the effective unit filter at Rollout start time. Contains a CEL(https://github.com/google/cel-spec) expression consisting of a conjunction of Rollout.unit_filter and RolloutKind.unit_filter. This field captures the filter applied by the Rollout to determine the Unit population. If the associated RolloutKind's unit_filter is modified after the rollout is started, it will not be updated here."
        },
        "stateTransitionTime": {
          "readOnly": true,
          "description": "Optional. Output only. The time when the rollout transitioned into its current state.",
          "format": "google-datetime",
          "type": "string"
        },
        "startTime": {
          "type": "string",
          "description": "Optional. Output only. The time when the rollout started executing. Will be empty if the rollout hasn't started yet.",
          "readOnly": true,
          "format": "google-datetime"
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations"
        },
        "stats": {
          "$ref": "RolloutStats",
          "description": "Optional. Output only. Details about the progress of the rollout.",
          "readOnly": true
        },
        "release": {
          "description": "Optional. Immutable. Name of the Release that gets rolled out to target Units. Required if no other type of release is specified.",
          "type": "string"
        },
        "etag": {
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "type": "string",
          "readOnly": true
        },
        "rootRollout": {
          "type": "string",
          "readOnly": true,
          "description": "Optional. Output only. The root rollout that this rollout is stemming from. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/rollouts/{rollout_id}\""
        },
        "createTime": {
          "readOnly": true,
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was created.",
          "type": "string"
        },
        "deleteTime": {
          "description": "Output only. The timestamp when the resource was marked for deletion (deletion is an asynchronous operation).",
          "type": "string",
          "format": "google-datetime",
          "readOnly": true
        },
        "rolloutKind": {
          "description": "Required. Immutable. Name of the RolloutKind this rollout is stemming from and adhering to.",
          "type": "string"
        },
        "name": {
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/rollout/{rollout_id}\"",
          "type": "string"
        },
        "rolloutOrchestrationStrategy": {
          "description": "Optional. The strategy used for executing this Rollout. This strategy will override whatever strategy is specified in the RolloutKind. If not specified on creation, the strategy from RolloutKind will be used. There are two supported values strategies which are used to control - \"Google.Cloud.Simple.AllAtOnce\" - \"Google.Cloud.Simple.OneLocationAtATime\" A rollout with one of these simple strategies will rollout across all locations defined in the targeted UnitKind's Saas Locations.",
          "type": "string"
        }
      },
      "id": "Rollout"
    },
    "Status": {
      "properties": {
        "details": {
          "type": "array",
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            },
            "type": "object"
          }
        },
        "message": {
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
          "type": "string"
        },
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object",
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "id": "Status"
    },
    "SaasCondition": {
      "description": "SaasCondition describes the status of a Saas.",
      "type": "object",
      "properties": {
        "reason": {
          "description": "Required. Brief reason for the condition's last transition.",
          "type": "string"
        },
        "message": {
          "description": "Required. Human readable message indicating details about the last transition.",
          "type": "string"
        },
        "lastTransitionTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Required. Last time the condition transited from one status to another."
        },
        "type": {
          "description": "Required. Type of the condition.",
          "type": "string",
          "enum": [
            "TYPE_UNSPECIFIED",
            "TYPE_READY",
            "TYPE_SYNCHRONIZED"
          ],
          "enumDescriptions": [
            "Condition type is unspecified.",
            "Condition type is ready.",
            "Condition type is synchronized."
          ]
        },
        "status": {
          "description": "Required. Status of the condition.",
          "enumDescriptions": [
            "Condition status is unspecified.",
            "Condition is unknown.",
            "Condition is true.",
            "Condition is false."
          ],
          "type": "string",
          "enum": [
            "STATUS_UNSPECIFIED",
            "STATUS_UNKNOWN",
            "STATUS_TRUE",
            "STATUS_FALSE"
          ]
        }
      },
      "id": "SaasCondition"
    },
    "ListUnitGroupOperationsResponse": {
      "id": "ListUnitGroupOperationsResponse",
      "properties": {
        "unreachable": {
          "description": "Locations that could not be reached.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "unitGroupOperations": {
          "description": "The resulting unit group operations.",
          "type": "array",
          "items": {
            "$ref": "UnitGroupOperation"
          }
        },
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListUnitGroupOperations call to list the next page. If empty, there are no more pages.",
          "type": "string"
        }
      },
      "description": "The response structure for the ListUnitGroupOperations method.",
      "type": "object"
    },
    "SaasRelease": {
      "description": "SaasRelease is a collection of Releases that are assigned to a UnitGroup. It allows provisioning and updates of UnitGroup, which contains multiple Units of different UnitKinds.",
      "type": "object",
      "id": "SaasRelease",
      "properties": {
        "etag": {
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "type": "string",
          "readOnly": true
        },
        "updateTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "readOnly": true
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/saasReleases/{saasRelease}\""
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object"
        },
        "createTime": {
          "format": "google-datetime",
          "type": "string",
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was created."
        },
        "uid": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4."
        }
      }
    },
    "FlagRevisionList": {
      "properties": {
        "revisions": {
          "type": "array",
          "description": "Required. FlagRevisions to be rolled out.",
          "items": {
            "type": "string"
          }
        }
      },
      "type": "object",
      "id": "FlagRevisionList",
      "description": "Wrapper for a list of flag revisions."
    },
    "CompositeRef": {
      "id": "CompositeRef",
      "type": "object",
      "description": "CompositeRef represents a reference to a composite resource.",
      "properties": {
        "revision": {
          "description": "Optional. Revision of the ApplicationTemplate to use. Changes to revision will trigger manual resynchronization. If empty, ApplicationTemplate will be ignored.",
          "type": "string"
        },
        "syncOperation": {
          "type": "string",
          "description": "Output only. Reference to on-going AppTemplate import and replication operation (i.e. the operation_id for the long-running operation). This field is opaque for external usage.",
          "readOnly": true
        },
        "applicationTemplate": {
          "type": "string",
          "description": "Required. Reference to the ApplicationTemplate resource."
        }
      }
    },
    "ReleaseRequirements": {
      "properties": {
        "upgradeableFromReleases": {
          "description": "Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "type": "object",
      "id": "ReleaseRequirements",
      "description": "Set of requirements to be fulfilled on the Unit when using this Release."
    },
    "UnitGroupOperation": {
      "description": "UnitGroupOperation represents an operation on a UnitGroup.",
      "properties": {
        "createTime": {
          "format": "google-datetime",
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was created.",
          "type": "string"
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "type": "string",
          "readOnly": true
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object"
        },
        "updateTime": {
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "deleteTime": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was marked for deletion (deletion is an asynchronous operation).",
          "format": "google-datetime"
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitGroupOperations/{unitGroupOperation}\""
        },
        "etag": {
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "type": "string",
          "readOnly": true
        }
      },
      "type": "object",
      "id": "UnitGroupOperation"
    },
    "UnitGroup": {
      "description": "UnitGroup represents a set of Units to be used by a Tenant. In pooling scenarios, the UnitGroup may be created and provisioned before the Tenant is created.",
      "id": "UnitGroup",
      "type": "object",
      "properties": {
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels."
        },
        "etag": {
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "readOnly": true
        },
        "uid": {
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "type": "string",
          "readOnly": true
        },
        "createTime": {
          "description": "Output only. The timestamp when the resource was created.",
          "type": "string",
          "readOnly": true,
          "format": "google-datetime"
        },
        "name": {
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitGroups/{unitGroup}\"",
          "type": "string"
        },
        "annotations": {
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        "updateTime": {
          "readOnly": true,
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "type": "string"
        }
      }
    },
    "AppParams": {
      "description": "AppParams contains the parameters for creating an AppHub Application.",
      "type": "object",
      "properties": {
        "group": {
          "description": "Optional. Grouping used to construct the name of the AppHub Application. Multiple UnitKinds can specify the same group to use the same Application across their respective units. Corresponds to the app_boundary_id in the ADC composite ApplicationTemplate. Defaults to UnitKind.name",
          "type": "string"
        },
        "scope": {
          "description": "Optional. Corresponds to the scope in the ADC composite ApplicationTemplate. Defaults to TYPE_REGIONAL.",
          "$ref": "Scope"
        }
      },
      "id": "AppParams"
    },
    "UnitDependency": {
      "description": "Set of dependencies for this unit. Maximum 10.",
      "properties": {
        "alias": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Alias for the name of the dependency."
        },
        "unit": {
          "readOnly": true,
          "description": "Output only. A reference to the Unit object.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "UnitDependency"
    },
    "Scope": {
      "type": "object",
      "description": "Scope of an application.",
      "id": "Scope",
      "properties": {
        "type": {
          "description": "Required. Scope Type.",
          "type": "string",
          "enum": [
            "TYPE_UNSPECIFIED",
            "TYPE_REGIONAL",
            "TYPE_GLOBAL"
          ],
          "enumDescriptions": [
            "Unspecified type.",
            "Regional type.",
            "Global type."
          ]
        }
      }
    },
    "Provision": {
      "properties": {
        "inputVariables": {
          "items": {
            "$ref": "UnitVariable"
          },
          "description": "Optional. Set of input variables. Maximum 100. (optional)",
          "type": "array"
        },
        "release": {
          "type": "string",
          "description": "Optional. Reference to the Release object to use for the Unit. (optional)."
        }
      },
      "type": "object",
      "id": "Provision",
      "description": "Provision is the unit operation that provision the underlying resources represented by a Unit. Can only execute if the Unit is not currently provisioned."
    },
    "Location": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Optional. Name of location."
        }
      },
      "type": "object",
      "id": "Location",
      "description": "Location information that the service is available in."
    },
    "Dependency": {
      "description": "Dependency represent a single dependency with another unit kind by alias.",
      "id": "Dependency",
      "type": "object",
      "properties": {
        "unitKind": {
          "type": "string",
          "description": "Required. Immutable. The unit kind of the dependency."
        },
        "alias": {
          "description": "Required. An alias for the dependency. Used for input variable mapping.",
          "type": "string"
        }
      }
    },
    "ComponentRef": {
      "type": "object",
      "id": "ComponentRef",
      "description": "ComponentRef represents a reference to a component resource.",
      "properties": {
        "component": {
          "type": "string",
          "description": "Optional. Name of the component in composite.Components"
        },
        "compositeRef": {
          "$ref": "CompositeRef",
          "description": "Reference to the Composite ApplicationTemplate."
        },
        "revision": {
          "type": "string",
          "description": "Optional. Revision of the component. If the component does not have a revision, this field will be explicitly set to the revision of the composite ApplicationTemplate."
        }
      }
    },
    "ListReleasesResponse": {
      "description": "The response structure for the ListReleases method.",
      "type": "object",
      "id": "ListReleasesResponse",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "If present, the next page token can be provided to a subsequent ListReleases call to list the next page. If empty, there are no more pages."
        },
        "unreachable": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Locations that could not be reached."
        },
        "releases": {
          "type": "array",
          "items": {
            "$ref": "Release"
          },
          "description": "The resulting releases."
        }
      }
    },
    "ListUnitOperationsResponse": {
      "type": "object",
      "id": "ListUnitOperationsResponse",
      "properties": {
        "unreachable": {
          "description": "Locations that could not be reached.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "If present, the next page token can be provided to a subsequent ListUnitOperations call to list the next page. If empty, there are no more pages.",
          "type": "string"
        },
        "unitOperations": {
          "description": "The resulting unit operations.",
          "items": {
            "$ref": "UnitOperation"
          },
          "type": "array"
        }
      },
      "description": "The response structure for the ListUnitOperations method."
    },
    "Deprovision": {
      "properties": {},
      "id": "Deprovision",
      "description": "Deprovision is the unit operation that deprovision the underlying resources represented by a Unit. Can only execute if the Unit is currently provisioned.",
      "type": "object"
    },
    "UnitUpdatePacing": {
      "id": "UnitUpdatePacing",
      "type": "object",
      "description": "UnitUpdatePacing defines the policy for the maximum number of unit operations that can run for a rollout in parallel in a single region.",
      "properties": {
        "maxConcurrentOperationsPercent": {
          "$ref": "Decimal",
          "description": "Optional. The maximum percentage of total units in the scope that can be in-flight. Example: 10.5 for 10.5%. If both percent and count are provided, the system uses the MINIMUM (most restrictive)."
        },
        "maxConcurrentOperationsCount": {
          "type": "integer",
          "description": "Optional. An absolute cap on concurrent units operations. If both percent and count are provided, the system uses the MINIMUM (most restrictive).",
          "format": "int32"
        }
      }
    },
    "ListLocationsResponse": {
      "description": "The response message for Locations.ListLocations.",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "description": "The standard List next-page token.",
          "type": "string"
        },
        "locations": {
          "description": "A list of locations that matches the specified filter in the request.",
          "type": "array",
          "items": {
            "$ref": "GoogleCloudLocationLocation"
          }
        }
      },
      "id": "ListLocationsResponse"
    },
    "FromMapping": {
      "description": "Output variables whose values will be passed on to dependencies",
      "properties": {
        "dependency": {
          "description": "Required. Alias of the dependency that the outputVariable will pass its value to",
          "type": "string"
        },
        "outputVariable": {
          "description": "Required. Name of the outputVariable on the dependency",
          "type": "string"
        }
      },
      "id": "FromMapping",
      "type": "object"
    },
    "RunRolloutActionParams": {
      "properties": {
        "retryFailedOperations": {
          "description": "Required. If true, the rollout will retry failed operations when resumed. This is applicable only the current state of the Rollout is PAUSED and the requested action is RUN.",
          "type": "boolean"
        }
      },
      "id": "RunRolloutActionParams",
      "description": "Parameters for the RUN action controlling the behavior of the rollout when it is resumed from a PAUSED state.",
      "type": "object"
    },
    "Allocation": {
      "properties": {
        "slots": {
          "description": "Required. Slots defines the weighted distribution of variants.",
          "items": {
            "$ref": "AllocationSlot"
          },
          "type": "array"
        },
        "description": {
          "description": "Optional. Description of the allocation. Max length: 500 bytes.",
          "type": "string"
        },
        "randomizedOn": {
          "type": "string",
          "description": "Required. Key of the context attribute that is used for traffic splitting."
        },
        "id": {
          "type": "string",
          "description": "Required. Allocation ID. Max length: 128 bytes."
        }
      },
      "type": "object",
      "description": "Allocation defines a set of weighted flag variants, specifying how traffic is split based on the randomization unit.",
      "id": "Allocation"
    },
    "Empty": {
      "id": "Empty",
      "properties": {},
      "type": "object",
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }"
    },
    "ToMapping": {
      "type": "object",
      "properties": {
        "ignoreForLookup": {
          "description": "Optional. Tells App Lifecycle Manager if this mapping should be used during lookup or not",
          "type": "boolean"
        },
        "inputVariable": {
          "type": "string",
          "description": "Required. Name of the inputVariable on the dependency"
        },
        "dependency": {
          "type": "string",
          "description": "Required. Alias of the dependency that the inputVariable will pass its value to"
        }
      },
      "description": "Input variables whose values will be passed on to dependencies",
      "id": "ToMapping"
    },
    "UnitKind": {
      "description": "Definition of a Unit. Units belonging to the same UnitKind are managed together; for example they follow the same release model (blueprints, versions etc.) and are typically rolled out together.",
      "properties": {
        "boundaryType": {
          "enumDescriptions": [
            "Unspecified boundary type.",
            "Tenant project boundary.",
            "Managed project boundary."
          ],
          "description": "Optional. Output only. BoundaryType describes the type of boundary the Unit Kind represents.",
          "enum": [
            "BOUNDARY_TYPE_UNSPECIFIED",
            "BOUNDARY_TYPE_TENANT_PROJECT",
            "BOUNDARY_TYPE_MANAGED_PROJECT"
          ],
          "readOnly": true,
          "type": "string"
        },
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations"
        },
        "etag": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written."
        },
        "saas": {
          "description": "Required. Immutable. A reference to the Saas that defines the product (managed service) that the producer wants to manage with App Lifecycle Manager. Part of the App Lifecycle Manager common data model. Immutable once set.",
          "type": "string"
        },
        "uid": {
          "type": "string",
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true
        },
        "createTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was created.",
          "readOnly": true
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitKinds/{unitKind}\""
        },
        "inputVariableMappings": {
          "items": {
            "$ref": "VariableMapping"
          },
          "type": "array",
          "description": "Optional. List of inputVariables for this release that will either be retrieved from a dependency's outputVariables, or will be passed on to a dependency's inputVariables. Maximum 100."
        },
        "defaultFlagRevisions": {
          "type": "array",
          "description": "Optional. Default revisions of flags for this UnitKind. Newly created units will use the flag default_flag_revisions present at the time of creation.",
          "items": {
            "type": "string"
          }
        },
        "applicationTemplateComponent": {
          "description": "Optional. Reference to component and revision in a composite ApplicationTemplate.",
          "$ref": "ComponentRef"
        },
        "labels": {
          "type": "object",
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "defaultRelease": {
          "type": "string",
          "description": "Optional. A reference to the Release object to use as default for creating new units of this UnitKind (optional). If not specified, a new unit must explicitly reference which release to use for its creation."
        },
        "updateTime": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "format": "google-datetime"
        },
        "appParams": {
          "$ref": "AppParams",
          "description": "Optional. AppParams contains the parameters for creating an AppHub Application."
        },
        "outputVariableMappings": {
          "items": {
            "$ref": "VariableMapping"
          },
          "description": "Optional. List of outputVariables for this unit kind will be passed to this unit's outputVariables. Maximum 100.",
          "type": "array"
        },
        "dependencies": {
          "description": "Optional. Immutable. List of other unit kinds that this release will depend on. Dependencies will be automatically provisioned if not found. Maximum 10.",
          "type": "array",
          "items": {
            "$ref": "Dependency"
          }
        }
      },
      "id": "UnitKind",
      "type": "object"
    },
    "FlagRevision": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flagRevisions/{flag_revision_id}\""
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object",
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations"
        },
        "snapshot": {
          "readOnly": true,
          "description": "Output only. Immutable. Snapshot of the Flag.",
          "$ref": "Flag"
        },
        "labels": {
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        "updateTime": {
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "type": "string",
          "readOnly": true
        },
        "createTime": {
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was created.",
          "type": "string",
          "readOnly": true
        },
        "evaluationSpec": {
          "readOnly": true,
          "description": "Output only. Immutable. Snapshot of the EvaluationSpec for the flag. DEPRECATED: Use snapshot instead.",
          "deprecated": true,
          "$ref": "EvaluationSpec"
        },
        "flag": {
          "description": "Required. Immutable. Name of the Flag this is a revision of.",
          "type": "string"
        },
        "etag": {
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "type": "string",
          "readOnly": true
        },
        "uid": {
          "type": "string",
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "readOnly": true
        }
      },
      "type": "object",
      "id": "FlagRevision",
      "description": "A snapshot of the EvaluationSpec for the Flag."
    },
    "EvaluationSpec": {
      "description": "EvaluationSpec holds rules for evaluating the value of a flag.",
      "id": "EvaluationSpec",
      "type": "object",
      "properties": {
        "allocations": {
          "type": "array",
          "items": {
            "$ref": "Allocation"
          },
          "description": "Optional. A list of allocations."
        },
        "rules": {
          "description": "Optional. Evaluation rules define the logic for evaluating the flag against a given context. The rules are evaluated sequentially in their specified order.",
          "items": {
            "$ref": "EvaluationRule"
          },
          "type": "array"
        },
        "variants": {
          "deprecated": true,
          "description": "Optional. A list of variants.",
          "type": "array",
          "items": {
            "$ref": "Variant"
          }
        },
        "defaultTarget": {
          "type": "string",
          "description": "Optional. Deprecated: Use `base_target` instead. Default variant or allocation of the flag.",
          "deprecated": true
        },
        "attributes": {
          "items": {
            "type": "string"
          },
          "description": "Optional. Names of the context attributes that are used in the evaluation rules and allocations.",
          "type": "array"
        }
      }
    },
    "UnitVariable": {
      "description": "UnitVariable describes a parameter for a Unit.",
      "properties": {
        "variable": {
          "description": "Required. Immutable. Name of the variable from actuation configs.",
          "type": "string"
        },
        "value": {
          "description": "Optional. String encoded value for the variable.",
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "TYPE_UNSPECIFIED",
            "STRING",
            "INT",
            "BOOL",
            "STRUCT",
            "LIST"
          ],
          "enumDescriptions": [
            "Variable type is unspecified.",
            "Variable type is string.",
            "Variable type is int.",
            "Variable type is bool.",
            "Variable type is struct.",
            "Variable type is list."
          ],
          "description": "Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool."
        }
      },
      "type": "object",
      "id": "UnitVariable"
    },
    "Blueprint": {
      "description": "Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev).",
      "id": "Blueprint",
      "type": "object",
      "properties": {
        "version": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Version metadata if present on the blueprint."
        },
        "package": {
          "type": "string",
          "description": "Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set)."
        },
        "engine": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc."
        }
      }
    },
    "FlagAttribute": {
      "id": "FlagAttribute",
      "properties": {
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "type": "object"
        },
        "annotations": {
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "key": {
          "type": "string",
          "description": "Required. Immutable. The identifier for the attribute, used as the key in the evaluation context. The attribute key is referenced in the evaluation rules and used in the OpenFeature evaluation API to specify the attribute context."
        },
        "uid": {
          "readOnly": true,
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.",
          "type": "string"
        },
        "valueType": {
          "deprecated": true,
          "description": "Optional. Immutable. Deprecated: Use `attribute_value_type` instead. Type of the attribute.",
          "enum": [
            "FLAG_ATTRIBUTE_VALUE_TYPE_UNSPECIFIED",
            "BOOLEAN",
            "INTEGER",
            "STRING",
            "DOUBLE"
          ],
          "enumDescriptions": [
            "Unspecified flag attribute value type.",
            "Boolean flag attribute value type.",
            "Integer flag attribute value type.",
            "String flag attribute value type.",
            "Double flag attribute value type."
          ],
          "type": "string"
        },
        "updateTime": {
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "type": "string",
          "format": "google-datetime",
          "readOnly": true
        },
        "etag": {
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "readOnly": true
        },
        "createTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Output only. The timestamp when the resource was created.",
          "readOnly": true
        },
        "name": {
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flagAttributes/{flag_attribute_id}\"",
          "type": "string"
        },
        "attributeValueType": {
          "type": "string",
          "enum": [
            "FLAG_ATTRIBUTE_VALUE_TYPE_UNSPECIFIED",
            "FLAG_ATTRIBUTE_VALUE_TYPE_BOOLEAN",
            "FLAG_ATTRIBUTE_VALUE_TYPE_INTEGER",
            "FLAG_ATTRIBUTE_VALUE_TYPE_STRING",
            "FLAG_ATTRIBUTE_VALUE_TYPE_DOUBLE"
          ],
          "enumDescriptions": [
            "Unspecified flag attribute value type.",
            "Boolean flag attribute value type.",
            "Integer flag attribute value type.",
            "String flag attribute value type.",
            "Double flag attribute value type."
          ],
          "description": "Optional. Immutable. Type of the attribute."
        }
      },
      "description": "FlagAttribute defines a custom property in the evaluation context.",
      "type": "object"
    },
    "Flag": {
      "id": "Flag",
      "properties": {
        "variants": {
          "items": {
            "$ref": "FlagVariant"
          },
          "type": "array",
          "description": "Optional. A list of variants."
        },
        "unitKind": {
          "description": "Required. Immutable. UnitKind that can consume this flag.",
          "type": "string"
        },
        "flagSet": {
          "description": "Optional. Flag set this flag belongs to.",
          "type": "string"
        },
        "description": {
          "type": "string",
          "description": "Optional. Description of the flag. Max length: 500 bytes."
        },
        "name": {
          "type": "string",
          "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flags/{flag_id}\""
        },
        "flagValueType": {
          "description": "Optional. Immutable. Flag value type.",
          "type": "string",
          "enum": [
            "FLAG_VALUE_TYPE_UNSPECIFIED",
            "FLAG_VALUE_TYPE_BOOLEAN",
            "FLAG_VALUE_TYPE_INTEGER",
            "FLAG_VALUE_TYPE_STRING",
            "FLAG_VALUE_TYPE_DOUBLE"
          ],
          "enumDescriptions": [
            "Unspecified flag value type.",
            "Boolean flag value type.",
            "Integer flag value type.",
            "String flag value type.",
            "Double flag value type."
          ]
        },
        "labels": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.",
          "type": "object"
        },
        "state": {
          "description": "Optional. Current state of the flag.",
          "enumDescriptions": [
            "Flag state is unspecified.",
            "Flag is in development state.",
            "Flag is in active state.",
            "Flag is in deprecated state.",
            "Flag is in cleanup state."
          ],
          "type": "string",
          "enum": [
            "FLAG_STATE_UNSPECIFIED",
            "FLAG_STATE_IN_DEVELOPMENT",
            "FLAG_STATE_ACTIVE",
            "FLAG_STATE_SUNSETTING",
            "FLAG_STATE_CLEANUP"
          ]
        },
        "updateTime": {
          "format": "google-datetime",
          "description": "Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.",
          "readOnly": true,
          "type": "string"
        },
        "annotations": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations",
          "type": "object"
        },
        "etag": {
          "type": "string",
          "description": "Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.",
          "readOnly": true
        },
        "evaluationSpec": {
          "$ref": "EvaluationSpec",
          "description": "Optional. Specification of how the flag value should be evaluated. If a bool flag is created without an evaluation_spec specified, two default variants, \"Enabled\" (with bool_value = true) and \"Disabled\" (with bool_value = false), are created by default, and \"Disabled\" is set as the default_target."
        },
        "createTime": {
          "readOnly": true,
          "description": "Output only. The timestamp when the resource was created.",
          "type": "string",
          "format": "google-datetime"
        },
        "valueType": {
          "deprecated": true,
          "type": "string",
          "enumDescriptions": [
            "",
            "Boolean flag value type.",
            "Integer flag value type.",
            "String flag value type.",
            "Double flag type."
          ],
          "enum": [
            "FLAG_VALUE_TYPE_UNSPECIFIED",
            "FLAG_VALUE_TYPE_BOOL",
            "FLAG_VALUE_TYPE_INT",
            "FLAG_VALUE_TYPE_STRING",
            "FLAG_VALUE_TYPE_DOUBLE"
          ],
          "description": "Optional. Immutable. Deprecated: Use `flag_value_type` instead. Flag value type."
        },
        "uid": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4."
        },
        "key": {
          "description": "Required. Immutable. Flag key used in runtime evaluation APIs (OpenFeature). Max length: 256 bytes.",
          "type": "string"
        }
      },
      "description": "Represents a single Flag.",
      "type": "object"
    },
    "FlagUpdate": {
      "type": "object",
      "id": "FlagUpdate",
      "description": "FlagUpdate is a UnitOperation that pushes new flag values to Units.",
      "properties": {
        "flagRelease": {
          "description": "Required. Flag release being applied by UnitOperation.",
          "type": "string"
        }
      }
    }
  },
  "documentationLink": "https://cloud.google.com/saas-runtime/docs",
  "kind": "discovery#restDescription",
  "id": "saasservicemgmt:v1beta1",
  "rootUrl": "https://saasservicemgmt.googleapis.com/",
  "description": "Model, deploy, and operate your SaaS at scale. ",
  "discoveryVersion": "v1",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        },
        "https://www.googleapis.com/auth/saasservicemgmt.read-write": {
          "description": "See, edit, configure, and delete your Google Cloud App Lifecycle Management data and see the email address for your Google Account"
        },
        "https://www.googleapis.com/auth/saasservicemgmt.readonly": {
          "description": "See your Google Cloud App Lifecycle Management data and the email address of your Google Account"
        }
      }
    }
  },
  "parameters": {
    "prettyPrint": {
      "description": "Returns response with indentations and line breaks.",
      "location": "query",
      "type": "boolean",
      "default": "true"
    },
    "uploadType": {
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "type": "string",
      "location": "query"
    },
    "fields": {
      "location": "query",
      "description": "Selector specifying which fields to include in a partial response.",
      "type": "string"
    },
    "key": {
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query",
      "type": "string"
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "alt": {
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "description": "Data format for response.",
      "type": "string",
      "location": "query",
      "default": "json"
    },
    "quotaUser": {
      "location": "query",
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
    },
    "oauth_token": {
      "type": "string",
      "location": "query",
      "description": "OAuth 2.0 token for the current user."
    },
    "$.xgafv": {
      "description": "V1 error format.",
      "type": "string",
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "enum": [
        "1",
        "2"
      ],
      "location": "query"
    },
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    }
  },
  "ownerName": "Google",
  "resources": {
    "projects": {
      "resources": {
        "locations": {
          "methods": {
            "list": {
              "parameterOrder": [
                "name"
              ],
              "id": "saasservicemgmt.projects.locations.list",
              "response": {
                "$ref": "ListLocationsResponse"
              },
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "path": "v1beta1/{+name}/locations",
              "parameters": {
                "pageSize": {
                  "format": "int32",
                  "description": "The maximum number of results to return. If not set, the service selects a default.",
                  "type": "integer",
                  "location": "query"
                },
                "filter": {
                  "location": "query",
                  "description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like `\"displayName=tokyo\"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).",
                  "type": "string"
                },
                "extraLocationTypes": {
                  "type": "string",
                  "description": "Optional. Do not use this field unless explicitly documented otherwise. This is primarily for internal usage.",
                  "location": "query",
                  "repeated": true
                },
                "name": {
                  "description": "The resource that owns the locations collection, if applicable.",
                  "type": "string",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true
                },
                "pageToken": {
                  "description": "A page token received from the `next_page_token` field in the response. Send that page token to receive the subsequent page.",
                  "type": "string",
                  "location": "query"
                }
              },
              "description": "Lists information about the supported locations for this service. This method lists locations based on the resource scope provided in the ListLocationsRequest.name field: * **Global locations**: If `name` is empty, the method lists the public locations available to all projects. * **Project-specific locations**: If `name` follows the format `projects/{project}`, the method lists locations visible to that specific project. This includes public, private, or other project-specific locations enabled for the project. For gRPC and client library implementations, the resource name is passed as the `name` field. For direct service calls, the resource name is incorporated into the request path based on the specific service implementation and version.",
              "flatPath": "v1beta1/projects/{projectsId}/locations"
            },
            "get": {
              "description": "Gets information about a location.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "path": "v1beta1/{+name}",
              "response": {
                "$ref": "GoogleCloudLocationLocation"
              },
              "id": "saasservicemgmt.projects.locations.get",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "description": "Resource name for the location.",
                  "type": "string",
                  "location": "path",
                  "pattern": "^projects/[^/]+/locations/[^/]+$",
                  "required": true
                }
              },
              "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
              "httpMethod": "GET"
            }
          },
          "resources": {
            "units": {
              "methods": {
                "list": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "description": "Retrieve a collection of units.",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/units",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "path": "v1beta1/{+parent}/units",
                  "httpMethod": "GET",
                  "id": "saasservicemgmt.projects.locations.units.list",
                  "response": {
                    "$ref": "ListUnitsResponse"
                  },
                  "parameters": {
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query",
                      "type": "string"
                    },
                    "pageSize": {
                      "location": "query",
                      "format": "int32",
                      "description": "The maximum number of units to send per page.",
                      "type": "integer"
                    },
                    "parent": {
                      "description": "Required. The parent of the unit.",
                      "location": "path",
                      "type": "string",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "filter": {
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string",
                      "location": "query"
                    },
                    "orderBy": {
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string",
                      "location": "query"
                    }
                  }
                },
                "get": {
                  "description": "Retrieve a single unit.",
                  "response": {
                    "$ref": "Unit"
                  },
                  "id": "saasservicemgmt.projects.locations.units.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "path": "v1beta1/{+name}",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/units/{unitsId}",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "location": "path",
                      "required": true,
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/units/[^/]+$"
                    }
                  },
                  "httpMethod": "GET"
                },
                "delete": {
                  "id": "saasservicemgmt.projects.locations.units.delete",
                  "parameterOrder": [
                    "name"
                  ],
                  "path": "v1beta1/{+name}",
                  "description": "Delete a single unit.",
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "etag": {
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the unit. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the unit. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "location": "query"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    },
                    "name": {
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/units/[^/]+$"
                    }
                  },
                  "response": {
                    "$ref": "Empty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "httpMethod": "DELETE",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/units/{unitsId}"
                },
                "patch": {
                  "id": "saasservicemgmt.projects.locations.units.patch",
                  "path": "v1beta1/{+name}",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "response": {
                    "$ref": "Unit"
                  },
                  "parameters": {
                    "updateMask": {
                      "location": "query",
                      "format": "google-fieldmask",
                      "type": "string",
                      "description": "Field mask is used to specify the fields to be overwritten in the Unit resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Unit will be overwritten."
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string",
                      "location": "query"
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    },
                    "name": {
                      "type": "string",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/units/{unit}\"",
                      "pattern": "^projects/[^/]+/locations/[^/]+/units/[^/]+$",
                      "location": "path",
                      "required": true
                    }
                  },
                  "httpMethod": "PATCH",
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "Unit"
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/units/{unitsId}",
                  "description": "Update a single unit."
                },
                "create": {
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "parent": {
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the unit.",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    },
                    "unitId": {
                      "description": "Required. The ID value for the new unit.",
                      "location": "query",
                      "type": "string"
                    },
                    "requestId": {
                      "type": "string",
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/units",
                  "request": {
                    "$ref": "Unit"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "httpMethod": "POST",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "response": {
                    "$ref": "Unit"
                  },
                  "path": "v1beta1/{+parent}/units",
                  "id": "saasservicemgmt.projects.locations.units.create",
                  "description": "Create a new unit."
                }
              }
            },
            "tenants": {
              "methods": {
                "create": {
                  "request": {
                    "$ref": "Tenant"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1beta1/{+parent}/tenants",
                  "response": {
                    "$ref": "Tenant"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "id": "saasservicemgmt.projects.locations.tenants.create",
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "required": true,
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the tenant.",
                      "type": "string"
                    },
                    "tenantId": {
                      "type": "string",
                      "description": "Required. The ID value for the new tenant.",
                      "location": "query"
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/tenants",
                  "description": "Create a new tenant.",
                  "httpMethod": "POST"
                },
                "list": {
                  "parameters": {
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string"
                    },
                    "pageSize": {
                      "format": "int32",
                      "type": "integer",
                      "location": "query",
                      "description": "The maximum number of tenants to send per page."
                    },
                    "parent": {
                      "location": "path",
                      "type": "string",
                      "required": true,
                      "description": "Required. The parent of the tenant.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "filter": {
                      "location": "query",
                      "type": "string",
                      "description": "Filter the list as specified in https://google.aip.dev/160."
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "httpMethod": "GET",
                  "id": "saasservicemgmt.projects.locations.tenants.list",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/tenants",
                  "parameterOrder": [
                    "parent"
                  ],
                  "description": "Retrieve a collection of tenants.",
                  "path": "v1beta1/{+parent}/tenants",
                  "response": {
                    "$ref": "ListTenantsResponse"
                  }
                },
                "patch": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/tenants/{tenantsId}",
                  "id": "saasservicemgmt.projects.locations.tenants.patch",
                  "path": "v1beta1/{+name}",
                  "description": "Update a single tenant.",
                  "request": {
                    "$ref": "Tenant"
                  },
                  "response": {
                    "$ref": "Tenant"
                  },
                  "httpMethod": "PATCH",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    },
                    "updateMask": {
                      "format": "google-fieldmask",
                      "description": "Field mask is used to specify the fields to be overwritten in the Tenant resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Tenant will be overwritten.",
                      "type": "string",
                      "location": "query"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "name": {
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/tenants/{tenant}\"",
                      "location": "path",
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/tenants/[^/]+$",
                      "required": true
                    }
                  }
                },
                "delete": {
                  "response": {
                    "$ref": "Empty"
                  },
                  "id": "saasservicemgmt.projects.locations.tenants.delete",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/tenants/{tenantsId}",
                  "parameters": {
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    },
                    "name": {
                      "required": true,
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/tenants/[^/]+$",
                      "description": "Required. The resource name of the resource within a service.",
                      "type": "string"
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    },
                    "etag": {
                      "location": "query",
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the tenant. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the tenant. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not."
                    }
                  },
                  "description": "Delete a single tenant.",
                  "path": "v1beta1/{+name}",
                  "httpMethod": "DELETE"
                },
                "get": {
                  "response": {
                    "$ref": "Tenant"
                  },
                  "id": "saasservicemgmt.projects.locations.tenants.get",
                  "path": "v1beta1/{+name}",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/tenants/{tenantsId}",
                  "httpMethod": "GET",
                  "description": "Retrieve a single tenant.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "parameters": {
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/tenants/[^/]+$",
                      "location": "path",
                      "description": "Required. The resource name of the resource within a service.",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ]
                }
              }
            },
            "flags": {
              "methods": {
                "create": {
                  "description": "Create a new flag.",
                  "id": "saasservicemgmt.projects.locations.flags.create",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flags",
                  "request": {
                    "$ref": "Flag"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+parent}/flags",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "validateOnly": {
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    },
                    "flagId": {
                      "location": "query",
                      "description": "Required. The ID value for the new flag.",
                      "type": "string"
                    },
                    "parent": {
                      "type": "string",
                      "required": true,
                      "description": "Required. The parent of the flag.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    }
                  },
                  "response": {
                    "$ref": "Flag"
                  },
                  "httpMethod": "POST"
                },
                "patch": {
                  "parameterOrder": [
                    "name"
                  ],
                  "httpMethod": "PATCH",
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.flags.patch",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "validateOnly": {
                      "location": "query",
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    },
                    "name": {
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/flags/[^/]+$",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flags/{flag_id}\"",
                      "required": true,
                      "location": "path"
                    },
                    "updateMask": {
                      "description": "Field mask is used to specify the fields to be overwritten in the Flag resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Flag will be overwritten.",
                      "location": "query",
                      "type": "string",
                      "format": "google-fieldmask"
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flags/{flagsId}",
                  "description": "Update a single flag.",
                  "request": {
                    "$ref": "Flag"
                  },
                  "response": {
                    "$ref": "Flag"
                  }
                },
                "get": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "id": "saasservicemgmt.projects.locations.flags.get",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Flag"
                  },
                  "path": "v1beta1/{+name}",
                  "httpMethod": "GET",
                  "description": "Retrieve a single flag.",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/flags/[^/]+$",
                      "location": "path",
                      "required": true
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flags/{flagsId}"
                },
                "delete": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flags/{flagsId}",
                  "id": "saasservicemgmt.projects.locations.flags.delete",
                  "description": "Delete a single flag.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the resource within a service.",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/flags/[^/]+$",
                      "location": "path",
                      "type": "string"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    },
                    "etag": {
                      "location": "query",
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the flag. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the flag. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not."
                    }
                  },
                  "response": {
                    "$ref": "Empty"
                  },
                  "path": "v1beta1/{+name}",
                  "httpMethod": "DELETE"
                },
                "list": {
                  "httpMethod": "GET",
                  "description": "Retrieve a collection of flags.",
                  "response": {
                    "$ref": "ListFlagsResponse"
                  },
                  "parameters": {
                    "orderBy": {
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string",
                      "location": "query"
                    },
                    "parent": {
                      "description": "Required. The parent of the flag.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "type": "string",
                      "required": true,
                      "location": "path"
                    },
                    "filter": {
                      "location": "query",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string"
                    },
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query",
                      "type": "string"
                    },
                    "pageSize": {
                      "type": "integer",
                      "description": "The maximum number of flags to send per page.",
                      "location": "query",
                      "format": "int32"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "id": "saasservicemgmt.projects.locations.flags.list",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flags",
                  "path": "v1beta1/{+parent}/flags"
                }
              }
            },
            "rollouts": {
              "methods": {
                "list": {
                  "description": "Retrieve a collection of rollouts.",
                  "response": {
                    "$ref": "ListRolloutsResponse"
                  },
                  "path": "v1beta1/{+parent}/rollouts",
                  "parameters": {
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "type": "string",
                      "location": "query"
                    },
                    "pageSize": {
                      "format": "int32",
                      "type": "integer",
                      "location": "query",
                      "description": "The maximum number of rollouts to send per page."
                    },
                    "orderBy": {
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string"
                    },
                    "parent": {
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "description": "Required. The parent of the rollout.",
                      "location": "path",
                      "type": "string"
                    },
                    "filter": {
                      "location": "query",
                      "type": "string",
                      "description": "Filter the list as specified in https://google.aip.dev/160."
                    }
                  },
                  "httpMethod": "GET",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rollouts",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "id": "saasservicemgmt.projects.locations.rollouts.list",
                  "parameterOrder": [
                    "parent"
                  ]
                },
                "delete": {
                  "description": "Delete a single rollout.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "name": {
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/rollouts/[^/]+$",
                      "location": "path",
                      "required": true
                    },
                    "etag": {
                      "location": "query",
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the rollout. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the rollout. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not."
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "httpMethod": "DELETE",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rollouts/{rolloutsId}",
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.rollouts.delete",
                  "response": {
                    "$ref": "Empty"
                  }
                },
                "get": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rollouts/{rolloutsId}",
                  "path": "v1beta1/{+name}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path",
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/rollouts/[^/]+$",
                      "required": true
                    }
                  },
                  "description": "Retrieve a single rollout.",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Rollout"
                  },
                  "id": "saasservicemgmt.projects.locations.rollouts.get",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ]
                },
                "patch": {
                  "httpMethod": "PATCH",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Rollout"
                  },
                  "parameters": {
                    "updateMask": {
                      "type": "string",
                      "location": "query",
                      "format": "google-fieldmask",
                      "description": "Field mask is used to specify the fields to be overwritten in the Rollout resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Rollout will be overwritten."
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "name": {
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/rollouts/[^/]+$",
                      "location": "path",
                      "required": true,
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/rollout/{rollout_id}\""
                    }
                  },
                  "id": "saasservicemgmt.projects.locations.rollouts.patch",
                  "path": "v1beta1/{+name}",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rollouts/{rolloutsId}",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "request": {
                    "$ref": "Rollout"
                  },
                  "description": "Update a single rollout."
                },
                "create": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "Rollout"
                  },
                  "id": "saasservicemgmt.projects.locations.rollouts.create",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "request": {
                    "$ref": "Rollout"
                  },
                  "description": "Create a new rollout.",
                  "httpMethod": "POST",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rollouts",
                  "parameters": {
                    "rolloutId": {
                      "location": "query",
                      "description": "Required. The ID value for the new rollout.",
                      "type": "string"
                    },
                    "parent": {
                      "description": "Required. The parent of the rollout.",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "type": "string",
                      "location": "path"
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    }
                  },
                  "path": "v1beta1/{+parent}/rollouts"
                }
              }
            },
            "flagRevisions": {
              "methods": {
                "delete": {
                  "response": {
                    "$ref": "Empty"
                  },
                  "id": "saasservicemgmt.projects.locations.flagRevisions.delete",
                  "httpMethod": "DELETE",
                  "path": "v1beta1/{+name}",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagRevisions/{flagRevisionsId}",
                  "parameterOrder": [
                    "name"
                  ],
                  "description": "Delete a single flag revision.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "name": {
                      "location": "path",
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagRevisions/[^/]+$"
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "etag": {
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the flag revision. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the flag revision. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "location": "query"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    }
                  }
                },
                "list": {
                  "response": {
                    "$ref": "ListFlagRevisionsResponse"
                  },
                  "description": "Retrieve a collection of flag revisions.",
                  "parameterOrder": [
                    "parent"
                  ],
                  "httpMethod": "GET",
                  "id": "saasservicemgmt.projects.locations.flagRevisions.list",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagRevisions",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "path": "v1beta1/{+parent}/flagRevisions",
                  "parameters": {
                    "pageToken": {
                      "type": "string",
                      "location": "query",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page."
                    },
                    "orderBy": {
                      "type": "string",
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132."
                    },
                    "pageSize": {
                      "format": "int32",
                      "description": "The maximum number of flag revisions to send per page.",
                      "location": "query",
                      "type": "integer"
                    },
                    "parent": {
                      "type": "string",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "description": "Required. The parent of the flag revision."
                    },
                    "filter": {
                      "location": "query",
                      "type": "string",
                      "description": "Filter the list as specified in https://google.aip.dev/160."
                    }
                  }
                },
                "patch": {
                  "id": "saasservicemgmt.projects.locations.flagRevisions.patch",
                  "request": {
                    "$ref": "FlagRevision"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+name}",
                  "response": {
                    "$ref": "FlagRevision"
                  },
                  "description": "Update a single flag revision.",
                  "parameters": {
                    "name": {
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagRevisions/[^/]+$",
                      "type": "string",
                      "location": "path",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flagRevisions/{flag_revision_id}\"",
                      "required": true
                    },
                    "validateOnly": {
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    },
                    "updateMask": {
                      "description": "Field mask is used to specify the fields to be overwritten in the FlagRevision resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the FlagRevision will be overwritten.",
                      "location": "query",
                      "type": "string",
                      "format": "google-fieldmask"
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagRevisions/{flagRevisionsId}",
                  "httpMethod": "PATCH"
                },
                "create": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagRevisions",
                  "id": "saasservicemgmt.projects.locations.flagRevisions.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "response": {
                    "$ref": "FlagRevision"
                  },
                  "request": {
                    "$ref": "FlagRevision"
                  },
                  "parameters": {
                    "parent": {
                      "type": "string",
                      "location": "path",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the flag revision."
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string",
                      "location": "query"
                    },
                    "flagRevisionId": {
                      "location": "query",
                      "description": "Required. The ID value for the new flag revision.",
                      "type": "string"
                    },
                    "validateOnly": {
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    }
                  },
                  "path": "v1beta1/{+parent}/flagRevisions",
                  "httpMethod": "POST",
                  "description": "Create a new flag revision."
                },
                "get": {
                  "httpMethod": "GET",
                  "id": "saasservicemgmt.projects.locations.flagRevisions.get",
                  "path": "v1beta1/{+name}",
                  "description": "Retrieve a single flag revision.",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagRevisions/{flagRevisionsId}",
                  "parameters": {
                    "name": {
                      "location": "path",
                      "type": "string",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagRevisions/[^/]+$",
                      "description": "Required. The resource name of the resource within a service."
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "response": {
                    "$ref": "FlagRevision"
                  }
                }
              }
            },
            "unitGroups": {
              "methods": {
                "create": {
                  "id": "saasservicemgmt.projects.locations.unitGroups.create",
                  "response": {
                    "$ref": "UnitGroup"
                  },
                  "request": {
                    "$ref": "UnitGroup"
                  },
                  "path": "v1beta1/{+parent}/unitGroups",
                  "description": "Create a new unit group.",
                  "parameterOrder": [
                    "parent"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroups",
                  "parameters": {
                    "validateOnly": {
                      "type": "boolean",
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests."
                    },
                    "parent": {
                      "required": true,
                      "location": "path",
                      "description": "Required. The parent of the unit group.",
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "unitGroupId": {
                      "location": "query",
                      "description": "Required. The ID value for the new unit group.",
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "httpMethod": "POST"
                },
                "list": {
                  "httpMethod": "GET",
                  "path": "v1beta1/{+parent}/unitGroups",
                  "parameters": {
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "type": "string",
                      "location": "query"
                    },
                    "pageSize": {
                      "type": "integer",
                      "format": "int32",
                      "location": "query",
                      "description": "The maximum number of unit groups to send per page."
                    },
                    "orderBy": {
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string",
                      "location": "query"
                    },
                    "parent": {
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "description": "Required. The parent of the unit group.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "filter": {
                      "type": "string",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "location": "query"
                    }
                  },
                  "response": {
                    "$ref": "ListUnitGroupsResponse"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroups",
                  "description": "Retrieve a collection of unit groups.",
                  "id": "saasservicemgmt.projects.locations.unitGroups.list"
                },
                "patch": {
                  "path": "v1beta1/{+name}",
                  "parameters": {
                    "updateMask": {
                      "description": "Field mask is used to specify the fields to be overwritten.",
                      "type": "string",
                      "location": "query",
                      "format": "google-fieldmask"
                    },
                    "name": {
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitGroups/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitGroups/{unitGroup}\""
                    },
                    "requestId": {
                      "type": "string",
                      "location": "query",
                      "description": "An optional request ID to identify requests."
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    }
                  },
                  "request": {
                    "$ref": "UnitGroup"
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroups/{unitGroupsId}",
                  "httpMethod": "PATCH",
                  "id": "saasservicemgmt.projects.locations.unitGroups.patch",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "description": "Update a single unit group.",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "UnitGroup"
                  }
                },
                "get": {
                  "parameterOrder": [
                    "name"
                  ],
                  "id": "saasservicemgmt.projects.locations.unitGroups.get",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroups/{unitGroupsId}",
                  "httpMethod": "GET",
                  "path": "v1beta1/{+name}",
                  "parameters": {
                    "name": {
                      "location": "path",
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitGroups/[^/]+$",
                      "required": true
                    }
                  },
                  "response": {
                    "$ref": "UnitGroup"
                  },
                  "description": "Retrieve a single unit group.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                },
                "delete": {
                  "path": "v1beta1/{+name}",
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "name": {
                      "required": true,
                      "location": "path",
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitGroups/[^/]+$",
                      "description": "Required. The resource name of the resource within a service."
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests.",
                      "type": "string"
                    },
                    "etag": {
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the unit group.",
                      "location": "query"
                    }
                  },
                  "id": "saasservicemgmt.projects.locations.unitGroups.delete",
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Delete a single unit group.",
                  "httpMethod": "DELETE",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroups/{unitGroupsId}",
                  "parameterOrder": [
                    "name"
                  ]
                }
              }
            },
            "rolloutKinds": {
              "methods": {
                "list": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "parameters": {
                    "pageSize": {
                      "type": "integer",
                      "format": "int32",
                      "description": "The maximum number of rollout kinds to send per page.",
                      "location": "query"
                    },
                    "orderBy": {
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string"
                    },
                    "pageToken": {
                      "type": "string",
                      "location": "query",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page."
                    },
                    "parent": {
                      "description": "Required. The parent of the rollout kind.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    },
                    "filter": {
                      "location": "query",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string"
                    }
                  },
                  "httpMethod": "GET",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rolloutKinds",
                  "description": "Retrieve a collection of rollout kinds.",
                  "id": "saasservicemgmt.projects.locations.rolloutKinds.list",
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1beta1/{+parent}/rolloutKinds",
                  "response": {
                    "$ref": "ListRolloutKindsResponse"
                  }
                },
                "get": {
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "location": "path",
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/rolloutKinds/[^/]+$",
                      "required": true
                    }
                  },
                  "response": {
                    "$ref": "RolloutKind"
                  },
                  "id": "saasservicemgmt.projects.locations.rolloutKinds.get",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "description": "Retrieve a single rollout kind.",
                  "path": "v1beta1/{+name}",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rolloutKinds/{rolloutKindsId}"
                },
                "delete": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rolloutKinds/{rolloutKindsId}",
                  "description": "Delete a single rollout kind.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "id": "saasservicemgmt.projects.locations.rolloutKinds.delete",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/rolloutKinds/[^/]+$",
                      "required": true
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "etag": {
                      "location": "query",
                      "description": "The etag known to the client for the expected state of the rollout kind. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the rollout kind. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "type": "string"
                    }
                  },
                  "path": "v1beta1/{+name}",
                  "httpMethod": "DELETE"
                },
                "patch": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rolloutKinds/{rolloutKindsId}",
                  "request": {
                    "$ref": "RolloutKind"
                  },
                  "description": "Update a single rollout kind.",
                  "path": "v1beta1/{+name}",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "RolloutKind"
                  },
                  "httpMethod": "PATCH",
                  "id": "saasservicemgmt.projects.locations.rolloutKinds.patch",
                  "parameters": {
                    "updateMask": {
                      "description": "Field mask is used to specify the fields to be overwritten in the RolloutKind resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the RolloutKind will be overwritten.",
                      "type": "string",
                      "location": "query",
                      "format": "google-fieldmask"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "name": {
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/rolloutKinds/[^/]+$",
                      "required": true,
                      "location": "path",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/rolloutKinds/{rollout_kind_id}\""
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                },
                "create": {
                  "response": {
                    "$ref": "RolloutKind"
                  },
                  "parameters": {
                    "rolloutKindId": {
                      "location": "query",
                      "description": "Required. The ID value for the new rollout kind.",
                      "type": "string"
                    },
                    "validateOnly": {
                      "location": "query",
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "parent": {
                      "description": "Required. The parent of the rollout kind.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    }
                  },
                  "path": "v1beta1/{+parent}/rolloutKinds",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "httpMethod": "POST",
                  "id": "saasservicemgmt.projects.locations.rolloutKinds.create",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/rolloutKinds",
                  "request": {
                    "$ref": "RolloutKind"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "description": "Create a new rollout kind."
                }
              }
            },
            "saasReleases": {
              "methods": {
                "delete": {
                  "description": "Delete a single saas release.",
                  "id": "saasservicemgmt.projects.locations.saasReleases.delete",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saasReleases/{saasReleasesId}",
                  "path": "v1beta1/{+name}",
                  "httpMethod": "DELETE",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "parameters": {
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/saasReleases/[^/]+$",
                      "type": "string",
                      "location": "path",
                      "description": "Required. The resource name of the resource within a service."
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests.",
                      "type": "string"
                    },
                    "etag": {
                      "location": "query",
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the saas release."
                    }
                  }
                },
                "patch": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saasReleases/{saasReleasesId}",
                  "description": "Update a single saas release.",
                  "id": "saasservicemgmt.projects.locations.saasReleases.patch",
                  "response": {
                    "$ref": "SaasRelease"
                  },
                  "request": {
                    "$ref": "SaasRelease"
                  },
                  "httpMethod": "PATCH",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/saasReleases/[^/]+$",
                      "location": "path",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/saasReleases/{saasRelease}\"",
                      "type": "string"
                    },
                    "validateOnly": {
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests."
                    },
                    "updateMask": {
                      "location": "query",
                      "description": "Field mask is used to specify the fields to be overwritten.",
                      "type": "string",
                      "format": "google-fieldmask"
                    }
                  },
                  "path": "v1beta1/{+name}",
                  "parameterOrder": [
                    "name"
                  ]
                },
                "get": {
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saasReleases/{saasReleasesId}",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/saasReleases/[^/]+$",
                      "required": true
                    }
                  },
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.saasReleases.get",
                  "description": "Retrieve a single saas release.",
                  "response": {
                    "$ref": "SaasRelease"
                  },
                  "httpMethod": "GET",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                },
                "create": {
                  "response": {
                    "$ref": "SaasRelease"
                  },
                  "httpMethod": "POST",
                  "description": "Create a new saas release.",
                  "id": "saasservicemgmt.projects.locations.saasReleases.create",
                  "parameters": {
                    "requestId": {
                      "description": "An optional request ID to identify requests.",
                      "type": "string",
                      "location": "query"
                    },
                    "validateOnly": {
                      "location": "query",
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "parent": {
                      "type": "string",
                      "description": "Required. The parent of the saas release.",
                      "required": true,
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "saasReleaseId": {
                      "description": "Required. The ID value for the new saas release.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "request": {
                    "$ref": "SaasRelease"
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saasReleases",
                  "path": "v1beta1/{+parent}/saasReleases",
                  "parameterOrder": [
                    "parent"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                },
                "list": {
                  "id": "saasservicemgmt.projects.locations.saasReleases.list",
                  "path": "v1beta1/{+parent}/saasReleases",
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListSaasReleasesResponse"
                  },
                  "httpMethod": "GET",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "pageSize": {
                      "type": "integer",
                      "location": "query",
                      "description": "The maximum number of saas releases to send per page.",
                      "format": "int32"
                    },
                    "parent": {
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the saas releases.",
                      "location": "path",
                      "type": "string",
                      "required": true
                    },
                    "filter": {
                      "location": "query",
                      "type": "string",
                      "description": "Filter the list as specified in https://google.aip.dev/160."
                    },
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "location": "query",
                      "type": "string",
                      "description": "Order results as specified in https://google.aip.dev/132."
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saasReleases",
                  "description": "Retrieve a collection of saas releases."
                }
              }
            },
            "unitGroupOperations": {
              "methods": {
                "patch": {
                  "id": "saasservicemgmt.projects.locations.unitGroupOperations.patch",
                  "path": "v1beta1/{+name}",
                  "request": {
                    "$ref": "UnitGroupOperation"
                  },
                  "response": {
                    "$ref": "UnitGroupOperation"
                  },
                  "parameters": {
                    "requestId": {
                      "location": "query",
                      "description": "Optional. An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    },
                    "updateMask": {
                      "format": "google-fieldmask",
                      "description": "Optional. Field mask is used to specify the fields to be overwritten in the UnitGroupOperation resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the UnitGroupOperation will be overwritten.",
                      "type": "string",
                      "location": "query"
                    },
                    "validateOnly": {
                      "description": "Optional. If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitGroupOperations/[^/]+$",
                      "location": "path",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitGroupOperations/{unitGroupOperation}\"",
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "description": "Update a single unit group operation.",
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroupOperations/{unitGroupOperationsId}",
                  "httpMethod": "PATCH"
                },
                "create": {
                  "parameters": {
                    "unitGroupOperationId": {
                      "type": "string",
                      "location": "query",
                      "description": "Required. The ID value for the new unit group operation."
                    },
                    "validateOnly": {
                      "location": "query",
                      "description": "Optional. If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    },
                    "parent": {
                      "description": "Required. The parent of the unit group operation.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+parent}/unitGroupOperations",
                  "description": "Create a new unit group operation.",
                  "response": {
                    "$ref": "UnitGroupOperation"
                  },
                  "httpMethod": "POST",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "saasservicemgmt.projects.locations.unitGroupOperations.create",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroupOperations",
                  "request": {
                    "$ref": "UnitGroupOperation"
                  }
                },
                "list": {
                  "httpMethod": "GET",
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of unit group operations to send per page.",
                      "location": "query",
                      "format": "int32",
                      "type": "integer"
                    },
                    "orderBy": {
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string",
                      "location": "query"
                    },
                    "pageToken": {
                      "location": "query",
                      "type": "string",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page."
                    },
                    "parent": {
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the unit group operation.",
                      "location": "path",
                      "required": true
                    },
                    "filter": {
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "response": {
                    "$ref": "ListUnitGroupOperationsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "description": "Retrieve a collection of unit group operations.",
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1beta1/{+parent}/unitGroupOperations",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroupOperations",
                  "id": "saasservicemgmt.projects.locations.unitGroupOperations.list"
                },
                "get": {
                  "parameters": {
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitGroupOperations/[^/]+$",
                      "location": "path",
                      "description": "Required. The resource name of the resource within a service.",
                      "type": "string"
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroupOperations/{unitGroupOperationsId}",
                  "httpMethod": "GET",
                  "id": "saasservicemgmt.projects.locations.unitGroupOperations.get",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "description": "Retrieve a single unit group operation.",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "UnitGroupOperation"
                  },
                  "path": "v1beta1/{+name}"
                },
                "delete": {
                  "httpMethod": "DELETE",
                  "path": "v1beta1/{+name}",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "location": "path",
                      "required": true,
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitGroupOperations/[^/]+$",
                      "type": "string"
                    },
                    "validateOnly": {
                      "description": "Optional. If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "etag": {
                      "type": "string",
                      "description": "Optional. The etag known to the client for the expected state of the unit group operation. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the unit group operation. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "location": "query"
                    },
                    "requestId": {
                      "location": "query",
                      "description": "Optional. An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    }
                  },
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Delete a single unit group operation.",
                  "id": "saasservicemgmt.projects.locations.unitGroupOperations.delete",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitGroupOperations/{unitGroupOperationsId}"
                }
              }
            },
            "saas": {
              "methods": {
                "list": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saas",
                  "id": "saasservicemgmt.projects.locations.saas.list",
                  "path": "v1beta1/{+parent}/saas",
                  "parameterOrder": [
                    "parent"
                  ],
                  "description": "Retrieve a collection of saas.",
                  "response": {
                    "$ref": "ListSaasResponse"
                  },
                  "httpMethod": "GET",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "parameters": {
                    "parent": {
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the saas."
                    },
                    "filter": {
                      "location": "query",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string"
                    },
                    "pageToken": {
                      "location": "query",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "type": "string"
                    },
                    "pageSize": {
                      "type": "integer",
                      "location": "query",
                      "format": "int32",
                      "description": "The maximum number of saas to send per page."
                    },
                    "orderBy": {
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "location": "query",
                      "type": "string"
                    }
                  }
                },
                "delete": {
                  "httpMethod": "DELETE",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "description": "Delete a single saas.",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the resource within a service.",
                      "type": "string",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/saas/[^/]+$",
                      "required": true
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    },
                    "etag": {
                      "description": "The etag known to the client for the expected state of the saas. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the saas. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "location": "query",
                      "type": "string"
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.saas.delete",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saas/{saasId}"
                },
                "create": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "Saas"
                  },
                  "description": "Create a new saas.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+parent}/saas",
                  "response": {
                    "$ref": "Saas"
                  },
                  "id": "saasservicemgmt.projects.locations.saas.create",
                  "httpMethod": "POST",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saas",
                  "parameters": {
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "required": true,
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "type": "string",
                      "description": "Required. The parent of the saas."
                    },
                    "saasId": {
                      "type": "string",
                      "location": "query",
                      "description": "Required. The ID value for the new saas."
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    }
                  }
                },
                "patch": {
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    },
                    "name": {
                      "location": "path",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/saas/{saas}\"",
                      "required": true,
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/saas/[^/]+$"
                    },
                    "updateMask": {
                      "format": "google-fieldmask",
                      "type": "string",
                      "description": "Field mask is used to specify the fields to be overwritten in the Saas resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Saas will be overwritten.",
                      "location": "query"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "Saas"
                  },
                  "httpMethod": "PATCH",
                  "path": "v1beta1/{+name}",
                  "response": {
                    "$ref": "Saas"
                  },
                  "id": "saasservicemgmt.projects.locations.saas.patch",
                  "description": "Update a single saas.",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saas/{saasId}",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                },
                "get": {
                  "httpMethod": "GET",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/saas/{saasId}",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "path": "v1beta1/{+name}",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/saas/[^/]+$",
                      "description": "Required. The resource name of the resource within a service.",
                      "required": true,
                      "location": "path"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "id": "saasservicemgmt.projects.locations.saas.get",
                  "description": "Retrieve a single saas.",
                  "response": {
                    "$ref": "Saas"
                  }
                }
              }
            },
            "flagAttributes": {
              "methods": {
                "create": {
                  "request": {
                    "$ref": "FlagAttribute"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "saasservicemgmt.projects.locations.flagAttributes.create",
                  "description": "Create a new flag attribute.",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagAttributes",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+parent}/flagAttributes",
                  "parameters": {
                    "validateOnly": {
                      "type": "boolean",
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "flagAttributeId": {
                      "type": "string",
                      "location": "query",
                      "description": "Required. The ID value for the new flag attribute."
                    },
                    "parent": {
                      "description": "Required. The parent of the flag attribute.",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    }
                  },
                  "response": {
                    "$ref": "FlagAttribute"
                  },
                  "httpMethod": "POST"
                },
                "list": {
                  "description": "Retrieve a collection of flag attributes.",
                  "response": {
                    "$ref": "ListFlagAttributesResponse"
                  },
                  "parameters": {
                    "pageToken": {
                      "type": "string",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query"
                    },
                    "orderBy": {
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string",
                      "location": "query"
                    },
                    "pageSize": {
                      "format": "int32",
                      "location": "query",
                      "type": "integer",
                      "description": "The maximum number of flag attributes to send per page."
                    },
                    "parent": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the flag attribute.",
                      "location": "path",
                      "type": "string"
                    },
                    "filter": {
                      "location": "query",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string"
                    }
                  },
                  "path": "v1beta1/{+parent}/flagAttributes",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "httpMethod": "GET",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagAttributes",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "saasservicemgmt.projects.locations.flagAttributes.list"
                },
                "patch": {
                  "parameters": {
                    "name": {
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flagAttributes/{flag_attribute_id}\"",
                      "location": "path",
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagAttributes/[^/]+$",
                      "required": true
                    },
                    "updateMask": {
                      "location": "query",
                      "format": "google-fieldmask",
                      "description": "Field mask is used to specify the fields to be overwritten in the FlagAttribute resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the FlagAttribute will be overwritten.",
                      "type": "string"
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    }
                  },
                  "path": "v1beta1/{+name}",
                  "response": {
                    "$ref": "FlagAttribute"
                  },
                  "httpMethod": "PATCH",
                  "request": {
                    "$ref": "FlagAttribute"
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagAttributes/{flagAttributesId}",
                  "id": "saasservicemgmt.projects.locations.flagAttributes.patch",
                  "description": "Update a single flag attribute.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                },
                "delete": {
                  "path": "v1beta1/{+name}",
                  "httpMethod": "DELETE",
                  "id": "saasservicemgmt.projects.locations.flagAttributes.delete",
                  "response": {
                    "$ref": "Empty"
                  },
                  "parameters": {
                    "etag": {
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the flag attribute. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the flag attribute. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "location": "query"
                    },
                    "validateOnly": {
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    },
                    "name": {
                      "type": "string",
                      "required": true,
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagAttributes/[^/]+$",
                      "description": "Required. The resource name of the resource within a service."
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "description": "Delete a single flag attribute.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagAttributes/{flagAttributesId}"
                },
                "get": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagAttributes/{flagAttributesId}",
                  "description": "Retrieve a single flag attribute.",
                  "id": "saasservicemgmt.projects.locations.flagAttributes.get",
                  "response": {
                    "$ref": "FlagAttribute"
                  },
                  "path": "v1beta1/{+name}",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "name": {
                      "required": true,
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path",
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagAttributes/[^/]+$"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "httpMethod": "GET"
                }
              }
            },
            "releases": {
              "methods": {
                "delete": {
                  "parameterOrder": [
                    "name"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/releases/{releasesId}",
                  "description": "Delete a single release.",
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.releases.delete",
                  "response": {
                    "$ref": "Empty"
                  },
                  "parameters": {
                    "etag": {
                      "type": "string",
                      "location": "query",
                      "description": "The etag known to the client for the expected state of the release. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the release. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not."
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    },
                    "name": {
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/releases/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service."
                    }
                  },
                  "httpMethod": "DELETE"
                },
                "patch": {
                  "response": {
                    "$ref": "Release"
                  },
                  "parameters": {
                    "validateOnly": {
                      "location": "query",
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "requestId": {
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string"
                    },
                    "name": {
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/releases/{release}\"",
                      "required": true,
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/releases/[^/]+$",
                      "type": "string"
                    },
                    "updateMask": {
                      "format": "google-fieldmask",
                      "location": "query",
                      "type": "string",
                      "description": "Field mask is used to specify the fields to be overwritten in the Release resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Release will be overwritten."
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "httpMethod": "PATCH",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/releases/{releasesId}",
                  "description": "Update a single release.",
                  "request": {
                    "$ref": "Release"
                  },
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.releases.patch"
                },
                "create": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/releases",
                  "id": "saasservicemgmt.projects.locations.releases.create",
                  "description": "Create a new release.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+parent}/releases",
                  "response": {
                    "$ref": "Release"
                  },
                  "parameters": {
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string",
                      "location": "query"
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    },
                    "parent": {
                      "description": "Required. The parent of the release.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "type": "string",
                      "required": true,
                      "location": "path"
                    },
                    "releaseId": {
                      "location": "query",
                      "type": "string",
                      "description": "Required. The ID value for the new release."
                    }
                  },
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "Release"
                  }
                },
                "list": {
                  "parameters": {
                    "orderBy": {
                      "type": "string",
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132."
                    },
                    "parent": {
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the release."
                    },
                    "filter": {
                      "type": "string",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "location": "query"
                    },
                    "pageToken": {
                      "type": "string",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query"
                    },
                    "pageSize": {
                      "location": "query",
                      "type": "integer",
                      "format": "int32",
                      "description": "The maximum number of releases to send per page."
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "response": {
                    "$ref": "ListReleasesResponse"
                  },
                  "path": "v1beta1/{+parent}/releases",
                  "httpMethod": "GET",
                  "parameterOrder": [
                    "parent"
                  ],
                  "description": "Retrieve a collection of releases.",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/releases",
                  "id": "saasservicemgmt.projects.locations.releases.list"
                },
                "get": {
                  "httpMethod": "GET",
                  "parameterOrder": [
                    "name"
                  ],
                  "path": "v1beta1/{+name}",
                  "parameters": {
                    "name": {
                      "pattern": "^projects/[^/]+/locations/[^/]+/releases/[^/]+$",
                      "type": "string",
                      "required": true,
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path"
                    }
                  },
                  "response": {
                    "$ref": "Release"
                  },
                  "id": "saasservicemgmt.projects.locations.releases.get",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "description": "Retrieve a single release.",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/releases/{releasesId}"
                }
              }
            },
            "unitKinds": {
              "methods": {
                "list": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "description": "Retrieve a collection of unit kinds.",
                  "httpMethod": "GET",
                  "path": "v1beta1/{+parent}/unitKinds",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitKinds",
                  "parameters": {
                    "orderBy": {
                      "type": "string",
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132."
                    },
                    "parent": {
                      "required": true,
                      "description": "Required. The parent of the unit kind.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "type": "string"
                    },
                    "filter": {
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string",
                      "location": "query"
                    },
                    "pageToken": {
                      "type": "string",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query"
                    },
                    "pageSize": {
                      "location": "query",
                      "description": "The maximum number of unit kinds to send per page.",
                      "format": "int32",
                      "type": "integer"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListUnitKindsResponse"
                  },
                  "id": "saasservicemgmt.projects.locations.unitKinds.list"
                },
                "create": {
                  "request": {
                    "$ref": "UnitKind"
                  },
                  "response": {
                    "$ref": "UnitKind"
                  },
                  "description": "Create a new unit kind.",
                  "id": "saasservicemgmt.projects.locations.unitKinds.create",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "description": "Required. The parent of the unit kind.",
                      "type": "string",
                      "location": "path"
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    },
                    "unitKindId": {
                      "type": "string",
                      "location": "query",
                      "description": "Required. The ID value for the new unit kind."
                    }
                  },
                  "path": "v1beta1/{+parent}/unitKinds",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitKinds",
                  "httpMethod": "POST"
                },
                "get": {
                  "path": "v1beta1/{+name}",
                  "description": "Retrieve a single unit kind.",
                  "parameters": {
                    "name": {
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitKinds/[^/]+$",
                      "location": "path",
                      "required": true
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitKinds/{unitKindsId}",
                  "httpMethod": "GET",
                  "parameterOrder": [
                    "name"
                  ],
                  "id": "saasservicemgmt.projects.locations.unitKinds.get",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "response": {
                    "$ref": "UnitKind"
                  }
                },
                "patch": {
                  "httpMethod": "PATCH",
                  "response": {
                    "$ref": "UnitKind"
                  },
                  "path": "v1beta1/{+name}",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query",
                      "type": "string"
                    },
                    "name": {
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitKinds/{unitKind}\"",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitKinds/[^/]+$",
                      "location": "path",
                      "type": "string"
                    },
                    "updateMask": {
                      "location": "query",
                      "description": "Field mask is used to specify the fields to be overwritten in the UnitKind resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the UnitKind will be overwritten.",
                      "format": "google-fieldmask",
                      "type": "string"
                    },
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitKinds/{unitKindsId}",
                  "request": {
                    "$ref": "UnitKind"
                  },
                  "description": "Update a single unit kind.",
                  "id": "saasservicemgmt.projects.locations.unitKinds.patch"
                },
                "delete": {
                  "description": "Delete a single unit kind.",
                  "httpMethod": "DELETE",
                  "path": "v1beta1/{+name}",
                  "response": {
                    "$ref": "Empty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "id": "saasservicemgmt.projects.locations.unitKinds.delete",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the resource within a service.",
                      "location": "path",
                      "required": true,
                      "type": "string",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitKinds/[^/]+$"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "location": "query"
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "etag": {
                      "location": "query",
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the unit kind. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the unit kind. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not."
                    }
                  },
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitKinds/{unitKindsId}",
                  "parameterOrder": [
                    "name"
                  ]
                }
              }
            },
            "unitOperations": {
              "methods": {
                "list": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitOperations",
                  "description": "Retrieve a collection of unit operations.",
                  "path": "v1beta1/{+parent}/unitOperations",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "id": "saasservicemgmt.projects.locations.unitOperations.list",
                  "response": {
                    "$ref": "ListUnitOperationsResponse"
                  },
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent of the unit operation.",
                      "location": "path",
                      "type": "string",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+$"
                    },
                    "filter": {
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "location": "query",
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "type": "string"
                    },
                    "pageSize": {
                      "type": "integer",
                      "format": "int32",
                      "location": "query",
                      "description": "The maximum number of unit operations to send per page."
                    },
                    "pageToken": {
                      "type": "string",
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "location": "query"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "httpMethod": "GET"
                },
                "create": {
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "UnitOperation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "path": "v1beta1/{+parent}/unitOperations",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitOperations",
                  "parameters": {
                    "unitOperationId": {
                      "type": "string",
                      "description": "Required. The ID value for the new unit operation.",
                      "location": "query"
                    },
                    "requestId": {
                      "type": "string",
                      "location": "query",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    },
                    "parent": {
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "description": "Required. The parent of the unit operation.",
                      "type": "string"
                    },
                    "validateOnly": {
                      "location": "query",
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    }
                  },
                  "id": "saasservicemgmt.projects.locations.unitOperations.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "UnitOperation"
                  },
                  "description": "Create a new unit operation."
                },
                "get": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "response": {
                    "$ref": "UnitOperation"
                  },
                  "path": "v1beta1/{+name}",
                  "httpMethod": "GET",
                  "description": "Retrieve a single unit operation.",
                  "id": "saasservicemgmt.projects.locations.unitOperations.get",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitOperations/{unitOperationsId}",
                  "parameters": {
                    "name": {
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitOperations/[^/]+$",
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service.",
                      "required": true,
                      "location": "path"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ]
                },
                "patch": {
                  "path": "v1beta1/{+name}",
                  "request": {
                    "$ref": "UnitOperation"
                  },
                  "description": "Update a single unit operation.",
                  "response": {
                    "$ref": "UnitOperation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameters": {
                    "validateOnly": {
                      "location": "query",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean"
                    },
                    "name": {
                      "type": "string",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/unitOperations/{unitOperation}\"",
                      "location": "path",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitOperations/[^/]+$",
                      "required": true
                    },
                    "updateMask": {
                      "type": "string",
                      "description": "Field mask is used to specify the fields to be overwritten in the UnitOperation resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the UnitOperation will be overwritten.",
                      "format": "google-fieldmask",
                      "location": "query"
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    }
                  },
                  "id": "saasservicemgmt.projects.locations.unitOperations.patch",
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitOperations/{unitOperationsId}",
                  "httpMethod": "PATCH"
                },
                "delete": {
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/unitOperations/{unitOperationsId}",
                  "id": "saasservicemgmt.projects.locations.unitOperations.delete",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the resource within a service.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/unitOperations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    },
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query",
                      "type": "boolean"
                    },
                    "etag": {
                      "type": "string",
                      "description": "The etag known to the client for the expected state of the unit operation. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the unit operation. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.",
                      "location": "query"
                    }
                  },
                  "description": "Delete a single unit operation.",
                  "path": "v1beta1/{+name}",
                  "httpMethod": "DELETE",
                  "response": {
                    "$ref": "Empty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ]
                }
              }
            },
            "flagReleases": {
              "methods": {
                "create": {
                  "parameters": {
                    "validateOnly": {
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "location": "query"
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string",
                      "location": "query"
                    },
                    "flagReleaseId": {
                      "type": "string",
                      "location": "query",
                      "description": "Required. The ID value for the new flag release."
                    },
                    "parent": {
                      "type": "string",
                      "description": "Required. The parent of the flag release.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "required": true
                    }
                  },
                  "response": {
                    "$ref": "FlagRelease"
                  },
                  "id": "saasservicemgmt.projects.locations.flagReleases.create",
                  "httpMethod": "POST",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagReleases",
                  "path": "v1beta1/{+parent}/flagReleases",
                  "description": "Create a new flag release.",
                  "request": {
                    "$ref": "FlagRelease"
                  },
                  "parameterOrder": [
                    "parent"
                  ]
                },
                "get": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagReleases/{flagReleasesId}",
                  "path": "v1beta1/{+name}",
                  "parameterOrder": [
                    "name"
                  ],
                  "description": "Retrieve a single flag release.",
                  "response": {
                    "$ref": "FlagRelease"
                  },
                  "parameters": {
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagReleases/[^/]+$",
                      "location": "path",
                      "type": "string",
                      "description": "Required. The resource name of the resource within a service."
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "httpMethod": "GET",
                  "id": "saasservicemgmt.projects.locations.flagReleases.get"
                },
                "patch": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "validateOnly": {
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes.",
                      "type": "boolean",
                      "location": "query"
                    },
                    "requestId": {
                      "location": "query",
                      "type": "string",
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000)."
                    },
                    "name": {
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagReleases/[^/]+$",
                      "description": "Identifier. The resource name (full URI of the resource) following the standard naming scheme: \"projects/{project}/locations/{location}/flagReleases/{flag_release_id}\"",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    },
                    "updateMask": {
                      "location": "query",
                      "format": "google-fieldmask",
                      "description": "Field mask is used to specify the fields to be overwritten in the FlagRelease resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the FlagRelease will be overwritten.",
                      "type": "string"
                    }
                  },
                  "response": {
                    "$ref": "FlagRelease"
                  },
                  "httpMethod": "PATCH",
                  "id": "saasservicemgmt.projects.locations.flagReleases.patch",
                  "path": "v1beta1/{+name}",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagReleases/{flagReleasesId}",
                  "description": "Update a single flag release.",
                  "request": {
                    "$ref": "FlagRelease"
                  }
                },
                "list": {
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagReleases",
                  "id": "saasservicemgmt.projects.locations.flagReleases.list",
                  "description": "Retrieve a collection of flag releases.",
                  "parameterOrder": [
                    "parent"
                  ],
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "ListFlagReleasesResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write",
                    "https://www.googleapis.com/auth/saasservicemgmt.readonly"
                  ],
                  "parameters": {
                    "parent": {
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "type": "string",
                      "required": true,
                      "location": "path",
                      "description": "Required. The parent of the flag release."
                    },
                    "filter": {
                      "location": "query",
                      "description": "Filter the list as specified in https://google.aip.dev/160.",
                      "type": "string"
                    },
                    "pageSize": {
                      "location": "query",
                      "format": "int32",
                      "type": "integer",
                      "description": "The maximum number of flag releases to send per page."
                    },
                    "pageToken": {
                      "description": "The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.",
                      "type": "string",
                      "location": "query"
                    },
                    "orderBy": {
                      "type": "string",
                      "description": "Order results as specified in https://google.aip.dev/132.",
                      "location": "query"
                    }
                  },
                  "path": "v1beta1/{+parent}/flagReleases"
                },
                "delete": {
                  "path": "v1beta1/{+name}",
                  "id": "saasservicemgmt.projects.locations.flagReleases.delete",
                  "parameters": {
                    "etag": {
                      "type": "string",
                      "location": "query",
                      "description": "The etag known to the client for the expected state of the flag release. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the flag release. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not."
                    },
                    "requestId": {
                      "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
                      "type": "string",
                      "location": "query"
                    },
                    "validateOnly": {
                      "location": "query",
                      "type": "boolean",
                      "description": "If \"validate_only\" is set to true, the service will try to validate that this request would succeed, but will not actually make changes."
                    },
                    "name": {
                      "location": "path",
                      "description": "Required. The resource name of the resource within a service.",
                      "required": true,
                      "pattern": "^projects/[^/]+/locations/[^/]+/flagReleases/[^/]+$",
                      "type": "string"
                    }
                  },
                  "httpMethod": "DELETE",
                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/flagReleases/{flagReleasesId}",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/saasservicemgmt.read-write"
                  ],
                  "description": "Delete a single flag release.",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "basePath": ""
}
