{
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/sasportal": {
          "description": "Read, create, update, and delete your SAS Portal data."
        },
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        }
      }
    }
  },
  "title": "SAS Portal API",
  "ownerName": "Google",
  "name": "sasportal",
  "resources": {
    "installer": {
      "methods": {
        "generateSecret": {
          "parameters": {},
          "flatPath": "v1alpha1/installer:generateSecret",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalGenerateSecretRequest"
          },
          "response": {
            "$ref": "SasPortalGenerateSecretResponse"
          },
          "description": "Generates a secret to be used with the ValidateInstaller.",
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "id": "sasportal.installer.generateSecret",
          "parameterOrder": [],
          "path": "v1alpha1/installer:generateSecret"
        },
        "validate": {
          "parameters": {},
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "description": "Validates the identity of a Certified Professional Installer (CPI).",
          "flatPath": "v1alpha1/installer:validate",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalValidateInstallerRequest"
          },
          "response": {
            "$ref": "SasPortalValidateInstallerResponse"
          },
          "id": "sasportal.installer.validate",
          "path": "v1alpha1/installer:validate",
          "parameterOrder": []
        }
      }
    },
    "deployments": {
      "methods": {
        "get": {
          "parameters": {
            "name": {
              "pattern": "^deployments/[^/]+$",
              "required": true,
              "type": "string",
              "description": "Required. The name of the deployment.",
              "location": "path"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "flatPath": "v1alpha1/deployments/{deploymentsId}",
          "httpMethod": "GET",
          "response": {
            "$ref": "SasPortalDeployment"
          },
          "description": "Returns a requested deployment.",
          "id": "sasportal.deployments.get",
          "path": "v1alpha1/{+name}",
          "parameterOrder": [
            "name"
          ]
        }
      },
      "resources": {
        "devices": {
          "methods": {
            "updateSigned": {
              "path": "v1alpha1/{+name}:updateSigned",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.deployments.devices.updateSigned",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/deployments/{deploymentsId}/devices/{devicesId}:updateSigned",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalUpdateSignedDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "description": "Updates a signed device.",
              "parameters": {
                "name": {
                  "pattern": "^deployments/[^/]+/devices/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the device to update.",
                  "location": "path"
                }
              }
            },
            "signDevice": {
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}:signDevice",
              "id": "sasportal.deployments.devices.signDevice",
              "description": "Signs a device.",
              "flatPath": "v1alpha1/deployments/{deploymentsId}/devices/{devicesId}:signDevice",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalSignDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "name": {
                  "description": "Output only. The resource path name.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^deployments/[^/]+/devices/[^/]+$",
                  "required": true
                }
              }
            },
            "move": {
              "parameters": {
                "name": {
                  "pattern": "^deployments/[^/]+/devices/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the device to move.",
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Moves a device under another node or customer.",
              "flatPath": "v1alpha1/deployments/{deploymentsId}/devices/{devicesId}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              },
              "id": "sasportal.deployments.devices.move",
              "path": "v1alpha1/{+name}:move",
              "parameterOrder": [
                "name"
              ]
            },
            "patch": {
              "flatPath": "v1alpha1/deployments/{deploymentsId}/devices/{devicesId}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalDevice"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "description": "Updates a device.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "name": {
                  "description": "Output only. The resource path name.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^deployments/[^/]+/devices/[^/]+$",
                  "required": true
                },
                "updateMask": {
                  "type": "string",
                  "format": "google-fieldmask",
                  "description": "Fields to be updated.",
                  "location": "query"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}",
              "id": "sasportal.deployments.devices.patch"
            },
            "delete": {
              "id": "sasportal.deployments.devices.delete",
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the device.",
                  "location": "path",
                  "pattern": "^deployments/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/deployments/{deploymentsId}/devices/{devicesId}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "description": "Deletes a device."
            },
            "get": {
              "id": "sasportal.deployments.devices.get",
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}",
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the device.",
                  "location": "path",
                  "pattern": "^deployments/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "description": "Gets details about a device.",
              "flatPath": "v1alpha1/deployments/{deploymentsId}/devices/{devicesId}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalDevice"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ]
            }
          }
        }
      }
    },
    "policies": {
      "methods": {
        "test": {
          "parameters": {},
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "description": "Returns permissions that a caller has on the specified resource.",
          "flatPath": "v1alpha1/policies:test",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalTestPermissionsRequest"
          },
          "response": {
            "$ref": "SasPortalTestPermissionsResponse"
          },
          "id": "sasportal.policies.test",
          "path": "v1alpha1/policies:test",
          "parameterOrder": []
        },
        "set": {
          "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
          "flatPath": "v1alpha1/policies:set",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalSetPolicyRequest"
          },
          "response": {
            "$ref": "SasPortalPolicy"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "parameters": {},
          "parameterOrder": [],
          "path": "v1alpha1/policies:set",
          "id": "sasportal.policies.set"
        },
        "get": {
          "id": "sasportal.policies.get",
          "path": "v1alpha1/policies:get",
          "parameterOrder": [],
          "parameters": {},
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "flatPath": "v1alpha1/policies:get",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalGetPolicyRequest"
          },
          "response": {
            "$ref": "SasPortalPolicy"
          },
          "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set."
        }
      }
    },
    "customers": {
      "methods": {
        "patch": {
          "id": "sasportal.customers.patch",
          "path": "v1alpha1/{+name}",
          "parameterOrder": [
            "name"
          ],
          "parameters": {
            "name": {
              "type": "string",
              "description": "Output only. Resource name of the customer.",
              "location": "path",
              "pattern": "^customers/[^/]+$",
              "required": true
            },
            "updateMask": {
              "description": "Fields to be updated.",
              "location": "query",
              "type": "string",
              "format": "google-fieldmask"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "flatPath": "v1alpha1/customers/{customersId}",
          "httpMethod": "PATCH",
          "request": {
            "$ref": "SasPortalCustomer"
          },
          "response": {
            "$ref": "SasPortalCustomer"
          },
          "description": "Updates an existing customer."
        },
        "provisionDeployment": {
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "description": "Creates a new SAS deployment through the GCP workflow. Creates a SAS organization if an organization match is not found.",
          "flatPath": "v1alpha1/customers:provisionDeployment",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalProvisionDeploymentRequest"
          },
          "response": {
            "$ref": "SasPortalProvisionDeploymentResponse"
          },
          "parameters": {},
          "path": "v1alpha1/customers:provisionDeployment",
          "parameterOrder": [],
          "id": "sasportal.customers.provisionDeployment"
        },
        "listLegacyOrganizations": {
          "parameterOrder": [],
          "path": "v1alpha1/customers:listLegacyOrganizations",
          "id": "sasportal.customers.listLegacyOrganizations",
          "description": "Returns a list of legacy organizations.",
          "flatPath": "v1alpha1/customers:listLegacyOrganizations",
          "httpMethod": "GET",
          "response": {
            "$ref": "SasPortalListLegacyOrganizationsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "parameters": {}
        },
        "migrateOrganization": {
          "id": "sasportal.customers.migrateOrganization",
          "path": "v1alpha1/customers:migrateOrganization",
          "parameterOrder": [],
          "parameters": {},
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "description": "Migrates a SAS organization to the cloud. This will create GCP projects for each deployment and associate them. The SAS Organization is linked to the gcp project that called the command. go/sas-legacy-customer-migration",
          "flatPath": "v1alpha1/customers:migrateOrganization",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalMigrateOrganizationRequest"
          },
          "response": {
            "$ref": "SasPortalOperation"
          }
        },
        "list": {
          "parameters": {
            "pageSize": {
              "type": "integer",
              "format": "int32",
              "description": "The maximum number of customers to return in the response.",
              "location": "query"
            },
            "pageToken": {
              "type": "string",
              "description": "A pagination token returned from a previous call to ListCustomers that indicates where this listing should continue from.",
              "location": "query"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "flatPath": "v1alpha1/customers",
          "httpMethod": "GET",
          "response": {
            "$ref": "SasPortalListCustomersResponse"
          },
          "description": "Returns a list of requested customers.",
          "id": "sasportal.customers.list",
          "path": "v1alpha1/customers",
          "parameterOrder": []
        },
        "setupSasAnalytics": {
          "id": "sasportal.customers.setupSasAnalytics",
          "path": "v1alpha1/customers:setupSasAnalytics",
          "parameterOrder": [],
          "parameters": {},
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "description": "Setups the a GCP Project to receive SAS Analytics messages via GCP Pub/Sub with a subscription to BigQuery. All the Pub/Sub topics and BigQuery tables are created automatically as part of this service.",
          "flatPath": "v1alpha1/customers:setupSasAnalytics",
          "httpMethod": "POST",
          "request": {
            "$ref": "SasPortalSetupSasAnalyticsRequest"
          },
          "response": {
            "$ref": "SasPortalOperation"
          }
        },
        "get": {
          "id": "sasportal.customers.get",
          "parameterOrder": [
            "name"
          ],
          "path": "v1alpha1/{+name}",
          "parameters": {
            "name": {
              "pattern": "^customers/[^/]+$",
              "required": true,
              "type": "string",
              "description": "Required. The name of the customer.",
              "location": "path"
            }
          },
          "description": "Returns a requested customer.",
          "flatPath": "v1alpha1/customers/{customersId}",
          "httpMethod": "GET",
          "response": {
            "$ref": "SasPortalCustomer"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ]
        },
        "listGcpProjectDeployments": {
          "parameters": {},
          "flatPath": "v1alpha1/customers:listGcpProjectDeployments",
          "httpMethod": "GET",
          "response": {
            "$ref": "SasPortalListGcpProjectDeploymentsResponse"
          },
          "description": "Returns a list of SAS deployments associated with current GCP project. Includes whether SAS analytics has been enabled or not.",
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "id": "sasportal.customers.listGcpProjectDeployments",
          "parameterOrder": [],
          "path": "v1alpha1/customers:listGcpProjectDeployments"
        }
      },
      "resources": {
        "devices": {
          "methods": {
            "move": {
              "id": "sasportal.customers.devices.move",
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}:move",
              "parameters": {
                "name": {
                  "description": "Required. The name of the device to move.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^customers/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "description": "Moves a device under another node or customer.",
              "flatPath": "v1alpha1/customers/{customersId}/devices/{devicesId}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ]
            },
            "patch": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Updates a device.",
              "flatPath": "v1alpha1/customers/{customersId}/devices/{devicesId}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalDevice"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/devices/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Output only. The resource path name.",
                  "location": "path"
                },
                "updateMask": {
                  "description": "Fields to be updated.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                }
              },
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.devices.patch"
            },
            "signDevice": {
              "flatPath": "v1alpha1/customers/{customersId}/devices/{devicesId}:signDevice",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalSignDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "description": "Signs a device.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/devices/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Output only. The resource path name.",
                  "location": "path"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}:signDevice",
              "id": "sasportal.customers.devices.signDevice"
            },
            "list": {
              "id": "sasportal.customers.devices.list",
              "parameterOrder": [
                "parent"
              ],
              "path": "v1alpha1/{+parent}/devices",
              "parameters": {
                "parent": {
                  "type": "string",
                  "description": "Required. The name of the parent resource.",
                  "location": "path",
                  "pattern": "^customers/[^/]+$",
                  "required": true
                },
                "filter": {
                  "description": "The filter expression. The filter should have one of the following formats: \"sn=123454\" or \"display_name=MyDevice\". sn corresponds to serial number of the device. The filter is case insensitive.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "The maximum number of devices to return in the response. If empty or zero, all devices will be listed. Must be in the range [0, 1000].",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "type": "string",
                  "description": "A pagination token returned from a previous call to ListDevices that indicates where this listing should continue from.",
                  "location": "query"
                }
              },
              "description": "Lists devices under a node or customer.",
              "flatPath": "v1alpha1/customers/{customersId}/devices",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalListDevicesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ]
            },
            "createSigned": {
              "parameters": {
                "parent": {
                  "type": "string",
                  "description": "Required. The name of the parent resource.",
                  "location": "path",
                  "pattern": "^customers/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/customers/{customersId}/devices:createSigned",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalCreateSignedDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "description": "Creates a signed device under a node or customer.",
              "id": "sasportal.customers.devices.createSigned",
              "path": "v1alpha1/{+parent}/devices:createSigned",
              "parameterOrder": [
                "parent"
              ]
            },
            "delete": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Deletes a device.",
              "flatPath": "v1alpha1/customers/{customersId}/devices/{devicesId}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/devices/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the device.",
                  "location": "path",
                  "type": "string"
                }
              },
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.devices.delete"
            },
            "get": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Gets details about a device.",
              "flatPath": "v1alpha1/customers/{customersId}/devices/{devicesId}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalDevice"
              },
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the device.",
                  "location": "path",
                  "pattern": "^customers/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.devices.get"
            },
            "create": {
              "parameters": {
                "parent": {
                  "description": "Required. The name of the parent resource.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^customers/[^/]+$",
                  "required": true
                }
              },
              "flatPath": "v1alpha1/customers/{customersId}/devices",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalDevice"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "description": "Creates a device under a node or customer.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "id": "sasportal.customers.devices.create",
              "parameterOrder": [
                "parent"
              ],
              "path": "v1alpha1/{+parent}/devices"
            },
            "updateSigned": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/customers/{customersId}/devices/{devicesId}:updateSigned",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalUpdateSignedDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "description": "Updates a signed device.",
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the device to update.",
                  "location": "path",
                  "pattern": "^customers/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "path": "v1alpha1/{+name}:updateSigned",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.devices.updateSigned"
            }
          }
        },
        "nodes": {
          "methods": {
            "delete": {
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the node.",
                  "location": "path",
                  "pattern": "^customers/[^/]+/nodes/[^/]+$",
                  "required": true
                }
              },
              "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "description": "Deletes a node.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "id": "sasportal.customers.nodes.delete",
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}"
            },
            "get": {
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.nodes.get",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Returns a requested node.",
              "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalNode"
              },
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/nodes/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the node.",
                  "location": "path",
                  "type": "string"
                }
              }
            },
            "list": {
              "id": "sasportal.customers.nodes.list",
              "parameterOrder": [
                "parent"
              ],
              "path": "v1alpha1/{+parent}/nodes",
              "parameters": {
                "pageSize": {
                  "description": "The maximum number of nodes to return in the response.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "A pagination token returned from a previous call to ListNodes that indicates where this listing should continue from.",
                  "location": "query",
                  "type": "string"
                },
                "parent": {
                  "pattern": "^customers/[^/]+$",
                  "required": true,
                  "description": "Required. The parent resource name, for example, \"nodes/1\".",
                  "location": "path",
                  "type": "string"
                },
                "filter": {
                  "type": "string",
                  "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no nodes are filtered.",
                  "location": "query"
                }
              },
              "flatPath": "v1alpha1/customers/{customersId}/nodes",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalListNodesResponse"
              },
              "description": "Lists nodes.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ]
            },
            "create": {
              "id": "sasportal.customers.nodes.create",
              "path": "v1alpha1/{+parent}/nodes",
              "parameterOrder": [
                "parent"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^customers/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The parent resource name where the node is to be created.",
                  "location": "path"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Creates a new node.",
              "flatPath": "v1alpha1/customers/{customersId}/nodes",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalNode"
              },
              "response": {
                "$ref": "SasPortalNode"
              }
            },
            "move": {
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}:move",
              "id": "sasportal.customers.nodes.move",
              "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveNodeRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              },
              "description": "Moves a node under another node or customer.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/nodes/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the node to move.",
                  "location": "path"
                }
              }
            },
            "patch": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalNode"
              },
              "response": {
                "$ref": "SasPortalNode"
              },
              "description": "Updates an existing node.",
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/nodes/[^/]+$",
                  "required": true,
                  "description": "Output only. Resource name.",
                  "location": "path",
                  "type": "string"
                },
                "updateMask": {
                  "type": "string",
                  "format": "google-fieldmask",
                  "description": "Fields to be updated.",
                  "location": "query"
                }
              },
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.nodes.patch"
            }
          },
          "resources": {
            "devices": {
              "methods": {
                "list": {
                  "id": "sasportal.customers.nodes.devices.list",
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/devices",
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of devices to return in the response. If empty or zero, all devices will be listed. Must be in the range [0, 1000].",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "A pagination token returned from a previous call to ListDevices that indicates where this listing should continue from.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path"
                    },
                    "filter": {
                      "description": "The filter expression. The filter should have one of the following formats: \"sn=123454\" or \"display_name=MyDevice\". sn corresponds to serial number of the device. The filter is case insensitive.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "description": "Lists devices under a node or customer.",
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/devices",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListDevicesResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ]
                },
                "create": {
                  "id": "sasportal.customers.nodes.devices.create",
                  "path": "v1alpha1/{+parent}/devices",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/devices",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalDevice"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "description": "Creates a device under a node or customer."
                },
                "createSigned": {
                  "id": "sasportal.customers.nodes.devices.createSigned",
                  "path": "v1alpha1/{+parent}/devices:createSigned",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "type": "string",
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Creates a signed device under a node or customer.",
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/devices:createSigned",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalCreateSignedDeviceRequest"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  }
                }
              }
            },
            "nodes": {
              "methods": {
                "list": {
                  "path": "v1alpha1/{+parent}/nodes",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "sasportal.customers.nodes.nodes.list",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Lists nodes.",
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/nodes",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListNodesResponse"
                  },
                  "parameters": {
                    "parent": {
                      "type": "string",
                      "description": "Required. The parent resource name, for example, \"nodes/1\".",
                      "location": "path",
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true
                    },
                    "filter": {
                      "type": "string",
                      "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no nodes are filtered.",
                      "location": "query"
                    },
                    "pageSize": {
                      "description": "The maximum number of nodes to return in the response.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "A pagination token returned from a previous call to ListNodes that indicates where this listing should continue from.",
                      "location": "query",
                      "type": "string"
                    }
                  }
                },
                "create": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/nodes",
                  "id": "sasportal.customers.nodes.nodes.create",
                  "description": "Creates a new node.",
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/nodes",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalNode"
                  },
                  "response": {
                    "$ref": "SasPortalNode"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "parameters": {
                    "parent": {
                      "type": "string",
                      "description": "Required. The parent resource name where the node is to be created.",
                      "location": "path",
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true
                    }
                  }
                }
              }
            },
            "deployments": {
              "methods": {
                "list": {
                  "description": "Lists deployments.",
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/deployments",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListDeploymentsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "parameters": {
                    "parent": {
                      "type": "string",
                      "description": "Required. The parent resource name, for example, \"nodes/1\", customer/1/nodes/2.",
                      "location": "path",
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true
                    },
                    "filter": {
                      "type": "string",
                      "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no deployments are filtered.",
                      "location": "query"
                    },
                    "pageSize": {
                      "type": "integer",
                      "format": "int32",
                      "description": "The maximum number of deployments to return in the response.",
                      "location": "query"
                    },
                    "pageToken": {
                      "description": "A pagination token returned from a previous call to ListDeployments that indicates where this listing should continue from.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/deployments",
                  "id": "sasportal.customers.nodes.deployments.list"
                },
                "create": {
                  "parameters": {
                    "parent": {
                      "pattern": "^customers/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The parent resource name where the deployment is to be created.",
                      "location": "path"
                    }
                  },
                  "flatPath": "v1alpha1/customers/{customersId}/nodes/{nodesId}/deployments",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalDeployment"
                  },
                  "response": {
                    "$ref": "SasPortalDeployment"
                  },
                  "description": "Creates a new deployment.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "id": "sasportal.customers.nodes.deployments.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/deployments"
                }
              }
            }
          }
        },
        "deployments": {
          "methods": {
            "list": {
              "id": "sasportal.customers.deployments.list",
              "path": "v1alpha1/{+parent}/deployments",
              "parameterOrder": [
                "parent"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^customers/[^/]+$",
                  "required": true,
                  "description": "Required. The parent resource name, for example, \"nodes/1\", customer/1/nodes/2.",
                  "location": "path",
                  "type": "string"
                },
                "filter": {
                  "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no deployments are filtered.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "The maximum number of deployments to return in the response.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "type": "string",
                  "description": "A pagination token returned from a previous call to ListDeployments that indicates where this listing should continue from.",
                  "location": "query"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Lists deployments.",
              "flatPath": "v1alpha1/customers/{customersId}/deployments",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalListDeploymentsResponse"
              }
            },
            "delete": {
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the deployment.",
                  "location": "path",
                  "pattern": "^customers/[^/]+/deployments/[^/]+$",
                  "required": true
                }
              },
              "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "description": "Deletes a deployment.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "id": "sasportal.customers.deployments.delete",
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}"
            },
            "get": {
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.deployments.get",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Returns a requested deployment.",
              "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalDeployment"
              },
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/deployments/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the deployment.",
                  "location": "path"
                }
              }
            },
            "patch": {
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.customers.deployments.patch",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Updates an existing deployment.",
              "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalDeployment"
              },
              "response": {
                "$ref": "SasPortalDeployment"
              },
              "parameters": {
                "updateMask": {
                  "description": "Fields to be updated.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                },
                "name": {
                  "description": "Output only. Resource name.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^customers/[^/]+/deployments/[^/]+$",
                  "required": true
                }
              }
            },
            "move": {
              "id": "sasportal.customers.deployments.move",
              "path": "v1alpha1/{+name}:move",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "pattern": "^customers/[^/]+/deployments/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the deployment to move.",
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Moves a deployment under another node or customer.",
              "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveDeploymentRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              }
            },
            "create": {
              "parameters": {
                "parent": {
                  "pattern": "^customers/[^/]+$",
                  "required": true,
                  "description": "Required. The parent resource name where the deployment is to be created.",
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Creates a new deployment.",
              "flatPath": "v1alpha1/customers/{customersId}/deployments",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalDeployment"
              },
              "response": {
                "$ref": "SasPortalDeployment"
              },
              "id": "sasportal.customers.deployments.create",
              "path": "v1alpha1/{+parent}/deployments",
              "parameterOrder": [
                "parent"
              ]
            }
          },
          "resources": {
            "devices": {
              "methods": {
                "list": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}/devices",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListDevicesResponse"
                  },
                  "description": "Lists devices under a node or customer.",
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of devices to return in the response. If empty or zero, all devices will be listed. Must be in the range [0, 1000].",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "A pagination token returned from a previous call to ListDevices that indicates where this listing should continue from.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "pattern": "^customers/[^/]+/deployments/[^/]+$",
                      "required": true
                    },
                    "filter": {
                      "type": "string",
                      "description": "The filter expression. The filter should have one of the following formats: \"sn=123454\" or \"display_name=MyDevice\". sn corresponds to serial number of the device. The filter is case insensitive.",
                      "location": "query"
                    }
                  },
                  "path": "v1alpha1/{+parent}/devices",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "sasportal.customers.deployments.devices.list"
                },
                "create": {
                  "id": "sasportal.customers.deployments.devices.create",
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/devices",
                  "parameters": {
                    "parent": {
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "pattern": "^customers/[^/]+/deployments/[^/]+$",
                      "required": true
                    }
                  },
                  "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}/devices",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalDevice"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "description": "Creates a device under a node or customer.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ]
                },
                "createSigned": {
                  "parameters": {
                    "parent": {
                      "pattern": "^customers/[^/]+/deployments/[^/]+$",
                      "required": true,
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Creates a signed device under a node or customer.",
                  "flatPath": "v1alpha1/customers/{customersId}/deployments/{deploymentsId}/devices:createSigned",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalCreateSignedDeviceRequest"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "id": "sasportal.customers.deployments.devices.createSigned",
                  "path": "v1alpha1/{+parent}/devices:createSigned",
                  "parameterOrder": [
                    "parent"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodes": {
      "methods": {
        "get": {
          "parameterOrder": [
            "name"
          ],
          "path": "v1alpha1/{+name}",
          "id": "sasportal.nodes.get",
          "description": "Returns a requested node.",
          "flatPath": "v1alpha1/nodes/{nodesId}",
          "httpMethod": "GET",
          "response": {
            "$ref": "SasPortalNode"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/sasportal"
          ],
          "parameters": {
            "name": {
              "type": "string",
              "description": "Required. The name of the node.",
              "location": "path",
              "pattern": "^nodes/[^/]+$",
              "required": true
            }
          }
        }
      },
      "resources": {
        "devices": {
          "methods": {
            "move": {
              "id": "sasportal.nodes.devices.move",
              "path": "v1alpha1/{+name}:move",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the device to move.",
                  "location": "path",
                  "pattern": "^nodes/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Moves a device under another node or customer.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices/{devicesId}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              }
            },
            "patch": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Updates a device.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices/{devicesId}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalDevice"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "parameters": {
                "updateMask": {
                  "description": "Fields to be updated.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                },
                "name": {
                  "pattern": "^nodes/[^/]+/devices/[^/]+$",
                  "required": true,
                  "description": "Output only. The resource path name.",
                  "location": "path",
                  "type": "string"
                }
              },
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.nodes.devices.patch"
            },
            "signDevice": {
              "description": "Signs a device.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices/{devicesId}:signDevice",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalSignDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "name": {
                  "pattern": "^nodes/[^/]+/devices/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Output only. The resource path name.",
                  "location": "path"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}:signDevice",
              "id": "sasportal.nodes.devices.signDevice"
            },
            "list": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Lists devices under a node or customer.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalListDevicesResponse"
              },
              "parameters": {
                "pageSize": {
                  "type": "integer",
                  "format": "int32",
                  "description": "The maximum number of devices to return in the response. If empty or zero, all devices will be listed. Must be in the range [0, 1000].",
                  "location": "query"
                },
                "pageToken": {
                  "description": "A pagination token returned from a previous call to ListDevices that indicates where this listing should continue from.",
                  "location": "query",
                  "type": "string"
                },
                "parent": {
                  "pattern": "^nodes/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the parent resource.",
                  "location": "path"
                },
                "filter": {
                  "description": "The filter expression. The filter should have one of the following formats: \"sn=123454\" or \"display_name=MyDevice\". sn corresponds to serial number of the device. The filter is case insensitive.",
                  "location": "query",
                  "type": "string"
                }
              },
              "path": "v1alpha1/{+parent}/devices",
              "parameterOrder": [
                "parent"
              ],
              "id": "sasportal.nodes.devices.list"
            },
            "createSigned": {
              "flatPath": "v1alpha1/nodes/{nodesId}/devices:createSigned",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalCreateSignedDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "description": "Creates a signed device under a node or customer.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^nodes/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the parent resource.",
                  "location": "path"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "path": "v1alpha1/{+parent}/devices:createSigned",
              "id": "sasportal.nodes.devices.createSigned"
            },
            "delete": {
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.nodes.devices.delete",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/nodes/{nodesId}/devices/{devicesId}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "description": "Deletes a device.",
              "parameters": {
                "name": {
                  "description": "Required. The name of the device.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^nodes/[^/]+/devices/[^/]+$",
                  "required": true
                }
              }
            },
            "get": {
              "id": "sasportal.nodes.devices.get",
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The name of the device.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^nodes/[^/]+/devices/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Gets details about a device.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices/{devicesId}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalDevice"
              }
            },
            "create": {
              "description": "Creates a device under a node or customer.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalDevice"
              },
              "response": {
                "$ref": "SasPortalDevice"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^nodes/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the parent resource.",
                  "location": "path",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "path": "v1alpha1/{+parent}/devices",
              "id": "sasportal.nodes.devices.create"
            },
            "updateSigned": {
              "id": "sasportal.nodes.devices.updateSigned",
              "path": "v1alpha1/{+name}:updateSigned",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "pattern": "^nodes/[^/]+/devices/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the device to update.",
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Updates a signed device.",
              "flatPath": "v1alpha1/nodes/{nodesId}/devices/{devicesId}:updateSigned",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalUpdateSignedDeviceRequest"
              },
              "response": {
                "$ref": "SasPortalDevice"
              }
            }
          }
        },
        "nodes": {
          "methods": {
            "create": {
              "id": "sasportal.nodes.nodes.create",
              "parameterOrder": [
                "parent"
              ],
              "path": "v1alpha1/{+parent}/nodes",
              "parameters": {
                "parent": {
                  "pattern": "^nodes/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The parent resource name where the node is to be created.",
                  "location": "path"
                }
              },
              "description": "Creates a new node.",
              "flatPath": "v1alpha1/nodes/{nodesId}/nodes",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalNode"
              },
              "response": {
                "$ref": "SasPortalNode"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ]
            },
            "move": {
              "id": "sasportal.nodes.nodes.move",
              "path": "v1alpha1/{+name}:move",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The name of the node to move.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Moves a node under another node or customer.",
              "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveNodeRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              }
            },
            "patch": {
              "parameters": {
                "updateMask": {
                  "description": "Fields to be updated.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                },
                "name": {
                  "type": "string",
                  "description": "Output only. Resource name.",
                  "location": "path",
                  "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                  "required": true
                }
              },
              "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalNode"
              },
              "response": {
                "$ref": "SasPortalNode"
              },
              "description": "Updates an existing node.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "id": "sasportal.nodes.nodes.patch",
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}"
            },
            "delete": {
              "id": "sasportal.nodes.nodes.delete",
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the node.",
                  "location": "path",
                  "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Deletes a node.",
              "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              }
            },
            "get": {
              "id": "sasportal.nodes.nodes.get",
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The name of the node.",
                  "location": "path",
                  "type": "string",
                  "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Returns a requested node.",
              "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalNode"
              }
            },
            "list": {
              "parameters": {
                "pageSize": {
                  "description": "The maximum number of nodes to return in the response.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "A pagination token returned from a previous call to ListNodes that indicates where this listing should continue from.",
                  "location": "query",
                  "type": "string"
                },
                "parent": {
                  "type": "string",
                  "description": "Required. The parent resource name, for example, \"nodes/1\".",
                  "location": "path",
                  "pattern": "^nodes/[^/]+$",
                  "required": true
                },
                "filter": {
                  "type": "string",
                  "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no nodes are filtered.",
                  "location": "query"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/nodes/{nodesId}/nodes",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalListNodesResponse"
              },
              "description": "Lists nodes.",
              "id": "sasportal.nodes.nodes.list",
              "path": "v1alpha1/{+parent}/nodes",
              "parameterOrder": [
                "parent"
              ]
            }
          },
          "resources": {
            "devices": {
              "methods": {
                "list": {
                  "path": "v1alpha1/{+parent}/devices",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "sasportal.nodes.nodes.devices.list",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Lists devices under a node or customer.",
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/devices",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListDevicesResponse"
                  },
                  "parameters": {
                    "pageSize": {
                      "description": "The maximum number of devices to return in the response. If empty or zero, all devices will be listed. Must be in the range [0, 1000].",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "type": "string",
                      "description": "A pagination token returned from a previous call to ListDevices that indicates where this listing should continue from.",
                      "location": "query"
                    },
                    "parent": {
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path"
                    },
                    "filter": {
                      "type": "string",
                      "description": "The filter expression. The filter should have one of the following formats: \"sn=123454\" or \"display_name=MyDevice\". sn corresponds to serial number of the device. The filter is case insensitive.",
                      "location": "query"
                    }
                  }
                },
                "create": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Creates a device under a node or customer.",
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/devices",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalDevice"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "parameters": {
                    "parent": {
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path"
                    }
                  },
                  "path": "v1alpha1/{+parent}/devices",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "sasportal.nodes.nodes.devices.create"
                },
                "createSigned": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/devices:createSigned",
                  "id": "sasportal.nodes.nodes.devices.createSigned",
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/devices:createSigned",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalCreateSignedDeviceRequest"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "description": "Creates a signed device under a node or customer.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "parameters": {
                    "parent": {
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path"
                    }
                  }
                }
              }
            },
            "nodes": {
              "methods": {
                "list": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/nodes",
                  "id": "sasportal.nodes.nodes.nodes.list",
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/nodes",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListNodesResponse"
                  },
                  "description": "Lists nodes.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "parameters": {
                    "pageSize": {
                      "type": "integer",
                      "format": "int32",
                      "description": "The maximum number of nodes to return in the response.",
                      "location": "query"
                    },
                    "pageToken": {
                      "description": "A pagination token returned from a previous call to ListNodes that indicates where this listing should continue from.",
                      "location": "query",
                      "type": "string"
                    },
                    "parent": {
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "description": "Required. The parent resource name, for example, \"nodes/1\".",
                      "location": "path",
                      "type": "string"
                    },
                    "filter": {
                      "type": "string",
                      "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no nodes are filtered.",
                      "location": "query"
                    }
                  }
                },
                "create": {
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/nodes",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalNode"
                  },
                  "response": {
                    "$ref": "SasPortalNode"
                  },
                  "description": "Creates a new node.",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent resource name where the node is to be created.",
                      "location": "path",
                      "type": "string",
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/nodes",
                  "id": "sasportal.nodes.nodes.nodes.create"
                }
              }
            },
            "deployments": {
              "methods": {
                "create": {
                  "id": "sasportal.nodes.nodes.deployments.create",
                  "path": "v1alpha1/{+parent}/deployments",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent resource name where the deployment is to be created.",
                      "location": "path",
                      "type": "string",
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/deployments",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalDeployment"
                  },
                  "response": {
                    "$ref": "SasPortalDeployment"
                  },
                  "description": "Creates a new deployment."
                },
                "list": {
                  "description": "Lists deployments.",
                  "flatPath": "v1alpha1/nodes/{nodesId}/nodes/{nodesId1}/deployments",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListDeploymentsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "parameters": {
                    "parent": {
                      "pattern": "^nodes/[^/]+/nodes/[^/]+$",
                      "required": true,
                      "type": "string",
                      "description": "Required. The parent resource name, for example, \"nodes/1\", customer/1/nodes/2.",
                      "location": "path"
                    },
                    "filter": {
                      "type": "string",
                      "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no deployments are filtered.",
                      "location": "query"
                    },
                    "pageSize": {
                      "description": "The maximum number of deployments to return in the response.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "type": "string",
                      "description": "A pagination token returned from a previous call to ListDeployments that indicates where this listing should continue from.",
                      "location": "query"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha1/{+parent}/deployments",
                  "id": "sasportal.nodes.nodes.deployments.list"
                }
              }
            }
          }
        },
        "deployments": {
          "methods": {
            "patch": {
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.nodes.deployments.patch",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Updates an existing deployment.",
              "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}",
              "httpMethod": "PATCH",
              "request": {
                "$ref": "SasPortalDeployment"
              },
              "response": {
                "$ref": "SasPortalDeployment"
              },
              "parameters": {
                "updateMask": {
                  "description": "Fields to be updated.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                },
                "name": {
                  "type": "string",
                  "description": "Output only. Resource name.",
                  "location": "path",
                  "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                  "required": true
                }
              }
            },
            "move": {
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}:move",
              "id": "sasportal.nodes.deployments.move",
              "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}:move",
              "httpMethod": "POST",
              "request": {
                "$ref": "SasPortalMoveDeploymentRequest"
              },
              "response": {
                "$ref": "SasPortalOperation"
              },
              "description": "Moves a deployment under another node or customer.",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "parameters": {
                "name": {
                  "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The name of the deployment to move.",
                  "location": "path"
                }
              }
            },
            "delete": {
              "path": "v1alpha1/{+name}",
              "parameterOrder": [
                "name"
              ],
              "id": "sasportal.nodes.deployments.delete",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}",
              "httpMethod": "DELETE",
              "response": {
                "$ref": "SasPortalEmpty"
              },
              "description": "Deletes a deployment.",
              "parameters": {
                "name": {
                  "type": "string",
                  "description": "Required. The name of the deployment.",
                  "location": "path",
                  "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                  "required": true
                }
              }
            },
            "get": {
              "id": "sasportal.nodes.deployments.get",
              "parameterOrder": [
                "name"
              ],
              "path": "v1alpha1/{+name}",
              "parameters": {
                "name": {
                  "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                  "required": true,
                  "description": "Required. The name of the deployment.",
                  "location": "path",
                  "type": "string"
                }
              },
              "description": "Returns a requested deployment.",
              "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalDeployment"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ]
            },
            "list": {
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/sasportal"
              ],
              "description": "Lists deployments.",
              "flatPath": "v1alpha1/nodes/{nodesId}/deployments",
              "httpMethod": "GET",
              "response": {
                "$ref": "SasPortalListDeploymentsResponse"
              },
              "parameters": {
                "parent": {
                  "pattern": "^nodes/[^/]+$",
                  "required": true,
                  "description": "Required. The parent resource name, for example, \"nodes/1\", customer/1/nodes/2.",
                  "location": "path",
                  "type": "string"
                },
                "filter": {
                  "description": "The filter expression. The filter should have the following format: \"DIRECT_CHILDREN\" or format: \"direct_children\". The filter is case insensitive. If empty, then no deployments are filtered.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "The maximum number of deployments to return in the response.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "A pagination token returned from a previous call to ListDeployments that indicates where this listing should continue from.",
                  "location": "query",
                  "type": "string"
                }
              },
              "path": "v1alpha1/{+parent}/deployments",
              "parameterOrder": [
                "parent"
              ],
              "id": "sasportal.nodes.deployments.list"
            }
          },
          "resources": {
            "devices": {
              "methods": {
                "list": {
                  "parameters": {
                    "parent": {
                      "type": "string",
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                      "required": true
                    },
                    "filter": {
                      "description": "The filter expression. The filter should have one of the following formats: \"sn=123454\" or \"display_name=MyDevice\". sn corresponds to serial number of the device. The filter is case insensitive.",
                      "location": "query",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "The maximum number of devices to return in the response. If empty or zero, all devices will be listed. Must be in the range [0, 1000].",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "A pagination token returned from a previous call to ListDevices that indicates where this listing should continue from.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Lists devices under a node or customer.",
                  "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}/devices",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "SasPortalListDevicesResponse"
                  },
                  "id": "sasportal.nodes.deployments.devices.list",
                  "path": "v1alpha1/{+parent}/devices",
                  "parameterOrder": [
                    "parent"
                  ]
                },
                "create": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "description": "Creates a device under a node or customer.",
                  "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}/devices",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalDevice"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "parameters": {
                    "parent": {
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "type": "string",
                      "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                      "required": true
                    }
                  },
                  "path": "v1alpha1/{+parent}/devices",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "sasportal.nodes.deployments.devices.create"
                },
                "createSigned": {
                  "id": "sasportal.nodes.deployments.devices.createSigned",
                  "path": "v1alpha1/{+parent}/devices:createSigned",
                  "parameterOrder": [
                    "parent"
                  ],
                  "parameters": {
                    "parent": {
                      "pattern": "^nodes/[^/]+/deployments/[^/]+$",
                      "required": true,
                      "description": "Required. The name of the parent resource.",
                      "location": "path",
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/sasportal"
                  ],
                  "flatPath": "v1alpha1/nodes/{nodesId}/deployments/{deploymentsId}/devices:createSigned",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "SasPortalCreateSignedDeviceRequest"
                  },
                  "response": {
                    "$ref": "SasPortalDevice"
                  },
                  "description": "Creates a signed device under a node or customer."
                }
              }
            }
          }
        }
      }
    }
  },
  "rootUrl": "https://sasportal.googleapis.com/",
  "schemas": {
    "SasPortalGenerateSecretRequest": {
      "id": "SasPortalGenerateSecretRequest",
      "properties": {},
      "description": "Request for GenerateSecret.",
      "type": "object"
    },
    "SasPortalSetupSasAnalyticsResponse": {
      "description": "Response returned by the long running operation for the SetupSasAnalytics rpc.",
      "type": "object",
      "id": "SasPortalSetupSasAnalyticsResponse",
      "properties": {}
    },
    "SasPortalDpaMoveList": {
      "description": "An entry in a DPA's move list.",
      "type": "object",
      "id": "SasPortalDpaMoveList",
      "properties": {
        "dpaId": {
          "type": "string",
          "description": "The ID of the DPA."
        },
        "frequencyRange": {
          "$ref": "SasPortalFrequencyRange",
          "description": "The frequency range that the move list affects."
        }
      }
    },
    "SasPortalTestPermissionsResponse": {
      "type": "object",
      "description": "Response message for `TestPermissions` method.",
      "properties": {
        "permissions": {
          "description": "A set of permissions that the caller is allowed.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "id": "SasPortalTestPermissionsResponse"
    },
    "SasPortalTestPermissionsRequest": {
      "id": "SasPortalTestPermissionsRequest",
      "properties": {
        "resource": {
          "description": "Required. The resource for which the permissions are being requested.",
          "type": "string"
        },
        "permissions": {
          "description": "The set of permissions to check for the `resource`.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "description": "Request message for `TestPermissions` method.",
      "type": "object"
    },
    "SasPortalChannelWithScore": {
      "properties": {
        "score": {
          "description": "The channel score, normalized to be in the range [0,100].",
          "type": "number",
          "format": "double"
        },
        "frequencyRange": {
          "$ref": "SasPortalFrequencyRange",
          "description": "The frequency range of the channel."
        }
      },
      "id": "SasPortalChannelWithScore",
      "type": "object",
      "description": "The channel with score."
    },
    "SasPortalNrqzValidation": {
      "description": "Information about National Radio Quiet Zone validation.",
      "type": "object",
      "id": "SasPortalNrqzValidation",
      "properties": {
        "latitude": {
          "description": "Device latitude that's associated with the validation.",
          "type": "number",
          "format": "double"
        },
        "cpiId": {
          "description": "CPI who signed the validation.",
          "type": "string"
        },
        "longitude": {
          "type": "number",
          "format": "double",
          "description": "Device longitude that's associated with the validation."
        },
        "state": {
          "description": "State of the NRQZ validation info.",
          "enum": [
            "STATE_UNSPECIFIED",
            "DRAFT",
            "FINAL"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified state.",
            "Draft state.",
            "Final state."
          ]
        },
        "caseId": {
          "description": "Validation case ID.",
          "type": "string"
        }
      }
    },
    "SasPortalDeviceModel": {
      "type": "object",
      "description": "Information about the model of the device.",
      "properties": {
        "name": {
          "description": "The name of the device model.",
          "type": "string"
        },
        "vendor": {
          "description": "The name of the device vendor.",
          "type": "string"
        },
        "softwareVersion": {
          "description": "The software version of the device.",
          "type": "string"
        },
        "hardwareVersion": {
          "description": "The hardware version of the device.",
          "type": "string"
        },
        "firmwareVersion": {
          "type": "string",
          "description": "The firmware version of the device."
        }
      },
      "id": "SasPortalDeviceModel"
    },
    "SasPortalListDeploymentsResponse": {
      "properties": {
        "deployments": {
          "description": "The deployments that match the request.",
          "items": {
            "$ref": "SasPortalDeployment"
          },
          "type": "array"
        },
        "nextPageToken": {
          "type": "string",
          "description": "A pagination token returned from a previous call to ListDeployments that indicates from where listing should continue. If the field is missing or empty, it means there are no more deployments."
        }
      },
      "id": "SasPortalListDeploymentsResponse",
      "type": "object",
      "description": "Response for ListDeployments."
    },
    "SasPortalSignDeviceRequest": {
      "properties": {
        "device": {
          "$ref": "SasPortalDevice",
          "description": "Required. The device to sign. The device fields name, fcc_id and serial_number must be set. The user_id field must be set."
        }
      },
      "id": "SasPortalSignDeviceRequest",
      "type": "object",
      "description": "Request for SignDevice."
    },
    "SasPortalMoveDeviceRequest": {
      "properties": {
        "destination": {
          "type": "string",
          "description": "Required. The name of the new parent resource node or customer to reparent the device under."
        }
      },
      "id": "SasPortalMoveDeviceRequest",
      "type": "object",
      "description": "Request for MoveDevice."
    },
    "SasPortalDevice": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Output only. The resource path name."
        },
        "currentChannels": {
          "type": "array",
          "description": "Output only. Current channels with scores.",
          "deprecated": true,
          "items": {
            "$ref": "SasPortalChannelWithScore"
          },
          "readOnly": true
        },
        "preloadedConfig": {
          "$ref": "SasPortalDeviceConfig",
          "description": "Configuration of the device, as specified via SAS Portal API."
        },
        "displayName": {
          "description": "Device display name.",
          "type": "string"
        },
        "activeConfig": {
          "description": "Output only. Current configuration of the device as registered to the SAS.",
          "$ref": "SasPortalDeviceConfig"
        },
        "state": {
          "enumDescriptions": [
            "Unspecified state.",
            "Device created in the SAS Portal, however, not yet registered with SAS.",
            "Device registered with SAS.",
            "Device de-registered with SAS."
          ],
          "description": "Output only. Device state.",
          "enum": [
            "DEVICE_STATE_UNSPECIFIED",
            "RESERVED",
            "REGISTERED",
            "DEREGISTERED"
          ],
          "type": "string"
        },
        "deviceMetadata": {
          "description": "Device parameters that can be overridden by both SAS Portal and SAS registration requests.",
          "$ref": "SasPortalDeviceMetadata"
        },
        "grants": {
          "type": "array",
          "description": "Output only. Grants held by the device.",
          "items": {
            "$ref": "SasPortalDeviceGrant"
          }
        },
        "fccId": {
          "description": "The FCC identifier of the device. Refer to https://www.fcc.gov/oet/ea/fccid for FccID format. Accept underscores and periods because some test-SAS customers use them.",
          "type": "string"
        },
        "serialNumber": {
          "type": "string",
          "description": "A serial number assigned to the device by the device manufacturer."
        },
        "grantRangeAllowlists": {
          "type": "array",
          "description": "Only ranges that are within the allowlists are available for new grants.",
          "items": {
            "$ref": "SasPortalFrequencyRange"
          }
        }
      },
      "id": "SasPortalDevice"
    },
    "SasPortalDeviceConfig": {
      "id": "SasPortalDeviceConfig",
      "properties": {
        "callSign": {
          "description": "The call sign of the device operator.",
          "type": "string"
        },
        "isSigned": {
          "type": "boolean",
          "description": "Output only. Whether the configuration has been signed by a CPI."
        },
        "state": {
          "type": "string",
          "description": "State of the configuration.",
          "enum": [
            "DEVICE_CONFIG_STATE_UNSPECIFIED",
            "DRAFT",
            "FINAL"
          ],
          "enumDescriptions": [
            "",
            "",
            ""
          ]
        },
        "model": {
          "description": "Information about this device model.",
          "$ref": "SasPortalDeviceModel"
        },
        "installationParams": {
          "description": "Installation parameters for the device.",
          "$ref": "SasPortalInstallationParams"
        },
        "updateTime": {
          "description": "Output only. The last time the device configuration was edited.",
          "type": "string",
          "format": "google-datetime"
        },
        "category": {
          "description": "FCC category of the device.",
          "enum": [
            "DEVICE_CATEGORY_UNSPECIFIED",
            "DEVICE_CATEGORY_A",
            "DEVICE_CATEGORY_B"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified device category.",
            "Category A.",
            "Category B."
          ]
        },
        "airInterface": {
          "description": "Information about this device's air interface.",
          "$ref": "SasPortalDeviceAirInterface"
        },
        "measurementCapabilities": {
          "description": "Measurement reporting capabilities of the device.",
          "items": {
            "enumDescriptions": [
              "",
              "",
              ""
            ],
            "enum": [
              "MEASUREMENT_CAPABILITY_UNSPECIFIED",
              "MEASUREMENT_CAPABILITY_RECEIVED_POWER_WITH_GRANT",
              "MEASUREMENT_CAPABILITY_RECEIVED_POWER_WITHOUT_GRANT"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "userId": {
          "type": "string",
          "description": "The identifier of a device user."
        }
      },
      "description": "Information about the device configuration.",
      "type": "object"
    },
    "SasPortalInstallationParams": {
      "type": "object",
      "description": "Information about the device installation parameters.",
      "properties": {
        "antennaBeamwidth": {
          "type": "integer",
          "format": "int32",
          "description": "3-dB antenna beamwidth of the antenna in the horizontal-plane in degrees. This parameter is an unsigned integer having a value between 0 and 360 (degrees) inclusive; it is optional for Category A devices and conditional for Category B devices."
        },
        "heightType": {
          "enumDescriptions": [
            "Unspecified height type.",
            "AGL height is measured relative to the ground level.",
            "AMSL height is measured relative to the mean sea level."
          ],
          "type": "string",
          "description": "Specifies how the height is measured.",
          "enum": [
            "HEIGHT_TYPE_UNSPECIFIED",
            "HEIGHT_TYPE_AGL",
            "HEIGHT_TYPE_AMSL"
          ]
        },
        "antennaDowntilt": {
          "description": "Antenna downtilt in degrees and is an integer with a value between -90 and +90 inclusive; a negative value means the antenna is tilted up (above horizontal). This parameter is optional for Category A devices and conditional for Category B devices.",
          "type": "integer",
          "format": "int32"
        },
        "indoorDeployment": {
          "type": "boolean",
          "description": "Whether the device antenna is indoor or not. `true`: indoor. `false`: outdoor."
        },
        "antennaAzimuth": {
          "type": "integer",
          "format": "int32",
          "description": "Boresight direction of the horizontal plane of the antenna in degrees with respect to true north. The value of this parameter is an integer with a value between 0 and 359 inclusive. A value of 0 degrees means true north; a value of 90 degrees means east. This parameter is optional for Category A devices and conditional for Category B devices."
        },
        "eirpCapability": {
          "type": "integer",
          "format": "int32",
          "description": "This parameter is the maximum device EIRP in units of dBm/10MHz and is an integer with a value between -127 and +47 (dBm/10 MHz) inclusive. If not included, SAS interprets it as maximum allowable EIRP in units of dBm/10MHz for device category."
        },
        "cpeCbsdIndication": {
          "description": "If present, this parameter specifies whether the CBSD is a CPE-CBSD or not.",
          "type": "boolean"
        },
        "latitude": {
          "description": "Latitude of the device antenna location in degrees relative to the WGS 84 datum. The allowed range is from -90.000000 to +90.000000. Positive values represent latitudes north of the equator; negative values south of the equator.",
          "type": "number",
          "format": "double"
        },
        "horizontalAccuracy": {
          "type": "number",
          "format": "double",
          "description": "A positive number in meters to indicate accuracy of the device antenna horizontal location. This optional parameter should only be present if its value is less than the FCC requirement of 50 meters."
        },
        "height": {
          "description": "Device antenna height in meters. When the `heightType` parameter value is \"AGL\", the antenna height should be given relative to ground level. When the `heightType` parameter value is \"AMSL\", it is given with respect to WGS84 datum.",
          "type": "number",
          "format": "double"
        },
        "antennaGain": {
          "type": "number",
          "format": "double",
          "description": "Peak antenna gain in dBi. This parameter is a double with a value between -127 and +128 (dBi) inclusive. Part of Release 2 to support floating-point value"
        },
        "longitude": {
          "type": "number",
          "format": "double",
          "description": "Longitude of the device antenna location in degrees relative to the WGS 84 datum. The allowed range is from -180.000000 to +180.000000. Positive values represent longitudes east of the prime meridian; negative values west of the prime meridian."
        },
        "verticalAccuracy": {
          "type": "number",
          "format": "double",
          "description": "A positive number in meters to indicate accuracy of the device antenna vertical location. This optional parameter should only be present if its value is less than the FCC requirement of 3 meters."
        },
        "antennaModel": {
          "type": "string",
          "description": "If an external antenna is used, the antenna model is optionally provided in this field. The string has a maximum length of 128 octets."
        }
      },
      "id": "SasPortalInstallationParams"
    },
    "SasPortalValidateInstallerResponse": {
      "properties": {},
      "id": "SasPortalValidateInstallerResponse",
      "type": "object",
      "description": "Response for ValidateInstaller."
    },
    "SasPortalUpdateSignedDeviceRequest": {
      "id": "SasPortalUpdateSignedDeviceRequest",
      "properties": {
        "installerId": {
          "type": "string",
          "description": "Required. Unique installer ID (CPI ID) from the Certified Professional Installers database."
        },
        "encodedDevice": {
          "type": "string",
          "format": "byte",
          "description": "Required. The JSON Web Token signed using a CPI private key. Payload must be the JSON encoding of the device. The user_id field must be set."
        }
      },
      "description": "Request for UpdateSignedDevice.",
      "type": "object"
    },
    "SasPortalMigrateOrganizationRequest": {
      "description": "Request for [MigrateOrganization]. [spectrum.sas.portal.v1alpha1.Provisioning.MigrateOrganization]. GCP Project, Organization Info, and caller's GAIA ID should be retrieved from the RPC handler, and used to check authorization on SAS Portal organization and to create GCP Projects.",
      "type": "object",
      "id": "SasPortalMigrateOrganizationRequest",
      "properties": {
        "organizationId": {
          "description": "Required. Id of the SAS organization to be migrated.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "SasPortalListGcpProjectDeploymentsResponse": {
      "properties": {
        "deployments": {
          "type": "array",
          "description": "Optional. Deployments associated with the GCP project",
          "items": {
            "$ref": "SasPortalGcpProjectDeployment"
          }
        }
      },
      "id": "SasPortalListGcpProjectDeploymentsResponse",
      "type": "object",
      "description": "Response for [ListGcpProjectDeployments]."
    },
    "SasPortalMigrateOrganizationResponse": {
      "id": "SasPortalMigrateOrganizationResponse",
      "properties": {
        "deploymentAssociation": {
          "type": "array",
          "description": "Optional. A list of deployment association that were created for the migration, or current associations if they already exist.",
          "items": {
            "$ref": "SasPortalDeploymentAssociation"
          }
        }
      },
      "description": "Response for [MigrateOrganization]. [spectrum.sas.portal.v1alpha1.Provisioning.MigrateOrganization].",
      "type": "object"
    },
    "SasPortalGcpProjectDeployment": {
      "type": "object",
      "description": "Deployment associated with the GCP project. Includes whether SAS analytics has been enabled or not.",
      "properties": {
        "deployment": {
          "description": "Deployment associated with the GCP project.",
          "$ref": "SasPortalDeployment"
        },
        "hasEnabledAnalytics": {
          "type": "boolean",
          "description": "Whether SAS analytics has been enabled."
        }
      },
      "id": "SasPortalGcpProjectDeployment"
    },
    "SasPortalDeviceAirInterface": {
      "id": "SasPortalDeviceAirInterface",
      "properties": {
        "supportedSpec": {
          "description": "Optional. This field is related to the `radioTechnology` and provides the air interface specification that the CBSD is compliant with at the time of registration.",
          "type": "string"
        },
        "radioTechnology": {
          "type": "string",
          "description": "Conditional. This field specifies the radio access technology that is used for the CBSD.",
          "enum": [
            "RADIO_TECHNOLOGY_UNSPECIFIED",
            "E_UTRA",
            "CAMBIUM_NETWORKS",
            "FOUR_G_BBW_SAA_1",
            "NR",
            "DOODLE_CBRS",
            "CW",
            "REDLINE",
            "TARANA_WIRELESS",
            "FAROS"
          ],
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
          ]
        }
      },
      "description": "Information about the device's air interface.",
      "type": "object"
    },
    "SasPortalAssignment": {
      "type": "object",
      "description": "Associates `members` with a `role`.",
      "properties": {
        "role": {
          "description": "Required. Role that is assigned to `members`.",
          "type": "string"
        },
        "members": {
          "type": "array",
          "description": "The identities the role is assigned to. It can have the following values: * `{user_email}`: An email address that represents a specific Google account. For example: `alice@gmail.com`. * `{group_email}`: An email address that represents a Google group. For example, `viewers@gmail.com`.",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "SasPortalAssignment"
    },
    "SasPortalFrequencyRange": {
      "type": "object",
      "description": "Frequency range from `low_frequency` to `high_frequency`.",
      "properties": {
        "lowFrequencyMhz": {
          "description": "The lowest frequency of the frequency range in MHz.",
          "type": "number",
          "format": "double"
        },
        "highFrequencyMhz": {
          "description": "The highest frequency of the frequency range in MHz.",
          "type": "number",
          "format": "double"
        }
      },
      "id": "SasPortalFrequencyRange"
    },
    "SasPortalNode": {
      "description": "The Node.",
      "type": "object",
      "id": "SasPortalNode",
      "properties": {
        "name": {
          "description": "Output only. Resource name.",
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "The node's display name."
        },
        "sasUserIds": {
          "description": "User ids used by the devices belonging to this node.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      }
    },
    "SasPortalMigrateOrganizationMetadata": {
      "properties": {
        "operationState": {
          "enumDescriptions": [
            "Unspecified.",
            "Pending (Not started).",
            "In-progress.",
            "Done successfully.",
            "Done with errors."
          ],
          "description": "Output only. Current operation state",
          "enum": [
            "OPERATION_STATE_UNSPECIFIED",
            "OPERATION_STATE_PENDING",
            "OPERATION_STATE_RUNNING",
            "OPERATION_STATE_SUCCEEDED",
            "OPERATION_STATE_FAILED"
          ],
          "type": "string",
          "readOnly": true
        }
      },
      "id": "SasPortalMigrateOrganizationMetadata",
      "type": "object",
      "description": "Long-running operation metadata message returned by the MigrateOrganization."
    },
    "SasPortalOrganization": {
      "properties": {
        "displayName": {
          "type": "string",
          "description": "Name of organization"
        },
        "id": {
          "description": "Id of organization",
          "type": "string",
          "format": "int64"
        }
      },
      "id": "SasPortalOrganization",
      "type": "object",
      "description": "Organization details."
    },
    "SasPortalSetupSasAnalyticsRequest": {
      "type": "object",
      "description": "Request for the SetupSasAnalytics rpc.",
      "properties": {
        "userId": {
          "description": "Optional. User id to setup analytics for, if not provided the user id associated with the project is used. optional",
          "type": "string"
        }
      },
      "id": "SasPortalSetupSasAnalyticsRequest"
    },
    "SasPortalValidateInstallerRequest": {
      "type": "object",
      "description": "Request for ValidateInstaller.",
      "properties": {
        "installerId": {
          "description": "Required. Unique installer id (CPI ID) from the Certified Professional Installers database.",
          "type": "string"
        },
        "secret": {
          "description": "Required. Secret returned by the GenerateSecret.",
          "type": "string"
        },
        "encodedSecret": {
          "type": "string",
          "description": "Required. JSON Web Token signed using a CPI private key. Payload must include a \"secret\" claim whose value is the secret."
        }
      },
      "id": "SasPortalValidateInstallerRequest"
    },
    "SasPortalProvisionDeploymentRequest": {
      "properties": {
        "organizationId": {
          "type": "string",
          "format": "int64",
          "description": "Optional. If this field is set then a new deployment will be created under the organization specified by this id."
        },
        "newOrganizationDisplayName": {
          "description": "Optional. If this field is set, and a new SAS Portal Organization needs to be created, its display name will be set to the value of this field.",
          "type": "string"
        },
        "newDeploymentDisplayName": {
          "description": "Optional. If this field is set, and a new SAS Portal Deployment needs to be created, its display name will be set to the value of this field.",
          "type": "string"
        }
      },
      "id": "SasPortalProvisionDeploymentRequest",
      "type": "object",
      "description": "Request for [ProvisionDeployment]. [spectrum.sas.portal.v1alpha1.Provisioning.ProvisionDeployment]. GCP Project, Organization Info, and caller’s GAIA ID should be retrieved from the RPC handler, and used as inputs to create a new SAS organization (if not exists) and a new SAS deployment."
    },
    "SasPortalDeploymentAssociation": {
      "type": "object",
      "description": "Association between a gcp project and a SAS user id.",
      "properties": {
        "gcpProjectId": {
          "description": "GCP project id of the associated project.",
          "type": "string"
        },
        "userId": {
          "description": "User id of the deployment.",
          "type": "string"
        }
      },
      "id": "SasPortalDeploymentAssociation"
    },
    "SasPortalCreateSignedDeviceRequest": {
      "properties": {
        "installerId": {
          "type": "string",
          "description": "Required. Unique installer id (CPI ID) from the Certified Professional Installers database."
        },
        "encodedDevice": {
          "type": "string",
          "format": "byte",
          "description": "Required. JSON Web Token signed using a CPI private key. Payload must be the JSON encoding of the device. The user_id field must be set."
        }
      },
      "id": "SasPortalCreateSignedDeviceRequest",
      "type": "object",
      "description": "Request for CreateSignedDevice."
    },
    "SasPortalMoveDeploymentRequest": {
      "properties": {
        "destination": {
          "type": "string",
          "description": "Required. The name of the new parent resource node or customer to reparent the deployment under."
        }
      },
      "id": "SasPortalMoveDeploymentRequest",
      "type": "object",
      "description": "Request for MoveDeployment."
    },
    "SasPortalMoveNodeRequest": {
      "id": "SasPortalMoveNodeRequest",
      "properties": {
        "destination": {
          "description": "Required. The name of the new parent resource node or customer to reparent the node under.",
          "type": "string"
        }
      },
      "description": "Request for MoveNode.",
      "type": "object"
    },
    "SasPortalDeviceGrant": {
      "properties": {
        "maxEirp": {
          "type": "number",
          "format": "double",
          "description": "Maximum Equivalent Isotropically Radiated Power (EIRP) permitted by the grant. The maximum EIRP is in units of dBm/MHz. The value of `maxEirp` represents the average (RMS) EIRP that would be measured by the procedure defined in FCC part 96.41(e)(3)."
        },
        "state": {
          "enumDescriptions": [
            "",
            "The grant has been granted but the device is not heartbeating on it.",
            "The grant has been terminated by the SAS.",
            "The grant has been suspended by the SAS.",
            "The device is currently transmitting.",
            "The grant has expired."
          ],
          "type": "string",
          "description": "State of the grant.",
          "enum": [
            "GRANT_STATE_UNSPECIFIED",
            "GRANT_STATE_GRANTED",
            "GRANT_STATE_TERMINATED",
            "GRANT_STATE_SUSPENDED",
            "GRANT_STATE_AUTHORIZED",
            "GRANT_STATE_EXPIRED"
          ]
        },
        "suspensionReason": {
          "description": "If the grant is suspended, the reason(s) for suspension.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "lastHeartbeatTransmitExpireTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "The transmit expiration time of the last heartbeat."
        },
        "moveList": {
          "description": "The DPA move lists on which this grant appears.",
          "items": {
            "$ref": "SasPortalDpaMoveList"
          },
          "type": "array"
        },
        "expireTime": {
          "description": "The expiration time of the grant.",
          "type": "string",
          "format": "google-datetime"
        },
        "frequencyRange": {
          "description": "The transmission frequency range.",
          "$ref": "SasPortalFrequencyRange"
        },
        "channelType": {
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "type": "string",
          "description": "Type of channel used.",
          "enum": [
            "CHANNEL_TYPE_UNSPECIFIED",
            "CHANNEL_TYPE_GAA",
            "CHANNEL_TYPE_PAL"
          ]
        },
        "grantId": {
          "type": "string",
          "description": "Grant Id."
        }
      },
      "id": "SasPortalDeviceGrant",
      "type": "object",
      "description": "Device grant. It is an authorization provided by the Spectrum Access System to a device to transmit using specified operating parameters after a successful heartbeat by the device."
    },
    "SasPortalSetupSasAnalyticsMetadata": {
      "id": "SasPortalSetupSasAnalyticsMetadata",
      "properties": {},
      "description": "Metadata returned by the long running operation for the SetupSasAnalytics rpc.",
      "type": "object"
    },
    "SasPortalListLegacyOrganizationsResponse": {
      "type": "object",
      "description": "Response for [ListLegacyOrganizations]. [spectrum.sas.portal.v1alpha1.Provisioning.ListLegacyOrganizations].",
      "properties": {
        "organizations": {
          "description": "Optional. Legacy SAS organizations.",
          "items": {
            "$ref": "SasPortalOrganization"
          },
          "type": "array"
        }
      },
      "id": "SasPortalListLegacyOrganizationsResponse"
    },
    "SasPortalSetPolicyRequest": {
      "properties": {
        "disableNotification": {
          "type": "boolean",
          "description": "Optional. Set the field as `true` to disable the onboarding notification."
        },
        "policy": {
          "$ref": "SasPortalPolicy",
          "description": "Required. The policy to be applied to the `resource`."
        },
        "resource": {
          "type": "string",
          "description": "Required. The resource for which the policy is being specified. This policy replaces any existing policy."
        }
      },
      "id": "SasPortalSetPolicyRequest",
      "type": "object",
      "description": "Request message for `SetPolicy` method."
    },
    "SasPortalListCustomersResponse": {
      "properties": {
        "nextPageToken": {
          "description": "A pagination token returned from a previous call to ListCustomers that indicates from where listing should continue. If the field is missing or empty, it means there are no more customers.",
          "type": "string"
        },
        "customers": {
          "description": "The list of customers that match the request.",
          "items": {
            "$ref": "SasPortalCustomer"
          },
          "type": "array"
        }
      },
      "id": "SasPortalListCustomersResponse",
      "type": "object",
      "description": "Response for `ListCustomers`."
    },
    "SasPortalProvisionDeploymentResponse": {
      "properties": {
        "errorMessage": {
          "type": "string",
          "description": "Optional. Optional error message if the provisioning request is not successful."
        }
      },
      "id": "SasPortalProvisionDeploymentResponse",
      "type": "object",
      "description": "Response for [ProvisionDeployment]. [spectrum.sas.portal.v1alpha1.Provisioning.ProvisionDeployment]."
    },
    "SasPortalStatus": {
      "type": "object",
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "properties": {
        "message": {
          "type": "string",
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
        },
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "type": "integer",
          "format": "int32"
        },
        "details": {
          "type": "array",
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "additionalProperties": {
              "description": "Properties of the object. Contains field @type with type URL.",
              "type": "any"
            },
            "type": "object"
          }
        }
      },
      "id": "SasPortalStatus"
    },
    "SasPortalListDevicesResponse": {
      "type": "object",
      "description": "Response for ListDevices.",
      "properties": {
        "devices": {
          "type": "array",
          "description": "The devices that match the request.",
          "items": {
            "$ref": "SasPortalDevice"
          }
        },
        "nextPageToken": {
          "type": "string",
          "description": "A pagination token returned from a previous call to ListDevices that indicates from where listing should continue. If the field is missing or empty, it means there is no more devices."
        }
      },
      "id": "SasPortalListDevicesResponse"
    },
    "SasPortalOperation": {
      "type": "object",
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
        },
        "error": {
          "$ref": "SasPortalStatus",
          "description": "The error result of the operation in case of failure or cancellation."
        },
        "metadata": {
          "type": "object",
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          }
        },
        "response": {
          "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "type": "object"
        },
        "done": {
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
          "type": "boolean"
        }
      },
      "id": "SasPortalOperation"
    },
    "SasPortalGenerateSecretResponse": {
      "properties": {
        "secret": {
          "type": "string",
          "description": "The secret generated by the string and used by ValidateInstaller."
        }
      },
      "id": "SasPortalGenerateSecretResponse",
      "type": "object",
      "description": "Response for GenerateSecret."
    },
    "SasPortalListNodesResponse": {
      "type": "object",
      "description": "Response for ListNodes.",
      "properties": {
        "nodes": {
          "description": "The nodes that match the request.",
          "items": {
            "$ref": "SasPortalNode"
          },
          "type": "array"
        },
        "nextPageToken": {
          "type": "string",
          "description": "A pagination token returned from a previous call to ListNodes that indicates from where listing should continue. If the field is missing or empty, it means there is no more nodes."
        }
      },
      "id": "SasPortalListNodesResponse"
    },
    "SasPortalGetPolicyRequest": {
      "type": "object",
      "description": "Request message for `GetPolicy` method.",
      "properties": {
        "resource": {
          "type": "string",
          "description": "Required. The resource for which the policy is being requested."
        }
      },
      "id": "SasPortalGetPolicyRequest"
    },
    "SasPortalDeviceMetadata": {
      "id": "SasPortalDeviceMetadata",
      "properties": {
        "antennaModel": {
          "description": "If populated, the Antenna Model Pattern to use. Format is: `RecordCreatorId:PatternId`",
          "type": "string"
        },
        "nrqzValidated": {
          "readOnly": true,
          "type": "boolean",
          "description": "Output only. Set to `true` if a CPI has validated that they have coordinated with the National Quiet Zone office.",
          "deprecated": true
        },
        "commonChannelGroup": {
          "description": "Common Channel Group (CCG). A group of CBSDs in the same ICG requesting a common primary channel assignment. For more details, see [CBRSA-TS-2001 V3.0.0](https://ongoalliance.org/wp-content/uploads/2020/02/CBRSA-TS-2001-V3.0.0_Approved-for-publication.pdf).",
          "type": "string"
        },
        "nrqzValidation": {
          "readOnly": true,
          "$ref": "SasPortalNrqzValidation",
          "description": "Output only. National Radio Quiet Zone validation info."
        },
        "interferenceCoordinationGroup": {
          "description": "Interference Coordination Group (ICG). A group of CBSDs that manage their own interference with the group. For more details, see [CBRSA-TS-2001 V3.0.0](https://ongoalliance.org/wp-content/uploads/2020/02/CBRSA-TS-2001-V3.0.0_Approved-for-publication.pdf).",
          "type": "string"
        }
      },
      "description": "Device data overridable by both SAS Portal and registration requests.",
      "type": "object"
    },
    "SasPortalDeployment": {
      "description": "The Deployment.",
      "type": "object",
      "id": "SasPortalDeployment",
      "properties": {
        "frns": {
          "description": "Output only. The FCC Registration Numbers (FRNs) copied from its direct parent.",
          "items": {
            "type": "string"
          },
          "type": "array",
          "readOnly": true
        },
        "name": {
          "type": "string",
          "description": "Output only. Resource name.",
          "readOnly": true
        },
        "displayName": {
          "description": "The deployment's display name.",
          "type": "string"
        },
        "sasUserIds": {
          "type": "array",
          "description": "User ID used by the devices belonging to this deployment. Each deployment should be associated with one unique user ID.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "SasPortalPolicy": {
      "description": "Defines an access control policy to the resources.",
      "type": "object",
      "id": "SasPortalPolicy",
      "properties": {
        "etag": {
          "type": "string",
          "format": "byte",
          "description": "The etag is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the etag in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An etag is returned in the response to GetPolicy, and systems are expected to put that etag in the request to SetPolicy to ensure that their change will be applied to the same version of the policy. If no etag is provided in the call to GetPolicy, then the existing policy is overwritten blindly."
        },
        "assignments": {
          "description": "List of assignments",
          "items": {
            "$ref": "SasPortalAssignment"
          },
          "type": "array"
        }
      }
    },
    "SasPortalEmpty": {
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
      "type": "object",
      "id": "SasPortalEmpty",
      "properties": {}
    },
    "SasPortalCustomer": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Output only. Resource name of the customer."
        },
        "displayName": {
          "description": "Required. Name of the organization that the customer entity represents.",
          "type": "string"
        },
        "sasUserIds": {
          "type": "array",
          "description": "User IDs used by the devices belonging to this customer.",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "SasPortalCustomer",
      "type": "object",
      "description": "Entity representing a SAS customer."
    }
  },
  "fullyEncodeReservedExpansion": true,
  "ownerDomain": "google.com",
  "discoveryVersion": "v1",
  "id": "sasportal:v1alpha1",
  "mtlsRootUrl": "https://sasportal.mtls.googleapis.com/",
  "kind": "discovery#restDescription",
  "servicePath": "",
  "batchPath": "batch",
  "version_module": true,
  "version": "v1alpha1",
  "parameters": {
    "uploadType": {
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "fields": {
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query",
      "type": "string"
    },
    "key": {
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query",
      "type": "string"
    },
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "alt": {
      "description": "Data format for response.",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "location": "query",
      "type": "string",
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ]
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "oauth_token": {
      "description": "OAuth 2.0 token for the current user.",
      "location": "query",
      "type": "string"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "location": "query",
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ]
    },
    "prettyPrint": {
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query",
      "type": "boolean"
    },
    "quotaUser": {
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query",
      "type": "string"
    }
  },
  "baseUrl": "https://sasportal.googleapis.com/",
  "protocol": "rest",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "basePath": "",
  "description": "",
  "revision": "20260305",
  "documentationLink": "https://developers.google.com/spectrum-access-system/"
}
