{
  "swagger": "2.0",
  "info": {
    "title": "Sunrise Studio",
    "version": "0.1.0"
  },
  "tags": [
    {
      "name": "SunriseStudioService"
    }
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/api/v1/admin/replication/reset": {
      "post": {
        "operationId": "SunriseStudioService_TriggerReplicationReset",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceTriggerReplicationResetResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/admin/replication/status": {
      "get": {
        "operationId": "SunriseStudioService_GetReplicationResetStatus",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceGetReplicationResetStatusResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/admin/users": {
      "get": {
        "operationId": "SunriseStudioService_ListSystemUsers",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListSystemUsersResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "SYSTEM_USER_TYPE_UNSPECIFIED",
              "SYSTEM_USER_TYPE_PERSON",
              "SYSTEM_USER_TYPE_MACHINE"
            ],
            "default": "SYSTEM_USER_TYPE_UNSPECIFIED"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_CreateSystemUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityUser"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "user.id",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.username",
            "description": "For human users, this is their email address.\nFor machine users such as the factory PC, this is their hostname.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.firstName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.lastName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.password",
            "description": "When creating a user, the raw password is inputted using this field.\nWhen the user is created, the password is hashed this field is replaced\nwith the hashed password before being stored in the database.\nWhen a user tries to login, the input password is hashed and compared\nwith this field.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.role",
            "description": "For users that belong to an organization, the role is set on the\nUserOrganization object.\n\n - ROLE_SUPER_ADMIN: Global admin role.\n - ROLE_SUPER_USER: Global non-admin role.\n - ROLE_ORG_ADMIN: Admin role for an organization.\n - ROLE_ORG_USER: Non-admin role for an organization.\n - ROLE_FACTORY: Factory role.\n - ROLE_DELIVERY_VEHICLE: Delivery vehicle role.",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "ROLE_UNSPECIFIED",
              "ROLE_SUPER_ADMIN",
              "ROLE_SUPER_USER",
              "ROLE_ORG_ADMIN",
              "ROLE_ORG_USER",
              "ROLE_FACTORY",
              "ROLE_DELIVERY_VEHICLE"
            ],
            "default": "ROLE_UNSPECIFIED"
          },
          {
            "name": "user.sessionId",
            "description": "Identifies the current session id.\nChanging this value will invalidate all associated refresh tokens.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.isDisabled",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "user.email",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.apiKey",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/admin/users/{userId}": {
      "delete": {
        "operationId": "SunriseStudioService_DeleteSystemUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "patch": {
        "operationId": "SunriseStudioService_UpdateSystemUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityUser"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "user",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/entityUser"
            }
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "operationId": "SunriseStudioService_AuthLogin",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceAuthLoginResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "password",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ],
        "security": []
      }
    },
    "/api/v1/auth/refresh": {
      "post": {
        "operationId": "SunriseStudioService_AuthRefresh",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceAuthRefreshResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "refreshToken",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ],
        "security": []
      }
    },
    "/api/v1/generatePassword": {
      "post": {
        "operationId": "SunriseStudioService_GeneratePassword",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceGeneratePasswordResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "length",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "punctuation",
            "in": "query",
            "required": false,
            "type": "boolean"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations": {
      "get": {
        "operationId": "SunriseStudioService_ListOrganizations",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListOrganizationsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_CreateOrganization",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityOrganization"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organization.id",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "organization.name",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}": {
      "get": {
        "operationId": "SunriseStudioService_GetOrganization",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityOrganization"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "delete": {
        "operationId": "SunriseStudioService_DeleteOrganization",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "patch": {
        "operationId": "SunriseStudioService_UpdateOrganization",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityOrganization"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "organization",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/entityOrganization"
            }
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/kmz": {
      "get": {
        "operationId": "SunriseStudioService_ListKmzs",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListKmzsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_ImportKmz",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceImportKmzResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "kmzId",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "uploadId",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/kmz/{kmzId}": {
      "get": {
        "operationId": "SunriseStudioService_GetKmz",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/geoKmz"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "kmzId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/kmz/{kmzId}/layers/{layer}": {
      "get": {
        "operationId": "SunriseStudioService_GetKmzLayerJson",
        "responses": {
          "200": {
            "description": "A successful response.(streaming responses)",
            "schema": {
              "type": "string",
              "format": "binary",
              "properties": {},
              "title": "Free form byte stream"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "kmzId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "layer",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/operations/{operationId}": {
      "get": {
        "operationId": "SunriseStudioService_GetOrganizationOperation",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/googlelongrunningOperation"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects": {
      "get": {
        "operationId": "SunriseStudioService_ListProjects",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListProjectsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_CreateProject",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityProject"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "project.id",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "project.parentOrganizationId",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "project.displayName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "project.timeZone",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "project.defaultMapCenter.longitude",
            "in": "query",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "project.defaultMapCenter.latitude",
            "in": "query",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "project.startDate.year",
            "description": "Year.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "project.startDate.month",
            "description": "Month of year (1-12).",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "project.startDate.day",
            "description": "Day of month.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "project.endDate.year",
            "description": "Year.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "project.endDate.month",
            "description": "Month of year (1-12).",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "project.endDate.day",
            "description": "Day of month.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "project.utmCrs",
            "description": "Find UTM zone here: https://mangomap.com/robertyoung/maps/69585/what-utm-zone-am-i-in-#\nThen find CRS here: https://epsg.io/ Search for \"WGS 84 UTM zone {zone}{N/S}\"\nFor example, Phoenix, AZ is in UTM zone 12N which is EPSG:32612 for WGS 84 CRS.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "project.inactive",
            "description": "Inactive projects are hidden by default in the UI.",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "project.routingDisabled",
            "description": "When true, the contraction hierarchy is not loaded for this project.",
            "in": "query",
            "required": false,
            "type": "boolean"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}": {
      "get": {
        "operationId": "SunriseStudioService_GetProject",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityProject"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "PROJECT_RELATION_UNSPECIFIED",
                "PROJECT_RELATION_BHA_SPECS",
                "PROJECT_RELATION_MODULE_SPECS",
                "PROJECT_RELATION_PIER_SPECS",
                "PROJECT_RELATION_RAIL_SPECS",
                "PROJECT_RELATION_ROW_SPEC_PIERS",
                "PROJECT_RELATION_ROW_SPEC_TORQUE_TUBES",
                "PROJECT_RELATION_ROW_SPECS",
                "PROJECT_RELATION_TORQUE_TUBE_SPECS"
              ]
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "delete": {
        "operationId": "SunriseStudioService_DeleteProject",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/googlelongrunningOperation"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "patch": {
        "operationId": "SunriseStudioService_UpdateProject",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityProject"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "project",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/entityProject"
            }
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/bays": {
      "get": {
        "operationId": "SunriseStudioService_ListBays",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListBaysResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "bayIds",
            "description": "Optional filter to only return bays with these ids.",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "put": {
        "operationId": "SunriseStudioService_UpdateBays",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/blocks": {
      "get": {
        "operationId": "SunriseStudioService_ListBlocks",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListBlocksResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "BLOCK_RELATION_UNSPECIFIED",
                "BLOCK_RELATION_ROWS",
                "BLOCK_RELATION_BAYS",
                "BLOCK_RELATION_BAY_SCHEDULES"
              ]
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/changeNotifications": {
      "get": {
        "operationId": "SunriseStudioService_GetProjectChangeNotifications",
        "responses": {
          "200": {
            "description": "A successful response.(streaming responses)",
            "schema": {
              "type": "object",
              "properties": {
                "result": {
                  "$ref": "#/definitions/serviceProjectChangeNotification"
                },
                "error": {
                  "$ref": "#/definitions/rpcStatus"
                }
              },
              "title": "Stream result of serviceProjectChangeNotification"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "lastNotificationId",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "authToken",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/contractionHierarchy": {
      "get": {
        "operationId": "SunriseStudioService_GetContractionHierarchy",
        "responses": {
          "200": {
            "description": "A successful response.(streaming responses)",
            "schema": {
              "type": "string",
              "format": "binary",
              "properties": {},
              "title": "Free form byte stream"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "authToken",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "put": {
        "operationId": "SunriseStudioService_UpdateContractionHierarchy",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "uploadId",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/deliveryVehicles": {
      "get": {
        "operationId": "SunriseStudioService_ListDeliveryVehicles",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListDeliveryVehiclesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "deliveryVehicleIds",
            "description": "Optional filter to only return delivery vehicles with these ids.",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_CreateDeliveryVehicle",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityDeliveryVehicle"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "deliveryVehicle.id",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "deliveryVehicle.parentProjectId",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "deliveryVehicle.displayName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "deliveryVehicle.currentLocation.longitude",
            "in": "query",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "deliveryVehicle.currentLocation.latitude",
            "in": "query",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "deliveryVehicle.machineName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "deliveryVehicle.lastLocationUpdateTime",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/deliveryVehicles/{deliveryVehicleId}": {
      "delete": {
        "operationId": "SunriseStudioService_DeleteDeliveryVehicle",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "deliveryVehicleId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "patch": {
        "operationId": "SunriseStudioService_UpdateDeliveryVehicle",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityDeliveryVehicle"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "deliveryVehicleId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "deliveryVehicle",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/entityDeliveryVehicle"
            }
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/factories": {
      "get": {
        "operationId": "SunriseStudioService_ListFactories",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListFactoriesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_CreateFactory",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityFactory"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "factory.id",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "factory.parentProjectId",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "factory.displayName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "factory.currentLocation.longitude",
            "in": "query",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "factory.currentLocation.latitude",
            "in": "query",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "factory.machineName",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/factories/{factoryId}": {
      "delete": {
        "operationId": "SunriseStudioService_DeleteFactory",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "factoryId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "patch": {
        "operationId": "SunriseStudioService_UpdateFactory",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityFactory"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "factoryId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "factory",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/entityFactory"
            }
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules": {
      "get": {
        "operationId": "SunriseStudioService_ListSchedules",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListSchedulesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules/{scheduleId}": {
      "get": {
        "operationId": "SunriseStudioService_GetSchedule",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entitySchedule"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "delete": {
        "operationId": "SunriseStudioService_DeleteSchedule",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules/{scheduleId}/bays": {
      "get": {
        "operationId": "SunriseStudioService_ListBaySchedules",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListBaySchedulesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules/{scheduleId}/factoryPlacements": {
      "get": {
        "operationId": "SunriseStudioService_ListFactoryPlacements",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListFactoryPlacementsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "put": {
        "operationId": "SunriseStudioService_UpdateFactoryPlacements",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          },
          {
            "name": "deleteIds",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules/{scheduleId}:copy": {
      "post": {
        "operationId": "SunriseStudioService_CopySchedule",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entitySchedule"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "displayName",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules/{scheduleId}:publish": {
      "post": {
        "operationId": "SunriseStudioService_PublishSchedule",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/servicePublishScheduleResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/schedules/{scheduleId}:rename": {
      "post": {
        "operationId": "SunriseStudioService_RenameSchedule",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entitySchedule"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "displayName",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/siteFeatureTypes": {
      "get": {
        "operationId": "SunriseStudioService_ListSiteFeatureTypes",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListSiteFeatureTypesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/siteFeatures": {
      "get": {
        "operationId": "SunriseStudioService_ListSiteFeatures",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListSiteFeaturesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "delete": {
        "operationId": "SunriseStudioService_DeleteSiteFeatures",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "siteFeatureTypes",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "SITE_FEATURE_TYPE_UNSPECIFIED",
                "SITE_FEATURE_TYPE_ROAD",
                "SITE_FEATURE_TYPE_FENCE"
              ]
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}/siteFeatures:import": {
      "post": {
        "operationId": "SunriseStudioService_ImportSiteFeatures",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects/{projectId}:export": {
      "get": {
        "operationId": "SunriseStudioService_ExportProject",
        "responses": {
          "200": {
            "description": "A successful response.(streaming responses)",
            "schema": {
              "type": "string",
              "format": "binary",
              "properties": {},
              "title": "Free form byte stream"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "authToken",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/projects:import": {
      "post": {
        "operationId": "SunriseStudioService_ImportProject",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/googlelongrunningOperation"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "uploadId",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/users": {
      "get": {
        "operationId": "SunriseStudioService_ListOrganizationUsers",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListOrganizationUsersResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "post": {
        "operationId": "SunriseStudioService_CreateOrganizationUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityUser"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "user.id",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.username",
            "description": "For human users, this is their email address.\nFor machine users such as the factory PC, this is their hostname.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.firstName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.lastName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.password",
            "description": "When creating a user, the raw password is inputted using this field.\nWhen the user is created, the password is hashed this field is replaced\nwith the hashed password before being stored in the database.\nWhen a user tries to login, the input password is hashed and compared\nwith this field.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.role",
            "description": "For users that belong to an organization, the role is set on the\nUserOrganization object.\n\n - ROLE_SUPER_ADMIN: Global admin role.\n - ROLE_SUPER_USER: Global non-admin role.\n - ROLE_ORG_ADMIN: Admin role for an organization.\n - ROLE_ORG_USER: Non-admin role for an organization.\n - ROLE_FACTORY: Factory role.\n - ROLE_DELIVERY_VEHICLE: Delivery vehicle role.",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "ROLE_UNSPECIFIED",
              "ROLE_SUPER_ADMIN",
              "ROLE_SUPER_USER",
              "ROLE_ORG_ADMIN",
              "ROLE_ORG_USER",
              "ROLE_FACTORY",
              "ROLE_DELIVERY_VEHICLE"
            ],
            "default": "ROLE_UNSPECIFIED"
          },
          {
            "name": "user.sessionId",
            "description": "Identifies the current session id.\nChanging this value will invalidate all associated refresh tokens.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.isDisabled",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "user.email",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "user.apiKey",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/organizations/{organizationId}/users/{userId}": {
      "delete": {
        "operationId": "SunriseStudioService_DeleteOrganizationUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      },
      "patch": {
        "operationId": "SunriseStudioService_UpdateOrganizationUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/entityUser"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "user",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/entityUser"
            }
          },
          {
            "name": "updateMask.paths",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi"
          }
        ],
        "tags": [
          "SunriseStudioService"
        ]
      }
    },
    "/api/v1/timeZones": {
      "get": {
        "operationId": "SunriseStudioService_ListTimeZones",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/serviceListTimeZonesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "SunriseStudioService"
        ]
      }
    }
  },
  "definitions": {
    "BayDamperInfo": {
      "type": "object",
      "properties": {
        "location": {
          "$ref": "#/definitions/entityBayDamperPierLocation",
          "description": "The location of the damper pier."
        },
        "damperType": {
          "$ref": "#/definitions/entityDamperType",
          "description": "The damper type."
        }
      }
    },
    "ImportSiteFeaturesRequestImportTask": {
      "type": "object",
      "properties": {
        "kmzLayer": {
          "type": "string"
        },
        "siteFeatureType": {
          "$ref": "#/definitions/entitySiteFeatureType"
        }
      }
    },
    "ProjectChangeNotificationChange": {
      "type": "object",
      "properties": {
        "type": {
          "$ref": "#/definitions/entityEntityType",
          "description": "The type of entity that was changed."
        },
        "upsertedIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional ids to filter which entities were changed."
        },
        "deletedIds": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ProjectChangeNotificationVehiclePosition": {
      "type": "object",
      "properties": {
        "vehicleId": {
          "type": "string"
        },
        "latitude": {
          "type": "number",
          "format": "double"
        },
        "longitude": {
          "type": "number",
          "format": "double"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time"
        },
        "bayId": {
          "type": "string",
          "description": "The bay this vehicle is currently carrying (\"\" if none). Used to color the\nassigned bay on the map."
        },
        "holdingClamp": {
          "$ref": "#/definitions/serviceHoldingClamp",
          "description": "The clamp holding that bay (drives the blue/green status bar)."
        }
      },
      "description": "Live delivery-vehicle positions. This is transient telemetry relayed\nstraight to subscribers (e.g. the website); it is NOT persisted to any\ndatabase and never enters the entity merkle tree."
    },
    "apiHttpBody": {
      "type": "object",
      "properties": {
        "contentType": {
          "type": "string",
          "description": "The HTTP Content-Type header value specifying the content type of the body."
        },
        "data": {
          "type": "string",
          "format": "byte",
          "description": "The HTTP request/response body as raw binary."
        },
        "extensions": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/protobufAny"
          },
          "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs."
        }
      },
      "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n    message GetResourceRequest {\n      // A unique request id.\n      string request_id = 1;\n\n      // The raw HTTP body is bound to this field.\n      google.api.HttpBody http_body = 2;\n\n    }\n\n    service ResourceService {\n      rpc GetResource(GetResourceRequest)\n        returns (google.api.HttpBody);\n      rpc UpdateResource(google.api.HttpBody)\n        returns (google.protobuf.Empty);\n\n    }\n\nExample with streaming methods:\n\n    service CaldavService {\n      rpc GetCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n      rpc UpdateCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n\n    }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged."
    },
    "authRole": {
      "type": "string",
      "enum": [
        "ROLE_UNSPECIFIED",
        "ROLE_SUPER_ADMIN",
        "ROLE_SUPER_USER",
        "ROLE_ORG_ADMIN",
        "ROLE_ORG_USER",
        "ROLE_FACTORY",
        "ROLE_DELIVERY_VEHICLE"
      ],
      "default": "ROLE_UNSPECIFIED",
      "description": "- ROLE_SUPER_ADMIN: Global admin role.\n - ROLE_SUPER_USER: Global non-admin role.\n - ROLE_ORG_ADMIN: Admin role for an organization.\n - ROLE_ORG_USER: Non-admin role for an organization.\n - ROLE_FACTORY: Factory role.\n - ROLE_DELIVERY_VEHICLE: Delivery vehicle role.",
      "title": "Next ID: 7"
    },
    "entityBay": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The bay id."
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project id."
        },
        "serialNumber": {
          "type": "string",
          "title": "Serial number that identifies the bay within the project.\nFormat: \u003cblock_number\u003eS\u003csection_number\u003eR\u003crow_number\u003eP\u003crow_position + 1\u003e"
        },
        "parentBlockId": {
          "type": "string",
          "description": "The parent block id."
        },
        "parentRowId": {
          "type": "string",
          "description": "The parent row id."
        },
        "status": {
          "$ref": "#/definitions/entityBayStatus",
          "description": "The bay status."
        },
        "multiLineString": {
          "$ref": "#/definitions/geoMultiLineString",
          "description": "A multi-line string representing the bay's geometry."
        },
        "damperInfo": {
          "$ref": "#/definitions/BayDamperInfo",
          "description": "Information about the damper. Not every pier has a damper, so this field\nis optional."
        },
        "orientation": {
          "$ref": "#/definitions/entityBayOrientation",
          "description": "The orientation of the bay."
        },
        "positiveLeadOrientation": {
          "$ref": "#/definitions/entityBayPositiveLeadOrientation",
          "description": "The orientation of the positive lead."
        },
        "rowPosition": {
          "type": "integer",
          "format": "int64",
          "description": "The 0-based position of the bay within the row.\nThe first position is the northernmost position."
        },
        "receivingBayId": {
          "type": "string",
          "description": "Bays that insert directly into the motor pier do not have a receiving bay."
        },
        "insertionOrder": {
          "type": "integer",
          "format": "int64",
          "description": "The 0-based insertion order. Bays should be inserted in ascending order\nof this value."
        },
        "torqueTubeSpecId": {
          "type": "string",
          "description": "The torque tube spec id.\n\nNote that each bay also has an associated torque tube entity. The torque\ntube spec id is replicated here because the spec holds critical\ninformation about the bay and this saves an extra lookup."
        },
        "buildStartTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual build start time."
        },
        "buildEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual build end time."
        },
        "deliveryStartTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual delivery start time."
        },
        "deliveryEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual delivery end time."
        },
        "installStartTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual install start time."
        },
        "installEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual install end time."
        },
        "returnStartTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual start time when the delivery vehicle returns to the factory."
        },
        "returnEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The actual end time when the delivery vehicle returns to the factory."
        },
        "builtByFactoryId": {
          "type": "string",
          "description": "The factory that built the bay."
        },
        "moduleSerialNumbers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The serial numbers of the modules that are installed on the bay.\nThe serial numbers are ordered from the swaged end to the non-swaged end."
        },
        "queuedByFactoryId": {
          "type": "string",
          "description": "Live cross-factory build-queue state, written by the factory that currently\nhas this bay queued or building, and cleared when it releases the bay. This\nis operational \"who is on it right now\" state, not the plan -- scheduling\nlives in BaySchedule."
        },
        "queuePosition": {
          "type": "integer",
          "format": "int32",
          "description": "The bay's 1-based position in that factory's pending queue.\n0 means the factory has already taken the bay (locked / building)."
        },
        "queuedForVehicleId": {
          "type": "string",
          "description": "The delivery vehicle assigned to carry this bay. Empty until pickup, since\nthe DV is bound geometrically when the bay transfers off BOB."
        },
        "queueUpdateTime": {
          "type": "string",
          "format": "date-time",
          "description": "Last time the owning factory refreshed the fields above. Readers treat a\nstale mark as gone, so a factory that dies mid-queue does not leave ghost\nbays on everyone else's map."
        },
        "installColor": {
          "type": "integer",
          "format": "int32",
          "description": "Shared install indicator color, using the factory BannerColor values 0..13.\n-1 explicitly clears an assignment. Presence matters: absent means never\nconfigured, while green (0) and cleared (-1) must survive legacy imports."
        },
        "installDirection": {
          "type": "integer",
          "format": "int64",
          "description": "Shared build direction: 0 = right, 1 = left. Presence distinguishes an\nexplicit right assignment from a project not yet configured for install."
        },
        "bha": {
          "$ref": "#/definitions/entityBha"
        },
        "torqueTube": {
          "$ref": "#/definitions/entityTorqueTube"
        },
        "tmr": {
          "$ref": "#/definitions/entityTmr"
        },
        "cantileveredRails": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRail"
          }
        },
        "cantileveredModules": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityModule"
          }
        },
        "nonCantileveredRails": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRail"
          }
        },
        "nonCantileveredModules": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityModule"
          }
        },
        "scheduleMetadata": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/entityBaySchedule"
          },
          "description": "Map of Schedule.id to BaySchedule."
        }
      },
      "title": "Next ID: 35"
    },
    "entityBayDamperPierLocation": {
      "type": "string",
      "enum": [
        "BAY_DAMPER_PIER_LOCATION_UNSPECIFIED",
        "BAY_DAMPER_PIER_LOCATION_SWAGED_END",
        "BAY_DAMPER_PIER_LOCATION_NON_SWAGED_END"
      ],
      "default": "BAY_DAMPER_PIER_LOCATION_UNSPECIFIED",
      "description": " - BAY_DAMPER_PIER_LOCATION_UNSPECIFIED: Bay does not touch a pier that requires a damper.\n - BAY_DAMPER_PIER_LOCATION_SWAGED_END: The damper pier is on the swaged end.\n - BAY_DAMPER_PIER_LOCATION_NON_SWAGED_END: The damper pier is on the non-swaged end."
    },
    "entityBayOrientation": {
      "type": "string",
      "enum": [
        "BAY_ORIENTATION_UNSPECIFIED",
        "BAY_ORIENTATION_SWAGED_END_NORTH",
        "BAY_ORIENTATION_SWAGED_END_SOUTH"
      ],
      "default": "BAY_ORIENTATION_UNSPECIFIED",
      "description": " - BAY_ORIENTATION_UNSPECIFIED: Unspecified.\n - BAY_ORIENTATION_SWAGED_END_NORTH: The swaged end of the tube points north.\n - BAY_ORIENTATION_SWAGED_END_SOUTH: The swaged end of the tube points south."
    },
    "entityBayPositiveLeadOrientation": {
      "type": "string",
      "enum": [
        "BAY_POSITIVE_LEAD_ORIENTATION_UNSPECIFIED",
        "BAY_POSITIVE_LEAD_ORIENTATION_NORTH",
        "BAY_POSITIVE_LEAD_ORIENTATION_SOUTH"
      ],
      "default": "BAY_POSITIVE_LEAD_ORIENTATION_UNSPECIFIED",
      "description": " - BAY_POSITIVE_LEAD_ORIENTATION_UNSPECIFIED: Unspecified.\n - BAY_POSITIVE_LEAD_ORIENTATION_NORTH: The positive lead is on the north side.\n - BAY_POSITIVE_LEAD_ORIENTATION_SOUTH: The positive lead is on the south side."
    },
    "entityBaySchedule": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The bay schedule id."
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "parentScheduleId": {
          "type": "string",
          "description": "The parent schedule."
        },
        "parentBayId": {
          "type": "string",
          "description": "The bay that is being scheduled."
        },
        "factoryId": {
          "type": "string",
          "description": "The factory that will build the bay."
        },
        "deliveryVehicleId": {
          "type": "string",
          "description": "The delivery vehicle that will pick up and deliver the bay to the row."
        },
        "deliveryVehicleOrientation": {
          "$ref": "#/definitions/entityDeliveryVehicleOrientation",
          "description": "The required orientation of the delivery vehicle."
        },
        "buildStartTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the build will start."
        },
        "buildEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the build will end."
        },
        "deliveryEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the bay will be delivered to the row."
        },
        "installEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when installation will finish."
        },
        "returnEndTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the delivery vehicle will return to the factory."
        }
      },
      "description": "Defines a schedule for a bay."
    },
    "entityBayStatus": {
      "type": "string",
      "enum": [
        "BAY_STATUS_UNSPECIFIED",
        "BAY_STATUS_BUILD_IN_PROGRESS",
        "BAY_STATUS_BUILD_COMPLETE",
        "BAY_STATUS_IN_TRANSIT",
        "BAY_STATUS_INSTALLING",
        "BAY_STATUS_INSTALLED"
      ],
      "default": "BAY_STATUS_UNSPECIFIED",
      "description": " - BAY_STATUS_UNSPECIFIED: Not specified.\n - BAY_STATUS_BUILD_IN_PROGRESS: The bay is being built.\n - BAY_STATUS_BUILD_COMPLETE: The bay is built.\n - BAY_STATUS_IN_TRANSIT: The bay is being delivered to install location.\n - BAY_STATUS_INSTALLING: The bay is being installed.\n - BAY_STATUS_INSTALLED: The bay is installed."
    },
    "entityBha": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "parentBayId": {
          "type": "string"
        },
        "bhaSpecId": {
          "type": "string"
        }
      }
    },
    "entityBhaSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "shortCode": {
          "type": "string"
        },
        "extraHeavy": {
          "type": "boolean"
        },
        "seismic": {
          "type": "boolean"
        },
        "thicknessMm": {
          "type": "number",
          "format": "float"
        },
        "holeSpacing": {
          "$ref": "#/definitions/entityBracketHoleSpacing"
        }
      },
      "description": "Defines a type of BHA."
    },
    "entityBlock": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "blockNumber": {
          "type": "string"
        },
        "anchorPoint": {
          "$ref": "#/definitions/geoPoint",
          "description": "A point to anchor the first row.\nThe block positioning logic uses this point to find the geometry of\nthe first row in the CAD drawings."
        },
        "lineString": {
          "$ref": "#/definitions/geoLineString",
          "description": "The geometry of the block."
        },
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRow"
          }
        }
      },
      "description": "A block has one or more sections which each contain one or more rows."
    },
    "entityBracketHoleSpacing": {
      "type": "string",
      "enum": [
        "BRACKET_HOLE_SPACING_UNSPECIFIED",
        "BRACKET_HOLE_SPACING_400_MM",
        "BRACKET_HOLE_SPACING_790_MM"
      ],
      "default": "BRACKET_HOLE_SPACING_UNSPECIFIED"
    },
    "entityDamperType": {
      "type": "string",
      "enum": [
        "DAMPER_TYPE_UNSPECIFIED",
        "DAMPER_TYPE_DOUBLE"
      ],
      "default": "DAMPER_TYPE_UNSPECIFIED",
      "description": " - DAMPER_TYPE_UNSPECIFIED: Unspecified.\n - DAMPER_TYPE_DOUBLE: Double damper."
    },
    "entityDeliveryVehicle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "displayName": {
          "type": "string"
        },
        "currentLocation": {
          "$ref": "#/definitions/geoPoint"
        },
        "machineName": {
          "type": "string"
        },
        "lastLocationUpdateTime": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "entityDeliveryVehicleOrientation": {
      "type": "string",
      "enum": [
        "DELIVERY_VEHICLE_ORIENTATION_UNSPECIFIED",
        "DELIVERY_VEHICLE_ORIENTATION_GANTRY_RIGHT",
        "DELIVERY_VEHICLE_ORIENTATION_GANTRY_LEFT"
      ],
      "default": "DELIVERY_VEHICLE_ORIENTATION_UNSPECIFIED",
      "description": " - DELIVERY_VEHICLE_ORIENTATION_UNSPECIFIED: Unspecified.\n - DELIVERY_VEHICLE_ORIENTATION_GANTRY_RIGHT: The gantry opens to the driver's right.\n - DELIVERY_VEHICLE_ORIENTATION_GANTRY_LEFT: The gantry opens to the driver's left."
    },
    "entityEntityType": {
      "type": "string",
      "enum": [
        "ENTITY_TYPE_UNSPECIFIED",
        "ENTITY_TYPE_ORGANIZATION",
        "ENTITY_TYPE_USER",
        "ENTITY_TYPE_PROJECT",
        "ENTITY_TYPE_BAY",
        "ENTITY_TYPE_RAIL_SPEC",
        "ENTITY_TYPE_MODULE_SPEC",
        "ENTITY_TYPE_BHA_SPEC",
        "ENTITY_TYPE_TORQUE_TUBE_SPEC",
        "ENTITY_TYPE_FASTENER",
        "ENTITY_TYPE_RAIL",
        "ENTITY_TYPE_MODULE",
        "ENTITY_TYPE_BHA",
        "ENTITY_TYPE_TORQUE_TUBE",
        "ENTITY_TYPE_TMR",
        "ENTITY_TYPE_PIER_SPEC",
        "ENTITY_TYPE_ROW_SPEC",
        "ENTITY_TYPE_ROW_SPEC_PIER",
        "ENTITY_TYPE_ROW_SPEC_TORQUE_TUBE",
        "ENTITY_TYPE_BLOCK",
        "ENTITY_TYPE_ROW",
        "ENTITY_TYPE_FACTORY",
        "ENTITY_TYPE_SCHEDULE",
        "ENTITY_TYPE_DELIVERY_VEHICLE",
        "ENTITY_TYPE_FACTORY_PLACEMENT",
        "ENTITY_TYPE_BAY_SCHEDULE",
        "ENTITY_TYPE_MODULE_PALLET_SPEC",
        "ENTITY_TYPE_SITE_FEATURE",
        "ENTITY_TYPE_USER_ORGANIZATION"
      ],
      "default": "ENTITY_TYPE_UNSPECIFIED",
      "title": "Keep tag numbers synced with the oneof field in Entity.\nNext ID: 31"
    },
    "entityFactory": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "displayName": {
          "type": "string"
        },
        "currentLocation": {
          "$ref": "#/definitions/geoPoint"
        },
        "machineName": {
          "type": "string"
        }
      },
      "description": "Represents a factory."
    },
    "entityFactoryPlacement": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The assignment id."
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "parentScheduleId": {
          "type": "string",
          "description": "The parent schedule."
        },
        "factoryId": {
          "type": "string",
          "description": "The factory that is being placed."
        },
        "location": {
          "$ref": "#/definitions/geoPoint",
          "description": "The location where the factory is placed."
        },
        "startTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the factory will be stationed."
        },
        "endTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the factory will be removed."
        }
      },
      "description": "Places a factory on the map for a period of time. The availability of a\nfactory is determined by their placements minus any downtime."
    },
    "entityModule": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "parentBayId": {
          "type": "string"
        },
        "moduleSpecId": {
          "type": "string"
        },
        "index": {
          "type": "integer",
          "format": "int64",
          "description": "0-based index. Cantilevered modules and non-cantilevered modules are\nindexed separately."
        },
        "cantilevered": {
          "type": "boolean"
        },
        "serialNumber": {
          "type": "string"
        }
      }
    },
    "entityModuleLayoutOrientation": {
      "type": "string",
      "enum": [
        "MODULE_LAYOUT_ORIENTATION_UNSPECIFIED",
        "MODULE_LAYOUT_ORIENTATION_HORIZONTAL",
        "MODULE_LAYOUT_ORIENTATION_VERTICAL_PORTRAIT",
        "MODULE_LAYOUT_ORIENTATION_VERTICAL_LANDSCAPE"
      ],
      "default": "MODULE_LAYOUT_ORIENTATION_UNSPECIFIED",
      "description": "The way modules are laid out in the pallet."
    },
    "entityModulePalletSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "shortCode": {
          "type": "string"
        },
        "moduleSpecId": {
          "type": "string"
        },
        "numModules": {
          "type": "integer",
          "format": "int32"
        },
        "layoutOrientation": {
          "$ref": "#/definitions/entityModuleLayoutOrientation"
        },
        "positiveLeadOrientation": {
          "$ref": "#/definitions/entityModulePositiveLeadOrientation"
        }
      },
      "description": "Defines a type of module pallet."
    },
    "entityModulePositiveLeadOrientation": {
      "type": "string",
      "enum": [
        "MODULE_POSITIVE_LEAD_ORIENTATION_UNSPECIFIED",
        "MODULE_POSITIVE_LEAD_ORIENTATION_POSITIVE_Z",
        "MODULE_POSITIVE_LEAD_ORIENTATION_POSITIVE_X",
        "MODULE_POSITIVE_LEAD_ORIENTATION_POSITIVE_Y",
        "MODULE_POSITIVE_LEAD_ORIENTATION_NEGATIVE_Z",
        "MODULE_POSITIVE_LEAD_ORIENTATION_NEGATIVE_X",
        "MODULE_POSITIVE_LEAD_ORIENTATION_NEGATIVE_Y"
      ],
      "default": "MODULE_POSITIVE_LEAD_ORIENTATION_UNSPECIFIED",
      "description": "The direction that the positive lead is oriented."
    },
    "entityModuleSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "shortCode": {
          "type": "string"
        },
        "partNumber": {
          "type": "string"
        },
        "widthMm": {
          "type": "number",
          "format": "float"
        },
        "lengthMm": {
          "type": "number",
          "format": "float"
        },
        "thicknessMm": {
          "type": "number",
          "format": "float"
        },
        "innerThicknessMm": {
          "type": "number",
          "format": "float"
        },
        "backglassToImagingPlaneMm": {
          "type": "number",
          "format": "float"
        },
        "wattage": {
          "type": "integer",
          "format": "int64"
        },
        "color": {
          "type": "string"
        },
        "manufacturer": {
          "type": "string"
        }
      },
      "description": "Defines a type of solar module."
    },
    "entityOrganization": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "description": "A customer account, e.g. Solv."
    },
    "entityPierSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "damperType": {
          "$ref": "#/definitions/entityDamperType"
        },
        "motor": {
          "type": "boolean"
        }
      },
      "description": "Defines a type of pier."
    },
    "entityProject": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentOrganizationId": {
          "type": "string"
        },
        "displayName": {
          "type": "string"
        },
        "timeZone": {
          "type": "string"
        },
        "defaultMapCenter": {
          "$ref": "#/definitions/geoPoint",
          "description": "The default map center."
        },
        "startDate": {
          "$ref": "#/definitions/timePlainDate"
        },
        "endDate": {
          "$ref": "#/definitions/timePlainDate"
        },
        "utmCrs": {
          "type": "string",
          "description": "Find UTM zone here: https://mangomap.com/robertyoung/maps/69585/what-utm-zone-am-i-in-#\nThen find CRS here: https://epsg.io/ Search for \"WGS 84 UTM zone {zone}{N/S}\"\nFor example, Phoenix, AZ is in UTM zone 12N which is EPSG:32612 for WGS 84 CRS."
        },
        "inactive": {
          "type": "boolean",
          "description": "Inactive projects are hidden by default in the UI."
        },
        "routingDisabled": {
          "type": "boolean",
          "description": "When true, the contraction hierarchy is not loaded for this project."
        },
        "railSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRailSpec"
          }
        },
        "moduleSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityModuleSpec"
          }
        },
        "bhaSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityBhaSpec"
          }
        },
        "torqueTubeSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityTorqueTubeSpec"
          }
        },
        "rowSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRowSpec"
          }
        },
        "pierSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityPierSpec"
          }
        },
        "modulePalletSpecs": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityModulePalletSpec"
          }
        },
        "siteFeatures": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entitySiteFeature"
          }
        }
      }
    },
    "entityRail": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "parentBayId": {
          "type": "string"
        },
        "railSpecId": {
          "type": "string"
        },
        "index": {
          "type": "integer",
          "format": "int64",
          "description": "0-based index. Cantilevered rails and non-cantilevered rails are\nindexed separately."
        },
        "cantilevered": {
          "type": "boolean"
        }
      }
    },
    "entityRailSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "shortCode": {
          "type": "string"
        },
        "extraHeavy": {
          "type": "boolean"
        },
        "firstRail": {
          "type": "boolean",
          "description": "First rails are never installed in the factory."
        },
        "holeSpacing": {
          "$ref": "#/definitions/entityBracketHoleSpacing"
        },
        "thicknessMm": {
          "type": "number",
          "format": "float"
        }
      },
      "description": "Defines a type of rail."
    },
    "entityRow": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "parentBlockId": {
          "type": "string",
          "description": "The parent block."
        },
        "sectionIndex": {
          "type": "integer",
          "format": "int64",
          "description": "The block section index."
        },
        "rowIndex": {
          "type": "integer",
          "format": "int64",
          "description": "The row index."
        },
        "rowSpecId": {
          "type": "string",
          "description": "The row type."
        },
        "pierOffset": {
          "type": "integer",
          "format": "int64",
          "description": "The number of piers before the row begins."
        },
        "orientation": {
          "$ref": "#/definitions/entityRowOrientation",
          "description": "The orientation of the row."
        },
        "lineString": {
          "$ref": "#/definitions/geoLineString",
          "description": "The geometry of the row."
        },
        "bays": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityBay"
          }
        }
      },
      "description": "A row represents an array of solar modules."
    },
    "entityRowOrientation": {
      "type": "string",
      "enum": [
        "ROW_ORIENTATION_UNSPECIFIED",
        "ROW_ORIENTATION_SYMMETRICAL",
        "ROW_ORIENTATION_MOTOR_END_NORTH",
        "ROW_ORIENTATION_MOTOR_END_SOUTH"
      ],
      "default": "ROW_ORIENTATION_UNSPECIFIED",
      "description": "Defines the orientation for asymmetrical rows within a block.\n\n - ROW_ORIENTATION_UNSPECIFIED: Unspecified.\n - ROW_ORIENTATION_SYMMETRICAL: The row is symmetrical.\n - ROW_ORIENTATION_MOTOR_END_NORTH: The motor end is on the north side.\n - ROW_ORIENTATION_MOTOR_END_SOUTH: The motor end is on the south side."
    },
    "entityRowSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "partNumber": {
          "type": "string"
        },
        "rowType": {
          "$ref": "#/definitions/entityRowType"
        },
        "moduleSpecId": {
          "type": "string"
        },
        "railSpecId": {
          "type": "string"
        },
        "bhaSpecId": {
          "type": "string"
        },
        "numModules": {
          "type": "integer",
          "format": "int64"
        },
        "moduleSpacingMm": {
          "type": "integer",
          "format": "int64"
        },
        "moduleSpacingAcrossBhaMm": {
          "type": "integer",
          "format": "int64"
        },
        "moduleSpacingAcrossMotorMm": {
          "type": "integer",
          "format": "int64"
        },
        "piers": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRowSpecPier"
          }
        },
        "torqueTubes": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityRowSpecTorqueTube"
          }
        }
      },
      "description": "A row spec defines the layout of piers and torque tubes."
    },
    "entityRowSpecPier": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "parentRowSpecId": {
          "type": "string",
          "description": "The parent row spec."
        },
        "pierSpecId": {
          "type": "string",
          "description": "The pier spec."
        },
        "index": {
          "type": "integer",
          "format": "int64",
          "description": "The pier index is 0-based and defines the position of the pier relative to\nthe other piers in the row."
        }
      },
      "description": "Defines a pier within a row spec."
    },
    "entityRowSpecTorqueTube": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "parentRowSpecId": {
          "type": "string",
          "description": "The parent row spec."
        },
        "torqueTubeSpecId": {
          "type": "string",
          "description": "The torque tube spec."
        },
        "index": {
          "type": "integer",
          "format": "int64",
          "description": "The torque tube index is 0-based and defines the position of the torque\ntube relative to the other tubes in the row."
        }
      },
      "description": "Defines a torque tube within a row spec."
    },
    "entityRowType": {
      "type": "string",
      "enum": [
        "ROW_TYPE_UNSPECIFIED",
        "ROW_TYPE_EXTERIOR",
        "ROW_TYPE_EDGE",
        "ROW_TYPE_INTERIOR"
      ],
      "default": "ROW_TYPE_UNSPECIFIED",
      "description": " - ROW_TYPE_UNSPECIFIED: Unspecified.\n - ROW_TYPE_EXTERIOR: Exterior row.\n - ROW_TYPE_EDGE: Edge row.\n - ROW_TYPE_INTERIOR: Interior row."
    },
    "entitySchedule": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "displayName": {
          "type": "string"
        },
        "type": {
          "$ref": "#/definitions/entityScheduleType"
        },
        "createTime": {
          "type": "string",
          "format": "date-time"
        },
        "revision": {
          "type": "integer",
          "format": "int64"
        }
      },
      "description": "Defines a schedule for a project."
    },
    "entityScheduleType": {
      "type": "string",
      "enum": [
        "SCHEDULE_TYPE_UNSPECIFIED",
        "SCHEDULE_TYPE_MAIN",
        "SCHEDULE_TYPE_DRAFT",
        "SCHEDULE_TYPE_SNAPSHOT"
      ],
      "default": "SCHEDULE_TYPE_UNSPECIFIED",
      "description": " - SCHEDULE_TYPE_UNSPECIFIED: Not specified.\n - SCHEDULE_TYPE_MAIN: The schedule is the main schedule.\n - SCHEDULE_TYPE_DRAFT: The schedule is a draft.\n - SCHEDULE_TYPE_SNAPSHOT: The schedule is a snapshot."
    },
    "entitySiteFeature": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "type": {
          "$ref": "#/definitions/entitySiteFeatureType"
        },
        "geometry": {
          "$ref": "#/definitions/geoGeometry"
        }
      }
    },
    "entitySiteFeatureType": {
      "type": "string",
      "enum": [
        "SITE_FEATURE_TYPE_UNSPECIFIED",
        "SITE_FEATURE_TYPE_ROAD",
        "SITE_FEATURE_TYPE_FENCE"
      ],
      "default": "SITE_FEATURE_TYPE_UNSPECIFIED"
    },
    "entitySystemUserType": {
      "type": "string",
      "enum": [
        "SYSTEM_USER_TYPE_UNSPECIFIED",
        "SYSTEM_USER_TYPE_PERSON",
        "SYSTEM_USER_TYPE_MACHINE"
      ],
      "default": "SYSTEM_USER_TYPE_UNSPECIFIED"
    },
    "entityTmr": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "parentBayId": {
          "type": "string"
        }
      }
    },
    "entityTorqueTube": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string"
        },
        "parentBayId": {
          "type": "string"
        },
        "torqueTubeSpecId": {
          "type": "string"
        }
      }
    },
    "entityTorqueTubeSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "parentProjectId": {
          "type": "string",
          "description": "The parent project."
        },
        "displayName": {
          "type": "string"
        },
        "shortCode": {
          "type": "string"
        },
        "partNumber": {
          "type": "string"
        },
        "thicknessMm": {
          "type": "number",
          "format": "float"
        },
        "numCantileveredModules": {
          "type": "integer",
          "format": "int32"
        },
        "numNonCantileveredModules": {
          "type": "integer",
          "format": "int32"
        },
        "holeSpacingMm": {
          "type": "integer",
          "format": "int32"
        },
        "swageOutsideDiameterMm": {
          "type": "number",
          "format": "float"
        },
        "color": {
          "type": "string",
          "description": "CSS color value."
        },
        "lengthMm": {
          "type": "integer",
          "format": "int64"
        }
      },
      "description": "Defines a type of torque tube."
    },
    "entityUser": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "username": {
          "type": "string",
          "description": "For human users, this is their email address.\nFor machine users such as the factory PC, this is their hostname."
        },
        "firstName": {
          "type": "string"
        },
        "lastName": {
          "type": "string"
        },
        "password": {
          "type": "string",
          "description": "When creating a user, the raw password is inputted using this field.\nWhen the user is created, the password is hashed this field is replaced\nwith the hashed password before being stored in the database.\nWhen a user tries to login, the input password is hashed and compared\nwith this field."
        },
        "role": {
          "$ref": "#/definitions/authRole",
          "description": "For users that belong to an organization, the role is set on the\nUserOrganization object."
        },
        "sessionId": {
          "type": "string",
          "description": "Identifies the current session id.\nChanging this value will invalidate all associated refresh tokens."
        },
        "isDisabled": {
          "type": "boolean"
        },
        "email": {
          "type": "string"
        },
        "apiKey": {
          "type": "string"
        }
      },
      "title": "Next ID: 11"
    },
    "geoGeometry": {
      "type": "object",
      "properties": {
        "point": {
          "$ref": "#/definitions/geoPoint"
        },
        "multiPoint": {
          "$ref": "#/definitions/geoMultiPoint"
        },
        "lineString": {
          "$ref": "#/definitions/geoLineString"
        },
        "multiLineString": {
          "$ref": "#/definitions/geoMultiLineString"
        },
        "polygon": {
          "$ref": "#/definitions/geoPolygon"
        },
        "multiPolygon": {
          "$ref": "#/definitions/geoMultiPolygon"
        }
      }
    },
    "geoKmz": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "layers": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "styles": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/geoKmzStyle"
          }
        }
      }
    },
    "geoKmzStyle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "fillColor": {
          "type": "string"
        },
        "fillOpacity": {
          "type": "number",
          "format": "double"
        },
        "strokeColor": {
          "type": "string"
        },
        "strokeOpacity": {
          "type": "number",
          "format": "double"
        },
        "strokeWidth": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "geoLineString": {
      "type": "object",
      "properties": {
        "points": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/geoPoint"
          }
        }
      },
      "title": "A line string has two or more points.\nhttps://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4"
    },
    "geoMultiLineString": {
      "type": "object",
      "properties": {
        "lines": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/geoLineString"
          }
        }
      },
      "title": "https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.5"
    },
    "geoMultiPoint": {
      "type": "object",
      "properties": {
        "points": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/geoPoint"
          }
        }
      },
      "title": "https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.3"
    },
    "geoMultiPolygon": {
      "type": "object",
      "properties": {
        "polygons": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/geoPolygon"
          }
        }
      },
      "title": "https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.7"
    },
    "geoPoint": {
      "type": "object",
      "properties": {
        "longitude": {
          "type": "number",
          "format": "double"
        },
        "latitude": {
          "type": "number",
          "format": "double"
        }
      },
      "title": "https://datatracker.ietf.org/doc/html/rfc7946#appendix-A.1"
    },
    "geoPolygon": {
      "type": "object",
      "properties": {
        "exteriorRing": {
          "$ref": "#/definitions/geoLineString"
        },
        "interiorRings": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/geoLineString"
          }
        }
      },
      "title": "A polygon has an exterior ring and zero or more interior rings.\nThe first point of a ring is the same as the last point.\nhttps://datatracker.ietf.org/doc/html/rfc7946#section-3.1.6"
    },
    "googlelongrunningOperation": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should be a resource name ending with `operations/{unique_id}`."
        },
        "metadata": {
          "$ref": "#/definitions/protobufAny",
          "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any."
        },
        "done": {
          "type": "boolean",
          "description": "If the value is `false`, it means the operation is still in progress.\nIf `true`, the operation is completed, and either `error` or `response` is\navailable."
        },
        "error": {
          "$ref": "#/definitions/rpcStatus",
          "description": "The error result of the operation in case of failure or cancellation."
        },
        "response": {
          "$ref": "#/definitions/protobufAny",
          "description": "The normal, successful response of the operation.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`."
        }
      },
      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call."
    },
    "protobufAny": {
      "type": "object",
      "properties": {
        "@type": {
          "type": "string",
          "description": "Identifies the type of the serialized Protobuf message with a URI reference\nconsisting of a prefix ending in a slash and the fully-qualified type name.\n\nExample: type.googleapis.com/google.protobuf.StringValue\n\nThis string must contain at least one `/` character, and the content after\nthe last `/` must be the fully-qualified name of the type in canonical\nform, without a leading dot. Do not write a scheme on these URI references\nso that clients do not attempt to contact them.\n\nThe prefix is arbitrary and Protobuf implementations are expected to\nsimply strip off everything up to and including the last `/` to identify\nthe type. `type.googleapis.com/` is a common default prefix that some\nlegacy implementations require. This prefix does not indicate the origin of\nthe type, and URIs containing it are not expected to respond to any\nrequests.\n\nAll type URL strings must be legal URI references with the additional\nrestriction (for the text format) that the content of the reference\nmust consist only of alphanumeric characters, percent-encoded escapes, and\ncharacters in the following set (not including the outer backticks):\n`/-.~_!$\u0026()*+,;=`. Despite our allowing percent encodings, implementations\nshould not unescape them to prevent confusion with existing parsers. For\nexample, `type.googleapis.com%2FFoo` should be rejected.\n\nIn the original design of `Any`, the possibility of launching a type\nresolution service at these type URLs was considered but Protobuf never\nimplemented one and considers contacting these URLs to be problematic and\na potential security issue. Do not attempt to contact type URLs."
        }
      },
      "additionalProperties": {},
      "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nIn its binary encoding, an `Any` is an ordinary message; but in other wire\nforms like JSON, it has a special encoding. The format of the type URL is\ndescribed on the `type_url` field.\n\nProtobuf APIs provide utilities to interact with `Any` values:\n\n- A 'pack' operation accepts a message and constructs a generic `Any` wrapper\n  around it.\n- An 'unpack' operation reads the content of an `Any` message, either into an\n  existing message or a new one. Unpack operations must check the type of the\n  value they unpack against the declared `type_url`.\n- An 'is' operation decides whether an `Any` contains a message of the given\n  type, i.e. whether it can 'unpack' that type.\n\nThe JSON format representation of an `Any` follows one of these cases:\n\n- For types without special-cased JSON encodings, the JSON format\n  representation of the `Any` is the same as that of the message, with an\n  additional `@type` field which contains the type URL.\n- For types with special-cased JSON encodings (typically called 'well-known'\n  types, listed in https://protobuf.dev/programming-guides/json/#any), the\n  JSON format representation has a key `@type` which contains the type URL\n  and a key `value` which contains the JSON-serialized value.\n\nThe text format representation of an `Any` is like a message with one field\nwhose name is the type URL in brackets. For example, an `Any` containing a\n`foo.Bar` message may be written `[type.googleapis.com/foo.Bar] { a: 2 }`."
    },
    "rpcStatus": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "description": "The status code, which should be an enum value of\n[google.rpc.Code][google.rpc.Code]."
        },
        "message": {
          "type": "string",
          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized\nby the client."
        },
        "details": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/protobufAny"
          },
          "description": "A list of messages that carry the error details.  There is a common set of\nmessage types for APIs to use."
        }
      },
      "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)."
    },
    "serviceAuthLoginResponse": {
      "type": "object",
      "properties": {
        "accessToken": {
          "type": "string"
        },
        "refreshToken": {
          "type": "string"
        }
      }
    },
    "serviceAuthRefreshResponse": {
      "type": "object",
      "properties": {
        "accessToken": {
          "type": "string"
        }
      }
    },
    "serviceBlockRelation": {
      "type": "string",
      "enum": [
        "BLOCK_RELATION_UNSPECIFIED",
        "BLOCK_RELATION_ROWS",
        "BLOCK_RELATION_BAYS",
        "BLOCK_RELATION_BAY_SCHEDULES"
      ],
      "default": "BLOCK_RELATION_UNSPECIFIED"
    },
    "serviceGeneratePasswordResponse": {
      "type": "object",
      "properties": {
        "password": {
          "type": "string"
        }
      }
    },
    "serviceGetColorsResponse": {
      "type": "object",
      "properties": {
        "colors": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "serviceGetReplicationResetStatusResponse": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "title": "\"idle\", \"pending\", or \"in_progress\""
        }
      }
    },
    "serviceHoldingClamp": {
      "type": "string",
      "enum": [
        "HOLDING_CLAMP_UNSPECIFIED",
        "HOLDING_CLAMP_GANTRY",
        "HOLDING_CLAMP_DRIVE"
      ],
      "default": "HOLDING_CLAMP_UNSPECIFIED",
      "description": "Which clamp (if any) is currently holding a bay on a vehicle. Mirrors the\nfactory's BayHoldingClamp values so the relay can pass the int through.\nTop-level (not nested) so the json-model generator emits it.\n\n - HOLDING_CLAMP_UNSPECIFIED: none / not holding a bay"
    },
    "serviceImportKmzResponse": {
      "type": "object"
    },
    "serviceListBaySchedulesResponse": {
      "type": "object",
      "properties": {
        "baySchedules": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityBaySchedule"
          }
        }
      }
    },
    "serviceListBaysResponse": {
      "type": "object",
      "properties": {
        "bays": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityBay"
          }
        }
      }
    },
    "serviceListBlocksResponse": {
      "type": "object",
      "properties": {
        "blocks": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityBlock"
          }
        }
      }
    },
    "serviceListDeliveryVehiclesResponse": {
      "type": "object",
      "properties": {
        "deliveryVehicles": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityDeliveryVehicle"
          }
        }
      }
    },
    "serviceListFactoriesResponse": {
      "type": "object",
      "properties": {
        "factories": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityFactory"
          }
        }
      }
    },
    "serviceListFactoryPlacementsResponse": {
      "type": "object",
      "properties": {
        "factoryPlacements": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityFactoryPlacement"
          }
        }
      }
    },
    "serviceListKmzsResponse": {
      "type": "object",
      "properties": {
        "kmzIds": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "serviceListOrganizationUsersResponse": {
      "type": "object",
      "properties": {
        "users": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityUser"
          }
        }
      }
    },
    "serviceListOrganizationsResponse": {
      "type": "object",
      "properties": {
        "organizations": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityOrganization"
          }
        }
      }
    },
    "serviceListProjectsResponse": {
      "type": "object",
      "properties": {
        "projects": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityProject"
          }
        }
      }
    },
    "serviceListSchedulesResponse": {
      "type": "object",
      "properties": {
        "schedules": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entitySchedule"
          }
        }
      }
    },
    "serviceListSiteFeatureTypesResponse": {
      "type": "object",
      "properties": {
        "siteFeatureTypes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/entitySiteFeatureType"
          }
        }
      }
    },
    "serviceListSiteFeaturesResponse": {
      "type": "object",
      "properties": {
        "siteFeatures": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entitySiteFeature"
          }
        }
      }
    },
    "serviceListSystemUsersResponse": {
      "type": "object",
      "properties": {
        "users": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/entityUser"
          }
        }
      }
    },
    "serviceListTimeZonesResponse": {
      "type": "object",
      "properties": {
        "timeZones": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "serviceProjectChangeNotification": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Notification ID."
        },
        "projectId": {
          "type": "string"
        },
        "changes": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProjectChangeNotificationChange"
          },
          "description": "The list of changes."
        },
        "vehiclePositions": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProjectChangeNotificationVehiclePosition"
          }
        }
      }
    },
    "serviceProjectRelation": {
      "type": "string",
      "enum": [
        "PROJECT_RELATION_UNSPECIFIED",
        "PROJECT_RELATION_BHA_SPECS",
        "PROJECT_RELATION_MODULE_SPECS",
        "PROJECT_RELATION_PIER_SPECS",
        "PROJECT_RELATION_RAIL_SPECS",
        "PROJECT_RELATION_ROW_SPEC_PIERS",
        "PROJECT_RELATION_ROW_SPEC_TORQUE_TUBES",
        "PROJECT_RELATION_ROW_SPECS",
        "PROJECT_RELATION_TORQUE_TUBE_SPECS"
      ],
      "default": "PROJECT_RELATION_UNSPECIFIED"
    },
    "servicePublishScheduleResponse": {
      "type": "object",
      "properties": {
        "newSchedule": {
          "$ref": "#/definitions/entitySchedule"
        },
        "oldSchedule": {
          "$ref": "#/definitions/entitySchedule"
        }
      }
    },
    "serviceTriggerReplicationResetResponse": {
      "type": "object"
    },
    "serviceUpdateMask": {
      "type": "object",
      "properties": {
        "paths": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "There's an unfortunate JSON serialization convention for google.protobuf.FieldMask\nthat requires converting field paths to camel case. This convention was created before\nmap fields were added to protobuf, and as a result, field masks on map fields are not\nsupported well in the protobuf ecosystem.\n\nhttps://protobuf.dev/reference/protobuf/google.protobuf/#json-encoding-field-masks\nhttps://google.aip.dev/161#map-fields\n\nCurrently, the Connect RPC library which is used by the frontend throws an error if a\nfield path cannot be converted to camel case and back. Specifically, this prevents us\nfrom using ids as map keys which we do to update bay schedules via the\nBay.schedule_metadata map field.\n\nhttps://github.com/bufbuild/protobuf-es/blob/d7cc04b62888a645d31c8da5de5e6755950ee64e/packages/protobuf/src/to-json.ts#L484\nhttps://github.com/protocolbuffers/protobuf/issues/12524#issuecomment-1637541311\n\nTo work around this, we define our own UpdateMask message which bypasses the problematic\nJSON serialization convention. We then convert between UpdateMask and google.protobuf.FieldMask\nin the service implementation."
    },
    "timePlainDate": {
      "type": "object",
      "properties": {
        "year": {
          "type": "integer",
          "format": "int64",
          "description": "Year."
        },
        "month": {
          "type": "integer",
          "format": "int64",
          "description": "Month of year (1-12)."
        },
        "day": {
          "type": "integer",
          "format": "int64",
          "description": "Day of month."
        }
      },
      "description": "Represents a calendar date that is not associated with a particular time or\ntime zone, e.g. August 24th, 2006.\n\nhttps://tc39.es/proposal-temporal/docs/#Temporal-PlainDate"
    }
  },
  "securityDefinitions": {
    "Bearer": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header"
    }
  },
  "security": [
    {
      "Bearer": []
    }
  ]
}
