{ "triggerConfigs": [{ "label": "API Trigger", "startTasks": [{ "taskId": "4" }], "properties": { "Trigger name": "test-custom-curation_API_1" }, "triggerType": "API", "triggerNumber": "1", "triggerId": "api_trigger/test-custom-curation_API_1", "position": { "x": 140, "y": 92 }, "inputVariables": { "names": ["apiData"] }, "outputVariables": { "names": ["curatedAPIMetadata", "apiData"] } }, { "label": "Enrich API metadata with spec", "startTasks": [{ "taskId": "6" }], "properties": { "Trigger name": "test-curate-1_Private_1" }, "triggerType": "PRIVATE_TRIGGER", "triggerNumber": "2", "triggerId": "private_trigger/test-curate-1_Private_1", "position": { "x": 620, "y": 92 } }], "taskConfigs": [{ "task": "JavaScriptTask", "taskId": "2", "parameters": { "javaScriptEngine": { "key": "javaScriptEngine", "value": { "stringValue": "V8" } }, "script": { "key": "script", "value": { "stringValue": "/**\n * Processes and curates API metadata with spec contents.\n * @param {object} event The event object containing API data and spec content.\n */\nfunction executeScript(event) {\n let apiMetadata \u003d event.getParameter(\u0027apiMetadata\u0027);\n let specContent \u003d event.getParameter(\u0027specContent\u0027);\n\n // Initialize curatedAPIMetadata directly from apiMetadata\n const curatedAPIMetadata \u003d { ...apiMetadata\n };\n\n // Construct the \u0027spec\u0027 object efficiently\n const spec \u003d {\n displayName: \"open-api-spec\",\n specType: {\n enumValues: {\n values: [{\n id: \"openapi\"\n }]\n }\n },\n contents: {\n mimeType: \"application/yaml\",\n contents: specContent,\n },\n };\n\n // Create the specMetadata object\n const specMetadata \u003d {\n // Ensure originalUpdateTime exists before assigning, provide a fallback if needed\n originalModifiedTime: curatedAPIMetadata.originalUpdateTime || new Date().toISOString(),\n spec: spec,\n };\n\n // Initialize or update the specs array within the first version\n // This assumes versions[0] always exists. Add checks if it might not.\n if (!curatedAPIMetadata.versions || curatedAPIMetadata.versions.length \u003d\u003d\u003d 0) {\n curatedAPIMetadata.versions \u003d [{\n specs: []\n }];\n } else if (!curatedAPIMetadata.versions[0].specs) {\n curatedAPIMetadata.versions[0].specs \u003d [];\n }\n\n curatedAPIMetadata.versions[0].specs.push(specMetadata);\n\n // Set the modified apiData parameter\n event.setParameter(\u0027curatedAPIMetadata\u0027, curatedAPIMetadata);\n}" } } }, "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "Enrich API Metadata with spec contents", "externalTaskType": "ERROR_TASK", "position": { "x": 416, "y": 620 } }, { "task": "GenericConnectorTask", "taskId": "3", "parameters": { "connectorInputPayload": { "key": "connectorInputPayload", "value": { "stringValue": "$`Task_3_connectorInputPayload`$" } }, "authOverrideEnabled": { "key": "authOverrideEnabled", "value": { "booleanValue": false } }, "connectionName": { "key": "connectionName", "value": { "stringValue": "projects/tutorial-project/locations/us-central1/connections/fetch-specs" } }, "connectorOutputPayload": { "key": "connectorOutputPayload", "value": { "stringValue": "$`Task_3_connectorOutputPayload`$" } }, "operation": { "key": "operation", "value": { "stringValue": "EXECUTE_ACTION" } }, "connectionVersion": { "key": "connectionVersion", "value": { "stringValue": "projects/tutorial-project/locations/global/providers/gcp/connectors/gcs/versions/1" } }, "actionName": { "key": "actionName", "value": { "stringValue": "DownloadObject" } } }, "nextTasks": [{ "taskId": "7", "condition": "$`ErrorInfo`.code$ \u003d 0", "displayName": "Fetched spec successfully" }, { "taskId": "9", "condition": "$`ErrorInfo`.code$ !\u003d 0", "displayName": "Failed to fetch spec" }], "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "Fetch spec from GCS", "externalTaskType": "ERROR_TASK", "position": { "x": 620, "y": 364 }, "conditionalFailurePolicies": { "defaultFailurePolicy": { "retryStrategy": "IGNORE" } } }, { "task": "SubWorkflowForEachLoopV2Task", "taskId": "4", "parameters": { "iterationElementMapping": { "key": "iterationElementMapping", "value": { "stringValue": "apiMetadata" } }, "triggerId": { "key": "triggerId", "value": { "stringValue": "private_trigger/test-curate-1_Private_1" } }, "aggregatorParameterMapping": { "key": "aggregatorParameterMapping", "value": { "jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.ParameterMap\",\n \"entries\": [{\n \"key\": {\n \"literalValue\": {\n \"stringValue\": \"curatedAPIMetadata\"\n }\n },\n \"value\": {\n \"literalValue\": {\n \"stringValue\": \"curatedAPIMetadataList\"\n }\n }\n }]\n}" } }, "loopMetadata": { "key": "loopMetadata", "value": { "stringArray": { "stringValues": ["$`Task_4_loopMetadata`$"] } } }, "disableEucPropagation": { "key": "disableEucPropagation", "value": { "booleanValue": false } }, "listToIterate": { "key": "listToIterate", "value": { "stringValue": "$apiData.apiMetadataList.apiMetadata$" } }, "workflowName": { "key": "workflowName", "value": { "stringValue": "enrich-with-spec-yaml" } }, "requestParameterMapping": { "key": "requestParameterMapping" }, "overrideParameterMapping": { "key": "overrideParameterMapping" } }, "nextTasks": [{ "taskId": "5" }], "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "For Each API", "externalTaskType": "NORMAL_TASK", "position": { "x": 140, "y": 228 } }, { "task": "FieldMappingTask", "taskId": "5", "parameters": { "FieldMappingConfigTaskParameterKey": { "key": "FieldMappingConfigTaskParameterKey", "value": { "jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n \"mappedFields\": [{\n \"inputField\": {\n \"fieldType\": \"JSON_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"referenceValue\": \"$apiData$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"SET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"referenceValue\": \"$curatedAPIMetadataList$\"\n }\n }, {\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"apiMetadataList.apiMetadata\"\n }\n }\n }]\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$apiData$\",\n \"fieldType\": \"JSON_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }]\n}" } } }, "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "Set curated API data", "externalTaskType": "NORMAL_TASK", "position": { "x": 140, "y": 364 } }, { "task": "FieldMappingTask", "taskId": "6", "parameters": { "FieldMappingConfigTaskParameterKey": { "key": "FieldMappingConfigTaskParameterKey", "value": { "jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n \"mappedFields\": [{\n \"inputField\": {\n \"fieldType\": \"JSON_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"referenceValue\": \"$`Task_3_connectorInputPayload`$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"SET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"referenceValue\": \"$apiMetadata$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"api\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"displayName\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"TO_STRING\"\n }\n }\n }, {\n \"functionType\": {\n \"stringFunction\": {\n \"functionName\": \"CONCAT\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \".yaml\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"stringFunction\": {\n \"functionName\": \"TO_LOWERCASE\"\n }\n }\n }]\n }, {\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"ObjectFilePath\"\n }\n }\n }]\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$`Task_3_connectorInputPayload`$\",\n \"fieldType\": \"JSON_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }]\n}" } } }, "nextTasks": [{ "taskId": "3" }], "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "Construct GCS connector payload", "externalTaskType": "ERROR_TASK", "position": { "x": 620, "y": 228 } }, { "task": "FieldMappingTask", "taskId": "7", "parameters": { "FieldMappingConfigTaskParameterKey": { "key": "FieldMappingConfigTaskParameterKey", "value": { "jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n \"mappedFields\": [{\n \"inputField\": {\n \"fieldType\": \"JSON_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"referenceValue\": \"$`Task_3_connectorOutputPayload`$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_ELEMENT\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"intValue\": \"0\"\n }\n }\n }]\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$gcsResponseTemp$\",\n \"fieldType\": \"JSON_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }, {\n \"inputField\": {\n \"fieldType\": \"STRING_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"referenceValue\": \"$gcsResponseTemp$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"Content\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"TO_STRING\"\n }\n }\n }, {\n \"functionType\": {\n \"stringFunction\": {\n \"functionName\": \"TO_BASE_64\"\n }\n }\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$specContent$\",\n \"fieldType\": \"STRING_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }]\n}" } } }, "nextTasks": [{ "taskId": "2" }], "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "Parse spec contents", "externalTaskType": "ERROR_TASK", "position": { "x": 418, "y": 493 } }, { "task": "JavaScriptTask", "taskId": "9", "parameters": { "javaScriptEngine": { "key": "javaScriptEngine", "value": { "stringValue": "V8" } }, "script": { "key": "script", "value": { "stringValue": "function executeScript(event) {\n // Retrieve the apiData parameter.\n let apiMetadata \u003d event.getParameter(\u0027apiMetadata\u0027);\n\n\n // Set the curated API metadata parameter same as API data.\n event.setParameter(\u0027curatedAPIMetadata\u0027, apiMetadata);\n}" } } }, "taskExecutionStrategy": "WHEN_ALL_SUCCEED", "displayName": "Do not enrich API metadata", "externalTaskType": "ERROR_TASK", "position": { "x": 806, "y": 499 } }], "integrationParameters": [{ "key": "`ExecutionMode`", "dataType": "STRING_VALUE", "defaultValue": { "stringValue": "" }, "displayName": "`ExecutionMode`", "isTransient": true }, { "key": "`ErrorInfo`", "dataType": "JSON_VALUE", "defaultValue": { "jsonValue": "{\n \"message\": \"\",\n \"code\": 0.0\n}" }, "displayName": "`ErrorInfo`", "isTransient": true, "jsonSchema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"type\": \"number\"\n },\n \"message\": {\n \"type\": \"string\"\n }\n }\n}" }, { "key": "`ExecutionId`", "dataType": "STRING_VALUE", "defaultValue": { "stringValue": "" }, "displayName": "`ExecutionId`", "isTransient": true }, { "key": "`IntegrationName`", "dataType": "STRING_VALUE", "defaultValue": { "stringValue": "" }, "displayName": "`IntegrationName`", "isTransient": true }, { "key": "`Region`", "dataType": "STRING_VALUE", "defaultValue": { "stringValue": "" }, "displayName": "`Region`", "isTransient": true }, { "key": "`ProjectId`", "dataType": "STRING_VALUE", "defaultValue": { "stringValue": "" }, "displayName": "`ProjectId`", "isTransient": true }, { "key": "envKey", "dataType": "STRING_VALUE", "defaultValue": { "stringValue": "projects/apihub-bugbash-march-31/locations/us-west1/attributes/plugin-system-apigee-x-and-hybrid-environment" }, "displayName": "envKey" }, { "key": "`Task_3_connectorOutputPayload`", "dataType": "JSON_VALUE", "displayName": "`Task_3_connectorOutputPayload`", "isTransient": true, "producer": "1_3", "jsonSchema": "{\n \"type\": \"array\",\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n}" }, { "key": "`Task_4_loopMetadata`", "dataType": "JSON_VALUE", "displayName": "`Task_4_loopMetadata`", "isTransient": true, "producer": "1_4", "jsonSchema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"sub_integration_execution_ids\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"current_iteration_count\": {\n \"type\": \"number\"\n },\n \"failure_message\": {\n \"type\": \"string\"\n },\n \"failure_location\": {\n \"type\": \"string\"\n },\n \"current_element\": {\n \"type\": [\"string\", \"number\", \"object\", \"array\"]\n }\n }\n}" }, { "key": "curatedAPIMetadataList", "dataType": "JSON_VALUE", "displayName": "curatedAPIMetadataList" }, { "key": "`Task_3_connectorInputPayload`", "dataType": "JSON_VALUE", "defaultValue": { "jsonValue": "{\n \"Bucket\": \"apihub-specs\",\n \"ObjectFilePath\": \"\"\n}" }, "displayName": "`Task_3_connectorInputPayload`", "producer": "1_3", "jsonSchema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"Bucket\": {\n \"type\": \"string\",\n \"description\": \"Bucket name where the object is located.\"\n },\n \"ObjectFilePath\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"Object name for the object that should be retrieved. If not specified, all the objects from the specified bucket will be retrieved.\"\n },\n \"HasBytes\": {\n \"type\": [\"boolean\", \"null\"],\n \"description\": \"Whether to download content as bytes.\",\n \"default\": false\n },\n \"UpdatedEndDate\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"The end of the date range to download objects. If not specified, objects will be downloaded from the specified UpdatedStartDate until the present day.\"\n },\n \"UpdatedStartDate\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"The start of the date range to download objects. If not specified, objects will be downloaded from the beginning of the time until the UpdatedEndDate.\"\n }\n },\n \"required\": [\"Bucket\"]\n}" }, { "key": "specContent", "dataType": "STRING_VALUE", "displayName": "specContent" }, { "key": "gcsResponseTemp", "dataType": "JSON_VALUE", "displayName": "gcsResponseTemp" }, { "key": "apiMetadata", "dataType": "JSON_VALUE", "displayName": "apiMetadata", "jsonSchema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"versions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"deployments\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"originalCreateTime\": {\n \"type\": \"string\"\n },\n \"originalUpdateTime\": {\n \"type\": \"string\"\n },\n \"originalId\": {\n \"type\": \"string\"\n },\n \"deployment\": {\n \"type\": \"object\",\n \"properties\": {\n \"deploymentType\": {\n \"type\": \"object\",\n \"properties\": {\n \"attribute\": {\n \"type\": \"string\"\n },\n \"enumValues\": {\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n },\n \"endpoints\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"displayName\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"attributes\": {\n \"type\": \"object\",\n \"properties\": {\n \"projects/tutorial-project/locations/us-central1/attributes/plugin-system-apigee-x-and-hybrid-environment\": {\n \"type\": \"object\",\n \"properties\": {\n \"stringValues\": {\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"attribute\": {\n \"type\": \"string\"\n }\n }\n },\n \"projects/tutorial-project/locations/us-central1/attributes/plugin-system-apigee-x-and-hybrid-organization\": {\n \"type\": \"object\",\n \"properties\": {\n \"stringValues\": {\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"attribute\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"resourceUri\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"originalCreateTime\": {\n \"type\": \"string\"\n },\n \"originalUpdateTime\": {\n \"type\": \"string\"\n },\n \"originalId\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"object\",\n \"properties\": {\n \"displayName\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"originalUpdateTime\": {\n \"type\": \"string\"\n },\n \"api\": {\n \"type\": \"object\",\n \"properties\": {\n \"displayName\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"fingerprint\": {\n \"type\": \"string\"\n }\n }\n },\n \"originalId\": {\n \"type\": \"string\"\n }\n }\n}" }, { "key": "responsePayload", "dataType": "JSON_VALUE", "displayName": "responsePayload", "jsonSchema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"api_metadata_list\": {\n \"type\": \"object\",\n \"properties\": {\n \"api_metadata\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"original_create_time\": {\n \"type\": \"string\"\n },\n \"versions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"specs\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"spec\": {\n \"type\": \"object\",\n \"properties\": {\n \"contents\": {\n \"type\": \"object\",\n \"properties\": {\n \"mime_type\": {\n \"type\": \"string\"\n },\n \"contents\": {\n \"type\": \"string\"\n }\n }\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"spec_type\": {\n \"type\": \"object\",\n \"properties\": {\n \"enum_values\": {\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"display_name\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"attribute\": {\n \"type\": \"string\"\n }\n }\n },\n \"display_name\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"version\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"display_name\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"original_update_time\": {\n \"type\": \"string\"\n },\n \"api\": {\n \"type\": \"object\",\n \"properties\": {\n \"owner\": {\n \"type\": \"object\",\n \"properties\": {\n \"email\": {\n \"type\": \"string\"\n }\n }\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"fingerprint\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"target_user\": {\n \"type\": \"object\",\n \"properties\": {\n \"string_values\": {\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"attribute\": {\n \"type\": \"string\"\n }\n }\n },\n \"display_name\": {\n \"type\": \"string\"\n }\n }\n },\n \"original_id\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n }\n}" }, { "key": "curatedAPIMetadata", "dataType": "JSON_VALUE", "displayName": "curatedAPIMetadata", "inputOutputType": "OUT" }, { "key": "apiData", "dataType": "JSON_VALUE", "displayName": "apiData", "inputOutputType": "IN_OUT", "jsonSchema": "{\n \"description\": \"The API data to be collected.\",\n \"type\": \"object\",\n \"properties\": {\n \"apiMetadataList\": {\n \"description\": \"Optional. The list of API metadata.\",\n \"type\": \"object\",\n \"properties\": {\n \"apiMetadata\": {\n \"description\": \"Required. The list of API metadata.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The API metadata.\",\n \"type\": \"object\",\n \"properties\": {\n \"api\": {\n \"description\": \"Required. The API resource to be pushed to Hub\\u0027s collect layer. The ID of the API resource will be generated by Hub to ensure uniqueness across all APIs across systems.\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"description\": \"Identifier. The name of the API resource in the API Hub.\\n\\nFormat:\\n`projects/{project}/locations/{location}/apis/{api}`\",\n \"x-google-identifier\": true,\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the API resource.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The description of the API resource.\",\n \"type\": \"string\"\n },\n \"documentation\": {\n \"description\": \"Optional. The documentation for the API resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"externalUri\": {\n \"description\": \"Optional. The uri of the externally hosted documentation.\",\n \"type\": \"string\"\n }\n }\n },\n \"owner\": {\n \"description\": \"Optional. Owner details for the API resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"displayName\": {\n \"description\": \"Optional. The name of the owner.\",\n \"type\": \"string\"\n },\n \"email\": {\n \"description\": \"Required. The email of the owner.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\"email\"]\n },\n \"versions\": {\n \"description\": \"Output only. The list of versions present in an API resource.\\nNote: An API resource can be associated with more than 1 version.\\nFormat is\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}`\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"createTime\": {\n \"description\": \"Output only. The time at which the API resource was created.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"updateTime\": {\n \"description\": \"Output only. The time at which the API resource was last updated.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"targetUser\": {\n \"description\": \"Optional. The target users for the API.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-target-user`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"team\": {\n \"description\": \"Optional. The team owning the API.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-team`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"businessUnit\": {\n \"description\": \"Optional. The business unit owning the API.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-business-unit`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"maturityLevel\": {\n \"description\": \"Optional. The maturity level of the API.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-maturity-level`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"attributes\": {\n \"description\": \"Optional. The list of user defined attributes associated with the API resource.\\nThe key is the attribute name. It will be of the format:\\n`projects/{project}/locations/{location}/attributes/{attribute}`.\\nThe value is the attribute values associated with the resource.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"description\": \"The attribute values associated with resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n }\n },\n \"apiStyle\": {\n \"description\": \"Optional. The style of the API.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-api-style`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"selectedVersion\": {\n \"description\": \"Optional. The selected version for an API resource.\\nThis can be used when special handling is needed on client side for\\nparticular version of the API. Format is\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}`\",\n \"type\": \"string\"\n },\n \"apiRequirements\": {\n \"description\": \"Optional. The api requirement doc associated with the API resource. Carinality is 1\\nfor this attribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"fingerprint\": {\n \"description\": \"Optional. Fingerprint of the API resource.\",\n \"type\": \"string\"\n },\n \"sourceMetadata\": {\n \"description\": \"Output only. The list of sources and metadata from the sources of the API resource.\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"description\": \"SourceMetadata represents the metadata for a resource at the source.\",\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstanceActionSource\": {\n \"description\": \"Output only. The source of the resource is a plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstance\": {\n \"description\": \"Output only. The resource name of the source plugin instance.\\nFormat is\\n`projects/{project}/locations/{location}/plugins/{plugin}/instances/{instance}`\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"actionId\": {\n \"description\": \"Output only. The id of the plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"sourceType\": {\n \"description\": \"Output only. The type of the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Source type not specified.\", \"Source type plugin.\"],\n \"enum\": [\"SOURCE_TYPE_UNSPECIFIED\", \"PLUGIN\"]\n },\n \"originalResourceId\": {\n \"description\": \"Output only. The unique identifier of the resource at the source.\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"originalResourceCreateTime\": {\n \"description\": \"Output only. The time at which the resource was created at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalResourceUpdateTime\": {\n \"description\": \"Output only. The time at which the resource was last updated at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n }\n }\n },\n \"apiFunctionalRequirements\": {\n \"description\": \"Optional. The api functional requirements associated with the API resource.\\nCarinality is 1 for this attribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"apiTechnicalRequirements\": {\n \"description\": \"Optional. The api technical requirements associated with the API resource. Carinality\\nis 1 for this attribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n }\n },\n \"required\": [\"displayName\"]\n },\n \"versions\": {\n \"description\": \"Optional. The list of versions present in an API resource.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The metadata associated with a version of the API resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"description\": \"Required. Represents a version of the API resource in API hub. The ID of the version\\nwill be generated by Hub.\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"description\": \"Identifier. The name of the version.\\n\\nFormat:\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}`\",\n \"x-google-identifier\": true,\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the version.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The description of the version.\",\n \"type\": \"string\"\n },\n \"documentation\": {\n \"description\": \"Optional. The documentation of the version.\",\n \"type\": \"object\",\n \"properties\": {\n \"externalUri\": {\n \"description\": \"Optional. The uri of the externally hosted documentation.\",\n \"type\": \"string\"\n }\n }\n },\n \"specs\": {\n \"description\": \"Output only. The specs associated with this version.\\nNote that an API version can be associated with multiple specs.\\nFormat is\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}/specs/{spec}`\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"apiOperations\": {\n \"description\": \"Output only. The operations contained in the API version.\\nThese operations will be added to the version when a new spec is\\nadded or when an existing spec is updated. Format is\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}/operations/{operation}`\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"definitions\": {\n \"description\": \"Output only. The definitions contained in the API version.\\nThese definitions will be added to the version when a new spec is\\nadded or when an existing spec is updated. Format is\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}/definitions/{definition}`\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"deployments\": {\n \"description\": \"Optional. The deployments linked to this API version.\\nNote: A particular API version could be deployed to multiple deployments\\n(for dev deployment, UAT deployment, etc)\\nFormat is\\n`projects/{project}/locations/{location}/deployments/{deployment}`\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"createTime\": {\n \"description\": \"Output only. The time at which the version was created.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"updateTime\": {\n \"description\": \"Output only. The time at which the version was last updated.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"lifecycle\": {\n \"description\": \"Optional. The lifecycle of the API version.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-lifecycle`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"compliance\": {\n \"description\": \"Optional. The compliance associated with the API version.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-compliance`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"accreditation\": {\n \"description\": \"Optional. The accreditations associated with the API version.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-accreditation`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"attributes\": {\n \"description\": \"Optional. The list of user defined attributes associated with the Version resource.\\nThe key is the attribute name. It will be of the format:\\n`projects/{project}/locations/{location}/attributes/{attribute}`.\\nThe value is the attribute values associated with the resource.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"description\": \"The attribute values associated with resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n }\n },\n \"selectedDeployment\": {\n \"description\": \"Optional. The selected deployment for a Version resource.\\nThis can be used when special handling is needed on client side for a\\nparticular deployment linked to the version.\\nFormat is\\n`projects/{project}/locations/{location}/deployments/{deployment}`\",\n \"type\": \"string\"\n },\n \"sourceMetadata\": {\n \"description\": \"Output only. The list of sources and metadata from the sources of the version.\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"description\": \"SourceMetadata represents the metadata for a resource at the source.\",\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstanceActionSource\": {\n \"description\": \"Output only. The source of the resource is a plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstance\": {\n \"description\": \"Output only. The resource name of the source plugin instance.\\nFormat is\\n`projects/{project}/locations/{location}/plugins/{plugin}/instances/{instance}`\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"actionId\": {\n \"description\": \"Output only. The id of the plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"sourceType\": {\n \"description\": \"Output only. The type of the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Source type not specified.\", \"Source type plugin.\"],\n \"enum\": [\"SOURCE_TYPE_UNSPECIFIED\", \"PLUGIN\"]\n },\n \"originalResourceId\": {\n \"description\": \"Output only. The unique identifier of the resource at the source.\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"originalResourceCreateTime\": {\n \"description\": \"Output only. The time at which the resource was created at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalResourceUpdateTime\": {\n \"description\": \"Output only. The time at which the resource was last updated at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n }\n }\n }\n },\n \"required\": [\"displayName\"]\n },\n \"specs\": {\n \"description\": \"Optional. The specs associated with this version.\\nNote that an API version can be associated with multiple specs.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The metadata associated with a spec of the API version.\",\n \"type\": \"object\",\n \"properties\": {\n \"spec\": {\n \"description\": \"Required. The spec resource to be pushed to Hub\\u0027s collect layer. The ID of the spec\\nwill be generated by Hub.\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"description\": \"Identifier. The name of the spec.\\n\\nFormat:\\n`projects/{project}/locations/{location}/apis/{api}/versions/{version}/specs/{spec}`\",\n \"x-google-identifier\": true,\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the spec.\\nThis can contain the file name of the spec.\",\n \"type\": \"string\"\n },\n \"specType\": {\n \"description\": \"Required. The type of spec.\\nThe value should be one of the allowed values defined for\\n`projects/{project}/locations/{location}/attributes/system-spec-type`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI.\\n\\nNote, this field is mandatory if content is provided.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"contents\": {\n \"description\": \"Optional. Input only. The contents of the uploaded spec.\",\n \"writeOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"contents\": {\n \"description\": \"Required. The contents of the spec.\",\n \"type\": \"string\",\n \"format\": \"byte\"\n },\n \"mimeType\": {\n \"description\": \"Required. The mime type of the content for example application/json,\\napplication/yaml, application/wsdl etc.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\"contents\", \"mimeType\"]\n },\n \"details\": {\n \"description\": \"Output only. Details parsed from the spec.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"openApiSpecDetails\": {\n \"description\": \"Output only. Additional details apart from `OperationDetails` parsed from an OpenAPI\\nspec. The OperationDetails parsed from the spec can be obtained by using\\nListAPIOperations method.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"format\": {\n \"description\": \"Output only. The format of the spec.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"SpecFile type unspecified.\", \"OpenAPI Spec v2.0.\", \"OpenAPI Spec v3.0.\", \"OpenAPI Spec v3.1.\"],\n \"enum\": [\"FORMAT_UNSPECIFIED\", \"OPEN_API_SPEC_2_0\", \"OPEN_API_SPEC_3_0\", \"OPEN_API_SPEC_3_1\"]\n },\n \"version\": {\n \"description\": \"Output only. The version in the spec.\\nThis maps to `info.version` in OpenAPI spec.\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"owner\": {\n \"description\": \"Output only. Owner details for the spec.\\nThis maps to `info.contact` in OpenAPI spec.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"displayName\": {\n \"description\": \"Optional. The name of the owner.\",\n \"type\": \"string\"\n },\n \"email\": {\n \"description\": \"Required. The email of the owner.\",\n \"type\": \"string\"\n }\n },\n \"required\": [\"email\"]\n }\n }\n },\n \"description\": {\n \"description\": \"Output only. The description of the spec.\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"sourceUri\": {\n \"description\": \"Optional. The URI of the spec source in case file is uploaded\\nfrom an external version control system.\",\n \"type\": \"string\"\n },\n \"createTime\": {\n \"description\": \"Output only. The time at which the spec was created.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"updateTime\": {\n \"description\": \"Output only. The time at which the spec was last updated.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"lintResponse\": {\n \"description\": \"Optional. The lint response for the spec.\",\n \"type\": \"object\",\n \"properties\": {\n \"issues\": {\n \"description\": \"Optional. Array of issues found in the analyzed document.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"Issue contains the details of a single issue found by the linter.\",\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"description\": \"Required. Rule code unique to each rule defined in linter.\",\n \"type\": \"string\"\n },\n \"path\": {\n \"description\": \"Required. An array of strings indicating the location in the analyzed document where\\nthe rule was triggered.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"message\": {\n \"description\": \"Required. Human-readable message describing the issue found by the linter.\",\n \"type\": \"string\"\n },\n \"severity\": {\n \"description\": \"Required. Severity level of the rule violation.\",\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Severity unspecified.\", \"Severity error.\", \"Severity warning.\", \"Severity info.\", \"Severity hint.\"],\n \"enum\": [\"SEVERITY_UNSPECIFIED\", \"SEVERITY_ERROR\", \"SEVERITY_WARNING\", \"SEVERITY_INFO\", \"SEVERITY_HINT\"]\n },\n \"range\": {\n \"description\": \"Required. Object describing where in the file the issue was found.\",\n \"type\": \"object\",\n \"properties\": {\n \"start\": {\n \"description\": \"Required. Start of the issue.\",\n \"type\": \"object\",\n \"properties\": {\n \"line\": {\n \"description\": \"Required. Line number (zero-indexed).\",\n \"type\": \"integer\",\n \"format\": \"int32\"\n },\n \"character\": {\n \"description\": \"Required. Character position within the line (zero-indexed).\",\n \"type\": \"integer\",\n \"format\": \"int32\"\n }\n },\n \"required\": [\"line\", \"character\"]\n },\n \"end\": {\n \"description\": \"Required. End of the issue.\",\n \"type\": \"object\",\n \"properties\": {\n \"line\": {\n \"description\": \"Required. Line number (zero-indexed).\",\n \"type\": \"integer\",\n \"format\": \"int32\"\n },\n \"character\": {\n \"description\": \"Required. Character position within the line (zero-indexed).\",\n \"type\": \"integer\",\n \"format\": \"int32\"\n }\n },\n \"required\": [\"line\", \"character\"]\n }\n },\n \"required\": [\"start\", \"end\"]\n }\n },\n \"required\": [\"code\", \"path\", \"message\", \"severity\", \"range\"]\n }\n },\n \"summary\": {\n \"description\": \"Optional. Summary of all issue types and counts for each severity level.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"Count of issues with a given severity.\",\n \"type\": \"object\",\n \"properties\": {\n \"severity\": {\n \"description\": \"Required. Severity of the issue.\",\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Severity unspecified.\", \"Severity error.\", \"Severity warning.\", \"Severity info.\", \"Severity hint.\"],\n \"enum\": [\"SEVERITY_UNSPECIFIED\", \"SEVERITY_ERROR\", \"SEVERITY_WARNING\", \"SEVERITY_INFO\", \"SEVERITY_HINT\"]\n },\n \"count\": {\n \"description\": \"Required. Count of issues with the given severity.\",\n \"type\": \"integer\",\n \"format\": \"int32\"\n }\n },\n \"required\": [\"severity\", \"count\"]\n }\n },\n \"state\": {\n \"description\": \"Required. Lint state represents success or failure for linting.\",\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Lint state unspecified.\", \"Linting was completed successfully.\", \"Linting encountered errors.\"],\n \"enum\": [\"LINT_STATE_UNSPECIFIED\", \"LINT_STATE_SUCCESS\", \"LINT_STATE_ERROR\"]\n },\n \"source\": {\n \"description\": \"Required. Name of the linting application.\",\n \"type\": \"string\"\n },\n \"linter\": {\n \"description\": \"Required. Name of the linter used.\",\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Linter type unspecified.\", \"Linter type spectral.\", \"Linter type other.\"],\n \"enum\": [\"LINTER_UNSPECIFIED\", \"SPECTRAL\", \"OTHER\"]\n },\n \"createTime\": {\n \"description\": \"Required. Timestamp when the linting response was generated.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n },\n \"required\": [\"state\", \"source\", \"linter\", \"createTime\"]\n },\n \"attributes\": {\n \"description\": \"Optional. The list of user defined attributes associated with the spec.\\nThe key is the attribute name. It will be of the format:\\n`projects/{project}/locations/{location}/attributes/{attribute}`.\\nThe value is the attribute values associated with the resource.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"description\": \"The attribute values associated with resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n }\n },\n \"documentation\": {\n \"description\": \"Optional. The documentation of the spec.\\nFor OpenAPI spec, this will be populated from `externalDocs` in OpenAPI\\nspec.\",\n \"type\": \"object\",\n \"properties\": {\n \"externalUri\": {\n \"description\": \"Optional. The uri of the externally hosted documentation.\",\n \"type\": \"string\"\n }\n }\n },\n \"parsingMode\": {\n \"description\": \"Optional. Input only. Enum specifying the parsing mode for OpenAPI Specification (OAS) parsing.\",\n \"writeOnly\": true,\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Defaults to `RELAXED`.\", \"Parsing of the Spec on create and update is relaxed, meaning that\\nparsing errors the spec contents will not fail the API call.\", \"Parsing of the Spec on create and update is strict, meaning that\\nparsing errors in the spec contents will fail the API call.\"],\n \"enum\": [\"PARSING_MODE_UNSPECIFIED\", \"RELAXED\", \"STRICT\"]\n },\n \"sourceMetadata\": {\n \"description\": \"Output only. The list of sources and metadata from the sources of the spec.\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"description\": \"SourceMetadata represents the metadata for a resource at the source.\",\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstanceActionSource\": {\n \"description\": \"Output only. The source of the resource is a plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstance\": {\n \"description\": \"Output only. The resource name of the source plugin instance.\\nFormat is\\n`projects/{project}/locations/{location}/plugins/{plugin}/instances/{instance}`\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"actionId\": {\n \"description\": \"Output only. The id of the plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"sourceType\": {\n \"description\": \"Output only. The type of the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Source type not specified.\", \"Source type plugin.\"],\n \"enum\": [\"SOURCE_TYPE_UNSPECIFIED\", \"PLUGIN\"]\n },\n \"originalResourceId\": {\n \"description\": \"Output only. The unique identifier of the resource at the source.\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"originalResourceCreateTime\": {\n \"description\": \"Output only. The time at which the resource was created at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalResourceUpdateTime\": {\n \"description\": \"Output only. The time at which the resource was last updated at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n }\n }\n }\n },\n \"required\": [\"displayName\", \"specType\"]\n },\n \"originalId\": {\n \"description\": \"Optional. The unique identifier of the spec in the system where it was originally\\ncreated.\",\n \"type\": \"string\"\n },\n \"originalCreateTime\": {\n \"description\": \"Optional. Timestamp indicating when the spec was created at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalUpdateTime\": {\n \"description\": \"Required. Timestamp indicating when the spec was last updated at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n },\n \"required\": [\"spec\", \"originalUpdateTime\"]\n }\n },\n \"deployments\": {\n \"description\": \"Optional. The deployments linked to this API version.\\nNote: A particular API version could be deployed to multiple deployments\\n(for dev deployment, UAT deployment, etc.)\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The metadata associated with a deployment.\",\n \"type\": \"object\",\n \"properties\": {\n \"deployment\": {\n \"description\": \"Required. The deployment resource to be pushed to Hub\\u0027s collect layer. The ID of the\\ndeployment will be generated by Hub.\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"description\": \"Identifier. The name of the deployment.\\n\\nFormat:\\n`projects/{project}/locations/{location}/deployments/{deployment}`\",\n \"x-google-identifier\": true,\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the deployment.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The description of the deployment.\",\n \"type\": \"string\"\n },\n \"documentation\": {\n \"description\": \"Optional. The documentation of the deployment.\",\n \"type\": \"object\",\n \"properties\": {\n \"externalUri\": {\n \"description\": \"Optional. The uri of the externally hosted documentation.\",\n \"type\": \"string\"\n }\n }\n },\n \"deploymentType\": {\n \"description\": \"Required. The type of deployment.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-deployment-type`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"resourceUri\": {\n \"description\": \"Required. A uri that uniquely identfies the deployment within a particular gateway.\\nFor example, if the runtime resource is of type APIGEE_PROXY, then this\\nfield will be a combination of org, proxy name and environment.\",\n \"type\": \"string\"\n },\n \"endpoints\": {\n \"description\": \"Required. The endpoints at which this deployment resource is listening for API\\nrequests. This could be a list of complete URIs, hostnames or an IP\\naddresses.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"apiVersions\": {\n \"description\": \"Output only. The API versions linked to this deployment.\\nNote: A particular deployment could be linked to multiple different API\\nversions (of same or different APIs).\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"createTime\": {\n \"description\": \"Output only. The time at which the deployment was created.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"updateTime\": {\n \"description\": \"Output only. The time at which the deployment was last updated.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"slo\": {\n \"description\": \"Optional. The SLO for this deployment.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-slo`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"environment\": {\n \"description\": \"Optional. The environment mapping to this deployment.\\nThis maps to the following system defined attribute:\\n`projects/{project}/locations/{location}/attributes/system-environment`\\nattribute.\\nThe number of values for this attribute will be based on the\\ncardinality of the attribute. The same can be retrieved via GetAttribute\\nAPI. All values should be from the list of allowed values defined for the\\nattribute.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"attributes\": {\n \"description\": \"Optional. The list of user defined attributes associated with the deployment\\nresource.\\nThe key is the attribute name. It will be of the format:\\n`projects/{project}/locations/{location}/attributes/{attribute}`.\\nThe value is the attribute values associated with the resource.\",\n \"type\": \"object\",\n \"additionalProperties\": {\n \"description\": \"The attribute values associated with resource.\",\n \"type\": \"object\",\n \"properties\": {\n \"enumValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is enum.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is enum.\",\n \"type\": \"array\",\n \"items\": {\n \"description\": \"The value that can be assigned to the attribute when the data type is\\nenum.\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"description\": \"Required. The ID of the allowed value.\\n* If provided, the same will be used. The service will throw an error if\\nthe specified id is already used by another allowed value in the same\\nattribute resource.\\n* If not provided, a system generated id derived from the display name\\nwill be used. In this case, the service will handle conflict resolution\\nby adding a system generated suffix in case of duplicates.\\n\\nThis value should be 4-63 characters, and valid characters\\nare /a-z-/.\",\n \"type\": \"string\"\n },\n \"displayName\": {\n \"description\": \"Required. The display name of the allowed value.\",\n \"type\": \"string\"\n },\n \"description\": {\n \"description\": \"Optional. The detailed description of the allowed value.\",\n \"type\": \"string\"\n },\n \"immutable\": {\n \"description\": \"Optional. When set to true, the allowed value cannot be updated or deleted by the\\nuser. It can only be true for System defined attributes.\",\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"id\", \"displayName\"]\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"stringValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is string.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"jsonValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is JSON.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"uriValues\": {\n \"description\": \"The attribute values associated with a resource in case attribute data\\ntype is URL, URI or IP, like gs://bucket-name/object-name.\",\n \"type\": \"object\",\n \"properties\": {\n \"values\": {\n \"description\": \"Required. The attribute values in case attribute data type is string or JSON.\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"values\"]\n },\n \"attribute\": {\n \"description\": \"Output only. The name of the attribute.\\nFormat: projects/{project}/locations/{location}/attributes/{attribute}\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n }\n },\n \"sourceMetadata\": {\n \"description\": \"Output only. The list of sources and metadata from the sources of the deployment.\",\n \"readOnly\": true,\n \"type\": \"array\",\n \"items\": {\n \"description\": \"SourceMetadata represents the metadata for a resource at the source.\",\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstanceActionSource\": {\n \"description\": \"Output only. The source of the resource is a plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"object\",\n \"properties\": {\n \"pluginInstance\": {\n \"description\": \"Output only. The resource name of the source plugin instance.\\nFormat is\\n`projects/{project}/locations/{location}/plugins/{plugin}/instances/{instance}`\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"actionId\": {\n \"description\": \"Output only. The id of the plugin instance action.\",\n \"readOnly\": true,\n \"type\": \"string\"\n }\n }\n },\n \"sourceType\": {\n \"description\": \"Output only. The type of the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"x-google-enum-descriptions\": [\"Source type not specified.\", \"Source type plugin.\"],\n \"enum\": [\"SOURCE_TYPE_UNSPECIFIED\", \"PLUGIN\"]\n },\n \"originalResourceId\": {\n \"description\": \"Output only. The unique identifier of the resource at the source.\",\n \"readOnly\": true,\n \"type\": \"string\"\n },\n \"originalResourceCreateTime\": {\n \"description\": \"Output only. The time at which the resource was created at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalResourceUpdateTime\": {\n \"description\": \"Output only. The time at which the resource was last updated at the source.\",\n \"readOnly\": true,\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n }\n }\n }\n },\n \"required\": [\"displayName\", \"deploymentType\", \"resourceUri\", \"endpoints\"]\n },\n \"originalId\": {\n \"description\": \"Optional. The unique identifier of the deployment in the system where it was\\noriginally created.\",\n \"type\": \"string\"\n },\n \"originalCreateTime\": {\n \"description\": \"Optional. Timestamp indicating when the deployment was created at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalUpdateTime\": {\n \"description\": \"Required. Timestamp indicating when the deployment was last updated at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n },\n \"required\": [\"deployment\", \"originalUpdateTime\"]\n }\n },\n \"originalId\": {\n \"description\": \"Optional. The unique identifier of the version in the system where it was originally\\ncreated.\",\n \"type\": \"string\"\n },\n \"originalCreateTime\": {\n \"description\": \"Optional. Timestamp indicating when the version was created at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalUpdateTime\": {\n \"description\": \"Required. Timestamp indicating when the version was last updated at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n },\n \"required\": [\"version\", \"originalUpdateTime\"]\n }\n },\n \"originalId\": {\n \"description\": \"Optional. The unique identifier of the API in the system where it was originally\\ncreated.\",\n \"type\": \"string\"\n },\n \"originalCreateTime\": {\n \"description\": \"Optional. Timestamp indicating when the API was created at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"originalUpdateTime\": {\n \"description\": \"Required. Timestamp indicating when the API was last updated at the source.\",\n \"type\": \"string\",\n \"format\": \"date-time\"\n }\n },\n \"required\": [\"api\", \"originalUpdateTime\"]\n }\n },\n \"required\": [\"apiMetadata\"]\n }\n }\n }\n}" }], "databasePersistencePolicy": "DATABASE_PERSISTENCE_ASYNC" }