{
  "swagger": "2.0",
  "info": {
    "description": "Coderd is the service created by running coder server. It is a thin API that connects workspaces, provisioners and users. coderd stores its state in Postgres and is the only service that communicates with Postgres.",
    "title": "Coder API",
    "termsOfService": "https://coder.com/legal/terms-of-service",
    "contact": {
      "name": "API Support",
      "url": "https://coder.com",
      "email": "support@coder.com"
    },
    "license": {
      "name": "AGPL-3.0",
      "url": "https://github.com/coder/coder/blob/main/LICENSE"
    },
    "version": "2.0"
  },
  "basePath": "/api/v2",
  "paths": {
    "/": {
      "get": {
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "API root handler",
        "operationId": "api-root-handler",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/appearance": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get appearance",
        "operationId": "get-appearance",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.AppearanceConfig"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Update appearance",
        "operationId": "update-appearance",
        "parameters": [
          {
            "description": "Update appearance request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateAppearanceConfig"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateAppearanceConfig"
            }
          }
        }
      }
    },
    "/applications/auth-redirect": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Applications"],
        "summary": "Redirect to URI with encrypted API key",
        "operationId": "redirect-to-uri-with-encrypted-api-key",
        "parameters": [
          {
            "type": "string",
            "description": "Redirect destination",
            "name": "redirect_uri",
            "in": "query"
          }
        ],
        "responses": {
          "307": {
            "description": "Temporary Redirect"
          }
        }
      }
    },
    "/applications/host": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Applications"],
        "summary": "Get applications host",
        "operationId": "get-applications-host",
        "deprecated": true,
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.AppHostResponse"
            }
          }
        }
      }
    },
    "/applications/reconnecting-pty-signed-token": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Applications Enterprise"],
        "summary": "Issue signed app token for reconnecting PTY",
        "operationId": "issue-signed-app-token-for-reconnecting-pty",
        "parameters": [
          {
            "description": "Issue reconnecting PTY signed token request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.IssueReconnectingPTYSignedTokenRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.IssueReconnectingPTYSignedTokenResponse"
            }
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/audit": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Audit"],
        "summary": "Get audit logs",
        "operationId": "get-audit-logs",
        "parameters": [
          {
            "type": "string",
            "description": "Search query",
            "name": "q",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "After ID",
            "name": "after_id",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.AuditLogResponse"
            }
          }
        }
      }
    },
    "/audit/testgenerate": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Audit"],
        "summary": "Generate fake audit log",
        "operationId": "generate-fake-audit-log",
        "parameters": [
          {
            "description": "Audit log request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateTestAuditLogRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/authcheck": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Authorization"],
        "summary": "Check authorization",
        "operationId": "check-authorization",
        "parameters": [
          {
            "description": "Authorization request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.AuthorizationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.AuthorizationResponse"
            }
          }
        }
      }
    },
    "/buildinfo": {
      "get": {
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "Build info",
        "operationId": "build-info",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.BuildInfoResponse"
            }
          }
        }
      }
    },
    "/csp/reports": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["General"],
        "summary": "Report CSP violations",
        "operationId": "report-csp-violations",
        "parameters": [
          {
            "description": "Violation report",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/coderd.cspViolation"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/debug/coordinator": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["text/html"],
        "tags": ["Debug"],
        "summary": "Debug Info Wireguard Coordinator",
        "operationId": "debug-info-wireguard-coordinator",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/debug/health": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Debug"],
        "summary": "Debug Info Deployment Health",
        "operationId": "debug-info-deployment-health",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/healthcheck.Report"
            }
          }
        }
      }
    },
    "/debug/ws": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Debug"],
        "summary": "Debug Info Websocket Test",
        "operationId": "debug-info-websocket-test",
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/deployment/config": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "Get deployment config",
        "operationId": "get-deployment-config",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.DeploymentConfig"
            }
          }
        }
      }
    },
    "/deployment/ssh": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "SSH Config",
        "operationId": "ssh-config",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.SSHConfigResponse"
            }
          }
        }
      }
    },
    "/deployment/stats": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "Get deployment stats",
        "operationId": "get-deployment-stats",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.DeploymentStats"
            }
          }
        }
      }
    },
    "/derp-map": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Agents"],
        "summary": "Get DERP map updates",
        "operationId": "get-derp-map-updates",
        "responses": {
          "101": {
            "description": "Switching Protocols"
          }
        }
      }
    },
    "/entitlements": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get entitlements",
        "operationId": "get-entitlements",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Entitlements"
            }
          }
        }
      }
    },
    "/experiments": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "Get experiments",
        "operationId": "get-experiments",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.Experiment"
              }
            }
          }
        }
      }
    },
    "/files": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "description": "Swagger notice: Swagger 2.0 doesn't support file upload with a `content-type` different than `application/x-www-form-urlencoded`.",
        "consumes": ["application/x-tar"],
        "produces": ["application/json"],
        "tags": ["Files"],
        "summary": "Upload file",
        "operationId": "upload-file",
        "parameters": [
          {
            "type": "string",
            "default": "application/x-tar",
            "description": "Content-Type must be `application/x-tar`",
            "name": "Content-Type",
            "in": "header",
            "required": true
          },
          {
            "type": "file",
            "description": "File to be uploaded",
            "name": "file",
            "in": "formData",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.UploadResponse"
            }
          }
        }
      }
    },
    "/files/{fileID}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Files"],
        "summary": "Get file by ID",
        "operationId": "get-file-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "File ID",
            "name": "fileID",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/gitauth/{gitauth}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Git"],
        "summary": "Get git auth by ID",
        "operationId": "get-git-auth-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "string",
            "description": "Git Provider ID",
            "name": "gitauth",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.GitAuth"
            }
          }
        }
      }
    },
    "/gitauth/{gitauth}/device": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Git"],
        "summary": "Get git auth device by ID.",
        "operationId": "get-git-auth-device-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "string",
            "description": "Git Provider ID",
            "name": "gitauth",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.GitAuthDevice"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Git"],
        "summary": "Post git auth device by ID",
        "operationId": "post-git-auth-device-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "string",
            "description": "Git Provider ID",
            "name": "gitauth",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/groups/{group}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get group by ID",
        "operationId": "get-group-by-id",
        "parameters": [
          {
            "type": "string",
            "description": "Group id",
            "name": "group",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Group"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Delete group by name",
        "operationId": "delete-group-by-name",
        "parameters": [
          {
            "type": "string",
            "description": "Group name",
            "name": "group",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Group"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Update group by name",
        "operationId": "update-group-by-name",
        "parameters": [
          {
            "type": "string",
            "description": "Group name",
            "name": "group",
            "in": "path",
            "required": true
          },
          {
            "description": "Patch group request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.PatchGroupRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Group"
            }
          }
        }
      }
    },
    "/insights/daus": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Insights"],
        "summary": "Get deployment DAUs",
        "operationId": "get-deployment-daus",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.DAUsResponse"
            }
          }
        }
      }
    },
    "/insights/templates": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Insights"],
        "summary": "Get insights about templates",
        "operationId": "get-insights-about-templates",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.TemplateInsightsResponse"
            }
          }
        }
      }
    },
    "/insights/user-latency": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Insights"],
        "summary": "Get insights about user latency",
        "operationId": "get-insights-about-user-latency",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.UserLatencyInsightsResponse"
            }
          }
        }
      }
    },
    "/licenses": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get licenses",
        "operationId": "get-licenses",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.License"
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Organizations"],
        "summary": "Add new license",
        "operationId": "add-new-license",
        "parameters": [
          {
            "description": "Add license request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.AddLicenseRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.License"
            }
          }
        }
      }
    },
    "/licenses/refresh-entitlements": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Organizations"],
        "summary": "Update license entitlements",
        "operationId": "update-license-entitlements",
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/licenses/{id}": {
      "delete": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Delete license",
        "operationId": "delete-license",
        "parameters": [
          {
            "type": "string",
            "format": "number",
            "description": "License ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/organizations": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Organizations"],
        "summary": "Create organization",
        "operationId": "create-organization",
        "parameters": [
          {
            "description": "Create organization request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateOrganizationRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.Organization"
            }
          }
        }
      }
    },
    "/organizations/{organization}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Organizations"],
        "summary": "Get organization by ID",
        "operationId": "get-organization-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Organization"
            }
          }
        }
      }
    },
    "/organizations/{organization}/groups": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get groups by organization",
        "operationId": "get-groups-by-organization",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.Group"
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Create group for organization",
        "operationId": "create-group-for-organization",
        "parameters": [
          {
            "description": "Create group request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateGroupRequest"
            }
          },
          {
            "type": "string",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.Group"
            }
          }
        }
      }
    },
    "/organizations/{organization}/groups/{groupName}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get group by organization and group name",
        "operationId": "get-group-by-organization-and-group-name",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Group name",
            "name": "groupName",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Group"
            }
          }
        }
      }
    },
    "/organizations/{organization}/members/roles": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Members"],
        "summary": "Get member roles by organization",
        "operationId": "get-member-roles-by-organization",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.AssignableRoles"
              }
            }
          }
        }
      }
    },
    "/organizations/{organization}/members/{user}/roles": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Members"],
        "summary": "Assign role to organization member",
        "operationId": "assign-role-to-organization-member",
        "parameters": [
          {
            "type": "string",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Update roles request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateRoles"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.OrganizationMember"
            }
          }
        }
      }
    },
    "/organizations/{organization}/members/{user}/workspaces": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Create user workspace by organization",
        "operationId": "create-user-workspace-by-organization",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Username, UUID, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Create workspace request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateWorkspaceRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Workspace"
            }
          }
        }
      }
    },
    "/organizations/{organization}/provisionerdaemons": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get provisioner daemons",
        "operationId": "get-provisioner-daemons",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.ProvisionerDaemon"
              }
            }
          }
        }
      }
    },
    "/organizations/{organization}/provisionerdaemons/serve": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Enterprise"],
        "summary": "Serve provisioner daemon",
        "operationId": "serve-provisioner-daemon",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols"
          }
        }
      }
    },
    "/organizations/{organization}/templates": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get templates by organization",
        "operationId": "get-templates-by-organization",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.Template"
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Create template by organization",
        "operationId": "create-template-by-organization",
        "parameters": [
          {
            "description": "Request body",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateTemplateRequest"
            }
          },
          {
            "type": "string",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Template"
            }
          }
        }
      }
    },
    "/organizations/{organization}/templates/examples": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template examples by organization",
        "operationId": "get-template-examples-by-organization",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateExample"
              }
            }
          }
        }
      }
    },
    "/organizations/{organization}/templates/{templatename}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get templates by organization and template name",
        "operationId": "get-templates-by-organization-and-template-name",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Template name",
            "name": "templatename",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Template"
            }
          }
        }
      }
    },
    "/organizations/{organization}/templates/{templatename}/versions/{templateversionname}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template version by organization, template, and name",
        "operationId": "get-template-version-by-organization-template-and-name",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Template name",
            "name": "templatename",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Template version name",
            "name": "templateversionname",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.TemplateVersion"
            }
          }
        }
      }
    },
    "/organizations/{organization}/templates/{templatename}/versions/{templateversionname}/previous": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get previous template version by organization, template, and name",
        "operationId": "get-previous-template-version-by-organization-template-and-name",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Template name",
            "name": "templatename",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Template version name",
            "name": "templateversionname",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.TemplateVersion"
            }
          }
        }
      }
    },
    "/organizations/{organization}/templateversions": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Create template version by organization",
        "operationId": "create-template-version-by-organization",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Organization ID",
            "name": "organization",
            "in": "path",
            "required": true
          },
          {
            "description": "Create template version request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateTemplateVersionRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.TemplateVersion"
            }
          }
        }
      }
    },
    "/regions": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["WorkspaceProxies"],
        "summary": "Get site-wide regions for workspace connections",
        "operationId": "get-site-wide-regions-for-workspace-connections",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.RegionsResponse-codersdk_Region"
            }
          }
        }
      }
    },
    "/replicas": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get active replicas",
        "operationId": "get-active-replicas",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.Replica"
              }
            }
          }
        }
      }
    },
    "/scim/v2/Users": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/scim+json"],
        "tags": ["Enterprise"],
        "summary": "SCIM 2.0: Get users",
        "operationId": "scim-get-users",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "SCIM 2.0: Create new user",
        "operationId": "scim-create-new-user",
        "parameters": [
          {
            "description": "New user",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/coderd.SCIMUser"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/coderd.SCIMUser"
            }
          }
        }
      }
    },
    "/scim/v2/Users/{id}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/scim+json"],
        "tags": ["Enterprise"],
        "summary": "SCIM 2.0: Get user by ID",
        "operationId": "scim-get-user-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "User ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "404": {
            "description": "Not Found"
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/scim+json"],
        "tags": ["Enterprise"],
        "summary": "SCIM 2.0: Update user account",
        "operationId": "scim-update-user-status",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "User ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Update user request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/coderd.SCIMUser"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/templates/{template}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template metadata by ID",
        "operationId": "get-template-metadata-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Template"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Delete template by ID",
        "operationId": "delete-template-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Update template metadata by ID",
        "operationId": "update-template-metadata-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Template"
            }
          }
        }
      }
    },
    "/templates/{template}/acl": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get template ACLs",
        "operationId": "get-template-acls",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateUser"
              }
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Update template ACL",
        "operationId": "update-template-acl",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          },
          {
            "description": "Update template request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateTemplateACL"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/templates/{template}/acl/available": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get template available acl users/groups",
        "operationId": "get-template-available-acl-usersgroups",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.ACLAvailable"
              }
            }
          }
        }
      }
    },
    "/templates/{template}/daus": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template DAUs by ID",
        "operationId": "get-template-daus-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.DAUsResponse"
            }
          }
        }
      }
    },
    "/templates/{template}/versions": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "List template versions by template ID",
        "operationId": "list-template-versions-by-template-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "After ID",
            "name": "after_id",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateVersion"
              }
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Update active template version by template ID",
        "operationId": "update-active-template-version-by-template-id",
        "parameters": [
          {
            "description": "Modified template version",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateActiveTemplateVersion"
            }
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/templates/{template}/versions/{templateversionname}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template version by template ID and name",
        "operationId": "get-template-version-by-template-id-and-name",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template ID",
            "name": "template",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Template version name",
            "name": "templateversionname",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateVersion"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template version by ID",
        "operationId": "get-template-version-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.TemplateVersion"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Patch template version by ID",
        "operationId": "patch-template-version-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          },
          {
            "description": "Patch template version request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.PatchTemplateVersionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.TemplateVersion"
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/cancel": {
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Cancel template version by ID",
        "operationId": "cancel-template-version-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/dry-run": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Create template version dry-run",
        "operationId": "create-template-version-dry-run",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          },
          {
            "description": "Dry-run request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateTemplateVersionDryRunRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.ProvisionerJob"
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/dry-run/{jobID}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template version dry-run by job ID",
        "operationId": "get-template-version-dry-run-by-job-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Job ID",
            "name": "jobID",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.ProvisionerJob"
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/dry-run/{jobID}/cancel": {
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Cancel template version dry-run by job ID",
        "operationId": "cancel-template-version-dry-run-by-job-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Job ID",
            "name": "jobID",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/dry-run/{jobID}/logs": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template version dry-run logs by job ID",
        "operationId": "get-template-version-dry-run-logs-by-job-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Job ID",
            "name": "jobID",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "Before Unix timestamp",
            "name": "before",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "After Unix timestamp",
            "name": "after",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Follow log stream",
            "name": "follow",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.ProvisionerJobLog"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/dry-run/{jobID}/resources": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template version dry-run resources by job ID",
        "operationId": "get-template-version-dry-run-resources-by-job-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Job ID",
            "name": "jobID",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceResource"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/gitauth": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get git auth by template version",
        "operationId": "get-git-auth-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateVersionGitAuth"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/logs": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get logs by template version",
        "operationId": "get-logs-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "Before log id",
            "name": "before",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "After log id",
            "name": "after",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Follow log stream",
            "name": "follow",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.ProvisionerJobLog"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/parameters": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Templates"],
        "summary": "Removed: Get parameters by template version",
        "operationId": "removed-get-parameters-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/templateversions/{templateversion}/resources": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get resources by template version",
        "operationId": "get-resources-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceResource"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/rich-parameters": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get rich parameters by template version",
        "operationId": "get-rich-parameters-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateVersionParameter"
              }
            }
          }
        }
      }
    },
    "/templateversions/{templateversion}/schema": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Templates"],
        "summary": "Removed: Get schema by template version",
        "operationId": "removed-get-schema-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/templateversions/{templateversion}/variables": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Templates"],
        "summary": "Get template variables by template version",
        "operationId": "get-template-variables-by-template-version",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Template version ID",
            "name": "templateversion",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.TemplateVersionVariable"
              }
            }
          }
        }
      }
    },
    "/updatecheck": {
      "get": {
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "Update check",
        "operationId": "update-check",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateCheckResponse"
            }
          }
        }
      }
    },
    "/users": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get users",
        "operationId": "get-users",
        "parameters": [
          {
            "type": "string",
            "description": "Search query",
            "name": "q",
            "in": "query"
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "After ID",
            "name": "after_id",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.GetUsersResponse"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Create new user",
        "operationId": "create-new-user",
        "parameters": [
          {
            "description": "Create user request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateUserRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/users/authmethods": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get authentication methods",
        "operationId": "get-authentication-methods",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.AuthMethods"
            }
          }
        }
      }
    },
    "/users/first": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Check initial user created",
        "operationId": "check-initial-user-created",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Create initial user",
        "operationId": "create-initial-user",
        "parameters": [
          {
            "description": "First user request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateFirstUserRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.CreateFirstUserResponse"
            }
          }
        }
      }
    },
    "/users/login": {
      "post": {
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Authorization"],
        "summary": "Log in user",
        "operationId": "log-in-user",
        "parameters": [
          {
            "description": "Login request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.LoginWithPasswordRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.LoginWithPasswordResponse"
            }
          }
        }
      }
    },
    "/users/logout": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Log out user",
        "operationId": "log-out-user",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/users/oauth2/github/callback": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Users"],
        "summary": "OAuth 2.0 GitHub Callback",
        "operationId": "oauth-20-github-callback",
        "responses": {
          "307": {
            "description": "Temporary Redirect"
          }
        }
      }
    },
    "/users/oidc/callback": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Users"],
        "summary": "OpenID Connect Callback",
        "operationId": "openid-connect-callback",
        "responses": {
          "307": {
            "description": "Temporary Redirect"
          }
        }
      }
    },
    "/users/roles": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Members"],
        "summary": "Get site member roles",
        "operationId": "get-site-member-roles",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.AssignableRoles"
              }
            }
          }
        }
      }
    },
    "/users/{user}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get user by name",
        "operationId": "get-user-by-name",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Delete user",
        "operationId": "delete-user",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/users/{user}/convert-login": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Authorization"],
        "summary": "Convert user from password to oauth authentication",
        "operationId": "convert-user-from-password-to-oauth-authentication",
        "parameters": [
          {
            "description": "Convert request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.ConvertLoginRequest"
            }
          },
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.OAuthConversionResponse"
            }
          }
        }
      }
    },
    "/users/{user}/gitsshkey": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get user Git SSH key",
        "operationId": "get-user-git-ssh-key",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.GitSSHKey"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Regenerate user SSH key",
        "operationId": "regenerate-user-ssh-key",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.GitSSHKey"
            }
          }
        }
      }
    },
    "/users/{user}/keys": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Create new session key",
        "operationId": "create-new-session-key",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.GenerateAPIKeyResponse"
            }
          }
        }
      }
    },
    "/users/{user}/keys/tokens": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get user tokens",
        "operationId": "get-user-tokens",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.APIKey"
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Create token API key",
        "operationId": "create-token-api-key",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Create token request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateTokenRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.GenerateAPIKeyResponse"
            }
          }
        }
      }
    },
    "/users/{user}/keys/tokens/tokenconfig": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["General"],
        "summary": "Get token config",
        "operationId": "get-token-config",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.TokenConfig"
            }
          }
        }
      }
    },
    "/users/{user}/keys/tokens/{keyname}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get API key by token name",
        "operationId": "get-api-key-by-token-name",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "string",
            "description": "Key Name",
            "name": "keyname",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.APIKey"
            }
          }
        }
      }
    },
    "/users/{user}/keys/{keyid}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get API key by ID",
        "operationId": "get-api-key-by-id",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Key ID",
            "name": "keyid",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.APIKey"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Users"],
        "summary": "Delete API key",
        "operationId": "delete-api-key",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "Key ID",
            "name": "keyid",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/users/{user}/login-type": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get user login type",
        "operationId": "get-user-login-type",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.UserLoginType"
            }
          }
        }
      }
    },
    "/users/{user}/organizations": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get organizations by user",
        "operationId": "get-organizations-by-user",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.Organization"
              }
            }
          }
        }
      }
    },
    "/users/{user}/organizations/{organizationname}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get organization by user and organization name",
        "operationId": "get-organization-by-user-and-organization-name",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Organization name",
            "name": "organizationname",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Organization"
            }
          }
        }
      }
    },
    "/users/{user}/password": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Users"],
        "summary": "Update user password",
        "operationId": "update-user-password",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Update password request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateUserPasswordRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/users/{user}/profile": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Update user profile",
        "operationId": "update-user-profile",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Updated profile",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateUserProfileRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/users/{user}/quiet-hours": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get user quiet hours schedule",
        "operationId": "get-user-quiet-hours-schedule",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "User ID",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.UserQuietHoursScheduleResponse"
              }
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Update user quiet hours schedule",
        "operationId": "update-user-quiet-hours-schedule",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "User ID",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Update schedule request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateUserQuietHoursScheduleRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.UserQuietHoursScheduleResponse"
              }
            }
          }
        }
      }
    },
    "/users/{user}/roles": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Get user roles",
        "operationId": "get-user-roles",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Assign role to user",
        "operationId": "assign-role-to-user",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "description": "Update roles request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateRoles"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/users/{user}/status/activate": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Activate user account",
        "operationId": "activate-user-account",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/users/{user}/status/suspend": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Users"],
        "summary": "Suspend user account",
        "operationId": "suspend-user-account",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.User"
            }
          }
        }
      }
    },
    "/users/{user}/workspace/{workspacename}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Get workspace metadata by user and workspace name",
        "operationId": "get-workspace-metadata-by-user-and-workspace-name",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Workspace name",
            "name": "workspacename",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "description": "Return data instead of HTTP 404 if the workspace is deleted",
            "name": "include_deleted",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Workspace"
            }
          }
        }
      }
    },
    "/users/{user}/workspace/{workspacename}/builds/{buildnumber}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get workspace build by user, workspace name, and build number",
        "operationId": "get-workspace-build-by-user-workspace-name-and-build-number",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Workspace name",
            "name": "workspacename",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "number",
            "description": "Build number",
            "name": "buildnumber",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceBuild"
            }
          }
        }
      }
    },
    "/workspace-quota/{user}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get workspace quota by user",
        "operationId": "get-workspace-quota-by-user",
        "parameters": [
          {
            "type": "string",
            "description": "User ID, name, or me",
            "name": "user",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceQuota"
            }
          }
        }
      }
    },
    "/workspaceagents/aws-instance-identity": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Authenticate agent on AWS instance",
        "operationId": "authenticate-agent-on-aws-instance",
        "parameters": [
          {
            "description": "Instance identity token",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.AWSInstanceIdentityToken"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.AuthenticateResponse"
            }
          }
        }
      }
    },
    "/workspaceagents/azure-instance-identity": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Authenticate agent on Azure instance",
        "operationId": "authenticate-agent-on-azure-instance",
        "parameters": [
          {
            "description": "Instance identity token",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.AzureInstanceIdentityToken"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.AuthenticateResponse"
            }
          }
        }
      }
    },
    "/workspaceagents/connection": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get connection info for workspace agent generic",
        "operationId": "get-connection-info-for-workspace-agent-generic",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceAgentConnectionInfo"
            }
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceagents/google-instance-identity": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Authenticate agent on Google Cloud instance",
        "operationId": "authenticate-agent-on-google-cloud-instance",
        "parameters": [
          {
            "description": "Instance identity token",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.GoogleInstanceIdentityToken"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.AuthenticateResponse"
            }
          }
        }
      }
    },
    "/workspaceagents/me/app-health": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Submit workspace agent application health",
        "operationId": "submit-workspace-agent-application-health",
        "parameters": [
          {
            "description": "Application health request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.PostAppHealthsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/workspaceagents/me/coordinate": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "description": "It accepts a WebSocket connection to an agent that listens to\nincoming connections and publishes node updates.",
        "tags": ["Agents"],
        "summary": "Coordinate workspace agent via Tailnet",
        "operationId": "coordinate-workspace-agent-via-tailnet",
        "responses": {
          "101": {
            "description": "Switching Protocols"
          }
        }
      }
    },
    "/workspaceagents/me/gitauth": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get workspace agent Git auth",
        "operationId": "get-workspace-agent-git-auth",
        "parameters": [
          {
            "type": "string",
            "format": "uri",
            "description": "Git URL",
            "name": "url",
            "in": "query",
            "required": true
          },
          {
            "type": "boolean",
            "description": "Wait for a new token to be issued",
            "name": "listen",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.GitAuthResponse"
            }
          }
        }
      }
    },
    "/workspaceagents/me/gitsshkey": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get workspace agent Git SSH key",
        "operationId": "get-workspace-agent-git-ssh-key",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.GitSSHKey"
            }
          }
        }
      }
    },
    "/workspaceagents/me/logs": {
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Patch workspace agent logs",
        "operationId": "patch-workspace-agent-logs",
        "parameters": [
          {
            "description": "logs",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.PatchLogs"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/workspaceagents/me/manifest": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get authorized workspace agent manifest",
        "operationId": "get-authorized-workspace-agent-manifest",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.Manifest"
            }
          }
        }
      }
    },
    "/workspaceagents/me/metadata/{key}": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Agents"],
        "summary": "Submit workspace agent metadata",
        "operationId": "submit-workspace-agent-metadata",
        "parameters": [
          {
            "description": "Workspace agent metadata request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.PostMetadataRequest"
            }
          },
          {
            "type": "string",
            "format": "string",
            "description": "metadata key",
            "name": "key",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceagents/me/report-lifecycle": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Agents"],
        "summary": "Submit workspace agent lifecycle state",
        "operationId": "submit-workspace-agent-lifecycle-state",
        "parameters": [
          {
            "description": "Workspace agent lifecycle request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.PostLifecycleRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceagents/me/report-stats": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Submit workspace agent stats",
        "operationId": "submit-workspace-agent-stats",
        "parameters": [
          {
            "description": "Stats request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.Stats"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/agentsdk.StatsResponse"
            }
          }
        }
      }
    },
    "/workspaceagents/me/startup": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Submit workspace agent startup",
        "operationId": "submit-workspace-agent-startup",
        "parameters": [
          {
            "description": "Startup request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.PostStartupRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceagents/me/startup-logs": {
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Removed: Patch workspace agent logs",
        "operationId": "removed-patch-workspace-agent-logs",
        "parameters": [
          {
            "description": "logs",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/agentsdk.PatchLogs"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get workspace agent by ID",
        "operationId": "get-workspace-agent-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceAgent"
            }
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/connection": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get connection info for workspace agent",
        "operationId": "get-connection-info-for-workspace-agent",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceAgentConnectionInfo"
            }
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/coordinate": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Agents"],
        "summary": "Coordinate workspace agent",
        "operationId": "coordinate-workspace-agent",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols"
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/legacy": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Agent is legacy",
        "operationId": "agent-is-legacy",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace Agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/wsproxysdk.AgentIsLegacyResponse"
            }
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceagents/{workspaceagent}/listening-ports": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get listening ports for workspace agent",
        "operationId": "get-listening-ports-for-workspace-agent",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceAgentListeningPortsResponse"
            }
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/logs": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Get logs by workspace agent",
        "operationId": "get-logs-by-workspace-agent",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "Before log id",
            "name": "before",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "After log id",
            "name": "after",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Follow log stream",
            "name": "follow",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Disable compression for WebSocket connection",
            "name": "no_compression",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceAgentLog"
              }
            }
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/pty": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Agents"],
        "summary": "Open PTY to workspace agent",
        "operationId": "open-pty-to-workspace-agent",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols"
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/startup-logs": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Agents"],
        "summary": "Removed: Get logs by workspace agent",
        "operationId": "removed-get-logs-by-workspace-agent",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "Before log id",
            "name": "before",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "After log id",
            "name": "after",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Follow log stream",
            "name": "follow",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Disable compression for WebSocket connection",
            "name": "no_compression",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceAgentLog"
              }
            }
          }
        }
      }
    },
    "/workspaceagents/{workspaceagent}/watch-metadata": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Agents"],
        "summary": "Watch for workspace agent metadata updates",
        "operationId": "watch-for-workspace-agent-metadata-updates",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace agent ID",
            "name": "workspaceagent",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspacebuilds/{workspacebuild}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get workspace build",
        "operationId": "get-workspace-build",
        "parameters": [
          {
            "type": "string",
            "description": "Workspace build ID",
            "name": "workspacebuild",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceBuild"
            }
          }
        }
      }
    },
    "/workspacebuilds/{workspacebuild}/cancel": {
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Cancel workspace build",
        "operationId": "cancel-workspace-build",
        "parameters": [
          {
            "type": "string",
            "description": "Workspace build ID",
            "name": "workspacebuild",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/workspacebuilds/{workspacebuild}/logs": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get workspace build logs",
        "operationId": "get-workspace-build-logs",
        "parameters": [
          {
            "type": "string",
            "description": "Workspace build ID",
            "name": "workspacebuild",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "description": "Before Unix timestamp",
            "name": "before",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "After Unix timestamp",
            "name": "after",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Follow log stream",
            "name": "follow",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.ProvisionerJobLog"
              }
            }
          }
        }
      }
    },
    "/workspacebuilds/{workspacebuild}/parameters": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get build parameters for workspace build",
        "operationId": "get-build-parameters-for-workspace-build",
        "parameters": [
          {
            "type": "string",
            "description": "Workspace build ID",
            "name": "workspacebuild",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceBuildParameter"
              }
            }
          }
        }
      }
    },
    "/workspacebuilds/{workspacebuild}/resources": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get workspace resources for workspace build",
        "operationId": "get-workspace-resources-for-workspace-build",
        "parameters": [
          {
            "type": "string",
            "description": "Workspace build ID",
            "name": "workspacebuild",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceResource"
              }
            }
          }
        }
      }
    },
    "/workspacebuilds/{workspacebuild}/state": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get provisioner state for workspace build",
        "operationId": "get-provisioner-state-for-workspace-build",
        "parameters": [
          {
            "type": "string",
            "description": "Workspace build ID",
            "name": "workspacebuild",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceBuild"
            }
          }
        }
      }
    },
    "/workspaceproxies": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get workspace proxies",
        "operationId": "get-workspace-proxies",
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.RegionsResponse-codersdk_WorkspaceProxy"
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Create workspace proxy",
        "operationId": "create-workspace-proxy",
        "parameters": [
          {
            "description": "Create workspace proxy request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateWorkspaceProxyRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceProxy"
            }
          }
        }
      }
    },
    "/workspaceproxies/me/app-stats": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Report workspace app stats",
        "operationId": "report-workspace-app-stats",
        "parameters": [
          {
            "description": "Report app stats request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/wsproxysdk.ReportAppStatsRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceproxies/me/coordinate": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "tags": ["Enterprise"],
        "summary": "Workspace Proxy Coordinate",
        "operationId": "workspace-proxy-coordinate",
        "responses": {
          "101": {
            "description": "Switching Protocols"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceproxies/me/deregister": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Deregister workspace proxy",
        "operationId": "deregister-workspace-proxy",
        "parameters": [
          {
            "description": "Deregister workspace proxy request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/wsproxysdk.DeregisterWorkspaceProxyRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceproxies/me/issue-signed-app-token": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Issue signed workspace app token",
        "operationId": "issue-signed-workspace-app-token",
        "parameters": [
          {
            "description": "Issue signed app token request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/workspaceapps.IssueTokenRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/wsproxysdk.IssueSignedAppTokenResponse"
            }
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceproxies/me/register": {
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Register workspace proxy",
        "operationId": "register-workspace-proxy",
        "parameters": [
          {
            "description": "Register workspace proxy request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/wsproxysdk.RegisterWorkspaceProxyRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/wsproxysdk.RegisterWorkspaceProxyResponse"
            }
          }
        },
        "x-apidocgen": {
          "skip": true
        }
      }
    },
    "/workspaceproxies/{workspaceproxy}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Get workspace proxy",
        "operationId": "get-workspace-proxy",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Proxy ID or name",
            "name": "workspaceproxy",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceProxy"
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Delete workspace proxy",
        "operationId": "delete-workspace-proxy",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Proxy ID or name",
            "name": "workspaceproxy",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Enterprise"],
        "summary": "Update workspace proxy",
        "operationId": "update-workspace-proxy",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Proxy ID or name",
            "name": "workspaceproxy",
            "in": "path",
            "required": true
          },
          {
            "description": "Update workspace proxy request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.PatchWorkspaceProxy"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceProxy"
            }
          }
        }
      }
    },
    "/workspaces": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "List workspaces",
        "operationId": "list-workspaces",
        "parameters": [
          {
            "type": "string",
            "description": "Search query in the format `key:value`. Available keys are: owner, template, name, status, has-agent, deleting_by.",
            "name": "q",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page offset",
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspacesResponse"
            }
          }
        }
      }
    },
    "/workspaces/{workspace}": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Get workspace metadata by ID",
        "operationId": "get-workspace-metadata-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "description": "Return data instead of HTTP 404 if the workspace is deleted",
            "name": "include_deleted",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Workspace"
            }
          }
        }
      },
      "patch": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Update workspace metadata by ID",
        "operationId": "update-workspace-metadata-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "description": "Metadata update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateWorkspaceRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/workspaces/{workspace}/autostart": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Update workspace autostart schedule by ID",
        "operationId": "update-workspace-autostart-schedule-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "description": "Schedule update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateWorkspaceAutostartRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/workspaces/{workspace}/builds": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Get workspace builds by workspace ID",
        "operationId": "get-workspace-builds-by-workspace-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "uuid",
            "description": "After ID",
            "name": "after_id",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page limit",
            "name": "limit",
            "in": "query"
          },
          {
            "type": "integer",
            "description": "Page offset",
            "name": "offset",
            "in": "query"
          },
          {
            "type": "string",
            "format": "date-time",
            "description": "Since timestamp",
            "name": "since",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/codersdk.WorkspaceBuild"
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Builds"],
        "summary": "Create workspace build",
        "operationId": "create-workspace-build",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "description": "Create workspace build request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.CreateWorkspaceBuildRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.WorkspaceBuild"
            }
          }
        }
      }
    },
    "/workspaces/{workspace}/dormant": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Update workspace dormancy status by id.",
        "operationId": "update-workspace-dormancy-status-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "description": "Make a workspace dormant or active",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateWorkspaceDormancy"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Workspace"
            }
          }
        }
      }
    },
    "/workspaces/{workspace}/extend": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Extend workspace deadline by ID",
        "operationId": "extend-workspace-deadline-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "description": "Extend deadline update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.PutExtendWorkspaceRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    },
    "/workspaces/{workspace}/ttl": {
      "put": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "consumes": ["application/json"],
        "tags": ["Workspaces"],
        "summary": "Update workspace TTL by ID",
        "operationId": "update-workspace-ttl-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          },
          {
            "description": "Workspace TTL update request",
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/codersdk.UpdateWorkspaceTTLRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/workspaces/{workspace}/watch": {
      "get": {
        "security": [
          {
            "CoderSessionToken": []
          }
        ],
        "produces": ["text/event-stream"],
        "tags": ["Workspaces"],
        "summary": "Watch workspace by ID",
        "operationId": "watch-workspace-by-id",
        "parameters": [
          {
            "type": "string",
            "format": "uuid",
            "description": "Workspace ID",
            "name": "workspace",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/codersdk.Response"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "agentsdk.AWSInstanceIdentityToken": {
      "type": "object",
      "required": ["document", "signature"],
      "properties": {
        "document": {
          "type": "string"
        },
        "signature": {
          "type": "string"
        }
      }
    },
    "agentsdk.AgentMetric": {
      "type": "object",
      "required": ["name", "type", "value"],
      "properties": {
        "labels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/agentsdk.AgentMetricLabel"
          }
        },
        "name": {
          "type": "string"
        },
        "type": {
          "enum": ["counter", "gauge"],
          "allOf": [
            {
              "$ref": "#/definitions/agentsdk.AgentMetricType"
            }
          ]
        },
        "value": {
          "type": "number"
        }
      }
    },
    "agentsdk.AgentMetricLabel": {
      "type": "object",
      "required": ["name", "value"],
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "agentsdk.AgentMetricType": {
      "type": "string",
      "enum": ["counter", "gauge"],
      "x-enum-varnames": ["AgentMetricTypeCounter", "AgentMetricTypeGauge"]
    },
    "agentsdk.AuthenticateResponse": {
      "type": "object",
      "properties": {
        "session_token": {
          "type": "string"
        }
      }
    },
    "agentsdk.AzureInstanceIdentityToken": {
      "type": "object",
      "required": ["encoding", "signature"],
      "properties": {
        "encoding": {
          "type": "string"
        },
        "signature": {
          "type": "string"
        }
      }
    },
    "agentsdk.GitAuthResponse": {
      "type": "object",
      "properties": {
        "password": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "username": {
          "type": "string"
        }
      }
    },
    "agentsdk.GitSSHKey": {
      "type": "object",
      "properties": {
        "private_key": {
          "type": "string"
        },
        "public_key": {
          "type": "string"
        }
      }
    },
    "agentsdk.GoogleInstanceIdentityToken": {
      "type": "object",
      "required": ["json_web_token"],
      "properties": {
        "json_web_token": {
          "type": "string"
        }
      }
    },
    "agentsdk.Log": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string"
        },
        "level": {
          "$ref": "#/definitions/codersdk.LogLevel"
        },
        "output": {
          "type": "string"
        },
        "source": {
          "$ref": "#/definitions/codersdk.WorkspaceAgentLogSource"
        }
      }
    },
    "agentsdk.Manifest": {
      "type": "object",
      "properties": {
        "agent_id": {
          "type": "string"
        },
        "apps": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceApp"
          }
        },
        "derp_force_websockets": {
          "type": "boolean"
        },
        "derpmap": {
          "$ref": "#/definitions/tailcfg.DERPMap"
        },
        "directory": {
          "type": "string"
        },
        "disable_direct_connections": {
          "type": "boolean"
        },
        "environment_variables": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "git_auth_configs": {
          "description": "GitAuthConfigs stores the number of Git configurations\nthe Coder deployment has. If this number is \u003e0, we\nset up special configuration in the workspace.",
          "type": "integer"
        },
        "metadata": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceAgentMetadataDescription"
          }
        },
        "motd_file": {
          "type": "string"
        },
        "shutdown_script": {
          "type": "string"
        },
        "shutdown_script_timeout": {
          "type": "integer"
        },
        "startup_script": {
          "type": "string"
        },
        "startup_script_timeout": {
          "type": "integer"
        },
        "vscode_port_proxy_uri": {
          "type": "string"
        }
      }
    },
    "agentsdk.PatchLogs": {
      "type": "object",
      "properties": {
        "logs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/agentsdk.Log"
          }
        }
      }
    },
    "agentsdk.PostAppHealthsRequest": {
      "type": "object",
      "properties": {
        "healths": {
          "description": "Healths is a map of the workspace app name and the health of the app.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/codersdk.WorkspaceAppHealth"
          }
        }
      }
    },
    "agentsdk.PostLifecycleRequest": {
      "type": "object",
      "properties": {
        "changed_at": {
          "type": "string"
        },
        "state": {
          "$ref": "#/definitions/codersdk.WorkspaceAgentLifecycle"
        }
      }
    },
    "agentsdk.PostMetadataRequest": {
      "type": "object",
      "properties": {
        "age": {
          "description": "Age is the number of seconds since the metadata was collected.\nIt is provided in addition to CollectedAt to protect against clock skew.",
          "type": "integer"
        },
        "collected_at": {
          "type": "string",
          "format": "date-time"
        },
        "error": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "agentsdk.PostStartupRequest": {
      "type": "object",
      "properties": {
        "expanded_directory": {
          "type": "string"
        },
        "subsystems": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.AgentSubsystem"
          }
        },
        "version": {
          "type": "string"
        }
      }
    },
    "agentsdk.Stats": {
      "type": "object",
      "properties": {
        "connection_count": {
          "description": "ConnectionCount is the number of connections received by an agent.",
          "type": "integer"
        },
        "connection_median_latency_ms": {
          "description": "ConnectionMedianLatencyMS is the median latency of all connections in milliseconds.",
          "type": "number"
        },
        "connections_by_proto": {
          "description": "ConnectionsByProto is a count of connections by protocol.",
          "type": "object",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "metrics": {
          "description": "Metrics collected by the agent",
          "type": "array",
          "items": {
            "$ref": "#/definitions/agentsdk.AgentMetric"
          }
        },
        "rx_bytes": {
          "description": "RxBytes is the number of received bytes.",
          "type": "integer"
        },
        "rx_packets": {
          "description": "RxPackets is the number of received packets.",
          "type": "integer"
        },
        "session_count_jetbrains": {
          "description": "SessionCountJetBrains is the number of connections received by an agent\nthat are from our JetBrains extension.",
          "type": "integer"
        },
        "session_count_reconnecting_pty": {
          "description": "SessionCountReconnectingPTY is the number of connections received by an agent\nthat are from the reconnecting web terminal.",
          "type": "integer"
        },
        "session_count_ssh": {
          "description": "SessionCountSSH is the number of connections received by an agent\nthat are normal, non-tagged SSH sessions.",
          "type": "integer"
        },
        "session_count_vscode": {
          "description": "SessionCountVSCode is the number of connections received by an agent\nthat are from our VS Code extension.",
          "type": "integer"
        },
        "tx_bytes": {
          "description": "TxBytes is the number of transmitted bytes.",
          "type": "integer"
        },
        "tx_packets": {
          "description": "TxPackets is the number of transmitted bytes.",
          "type": "integer"
        }
      }
    },
    "agentsdk.StatsResponse": {
      "type": "object",
      "properties": {
        "report_interval": {
          "description": "ReportInterval is the duration after which the agent should send stats\nagain.",
          "type": "integer"
        }
      }
    },
    "clibase.Annotations": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "clibase.Group": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "parent": {
          "$ref": "#/definitions/clibase.Group"
        },
        "yaml": {
          "type": "string"
        }
      }
    },
    "clibase.HostPort": {
      "type": "object",
      "properties": {
        "host": {
          "type": "string"
        },
        "port": {
          "type": "string"
        }
      }
    },
    "clibase.Option": {
      "type": "object",
      "properties": {
        "annotations": {
          "description": "Annotations enable extensions to clibase higher up in the stack. It's useful for\nhelp formatting and documentation generation.",
          "allOf": [
            {
              "$ref": "#/definitions/clibase.Annotations"
            }
          ]
        },
        "default": {
          "description": "Default is parsed into Value if set.",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "env": {
          "description": "Env is the environment variable used to configure this option. If unset,\nenvironment configuring is disabled.",
          "type": "string"
        },
        "flag": {
          "description": "Flag is the long name of the flag used to configure this option. If unset,\nflag configuring is disabled.",
          "type": "string"
        },
        "flag_shorthand": {
          "description": "FlagShorthand is the one-character shorthand for the flag. If unset, no\nshorthand is used.",
          "type": "string"
        },
        "group": {
          "description": "Group is a group hierarchy that helps organize this option in help, configs\nand other documentation.",
          "allOf": [
            {
              "$ref": "#/definitions/clibase.Group"
            }
          ]
        },
        "hidden": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        },
        "required": {
          "description": "Required means this value must be set by some means. It requires\n`ValueSource != ValueSourceNone`\nIf `Default` is set, then `Required` is ignored.",
          "type": "boolean"
        },
        "use_instead": {
          "description": "UseInstead is a list of options that should be used instead of this one.\nThe field is used to generate a deprecation warning.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/clibase.Option"
          }
        },
        "value": {
          "description": "Value includes the types listed in values.go."
        },
        "value_source": {
          "$ref": "#/definitions/clibase.ValueSource"
        },
        "yaml": {
          "description": "YAML is the YAML key used to configure this option. If unset, YAML\nconfiguring is disabled.",
          "type": "string"
        }
      }
    },
    "clibase.Regexp": {
      "type": "object"
    },
    "clibase.Struct-array_codersdk_GitAuthConfig": {
      "type": "object",
      "properties": {
        "value": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.GitAuthConfig"
          }
        }
      }
    },
    "clibase.Struct-array_codersdk_LinkConfig": {
      "type": "object",
      "properties": {
        "value": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.LinkConfig"
          }
        }
      }
    },
    "clibase.URL": {
      "type": "object",
      "properties": {
        "forceQuery": {
          "description": "append a query ('?') even if RawQuery is empty",
          "type": "boolean"
        },
        "fragment": {
          "description": "fragment for references, without '#'",
          "type": "string"
        },
        "host": {
          "description": "host or host:port",
          "type": "string"
        },
        "omitHost": {
          "description": "do not emit empty host (authority)",
          "type": "boolean"
        },
        "opaque": {
          "description": "encoded opaque data",
          "type": "string"
        },
        "path": {
          "description": "path (relative paths may omit leading slash)",
          "type": "string"
        },
        "rawFragment": {
          "description": "encoded fragment hint (see EscapedFragment method)",
          "type": "string"
        },
        "rawPath": {
          "description": "encoded path hint (see EscapedPath method)",
          "type": "string"
        },
        "rawQuery": {
          "description": "encoded query values, without '?'",
          "type": "string"
        },
        "scheme": {
          "type": "string"
        },
        "user": {
          "description": "username and password information",
          "allOf": [
            {
              "$ref": "#/definitions/url.Userinfo"
            }
          ]
        }
      }
    },
    "clibase.ValueSource": {
      "type": "string",
      "enum": ["", "flag", "env", "yaml", "default"],
      "x-enum-varnames": [
        "ValueSourceNone",
        "ValueSourceFlag",
        "ValueSourceEnv",
        "ValueSourceYAML",
        "ValueSourceDefault"
      ]
    },
    "coderd.SCIMUser": {
      "type": "object",
      "properties": {
        "active": {
          "type": "boolean"
        },
        "emails": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "display": {
                "type": "string"
              },
              "primary": {
                "type": "boolean"
              },
              "type": {
                "type": "string"
              },
              "value": {
                "type": "string",
                "format": "email"
              }
            }
          }
        },
        "groups": {
          "type": "array",
          "items": {}
        },
        "id": {
          "type": "string"
        },
        "meta": {
          "type": "object",
          "properties": {
            "resourceType": {
              "type": "string"
            }
          }
        },
        "name": {
          "type": "object",
          "properties": {
            "familyName": {
              "type": "string"
            },
            "givenName": {
              "type": "string"
            }
          }
        },
        "schemas": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "userName": {
          "type": "string"
        }
      }
    },
    "coderd.cspViolation": {
      "type": "object",
      "properties": {
        "csp-report": {
          "type": "object",
          "additionalProperties": true
        }
      }
    },
    "codersdk.ACLAvailable": {
      "type": "object",
      "properties": {
        "groups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Group"
          }
        },
        "users": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.User"
          }
        }
      }
    },
    "codersdk.APIKey": {
      "type": "object",
      "required": [
        "created_at",
        "expires_at",
        "id",
        "last_used",
        "lifetime_seconds",
        "login_type",
        "scope",
        "token_name",
        "updated_at",
        "user_id"
      ],
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time"
        },
        "id": {
          "type": "string"
        },
        "last_used": {
          "type": "string",
          "format": "date-time"
        },
        "lifetime_seconds": {
          "type": "integer"
        },
        "login_type": {
          "enum": ["password", "github", "oidc", "token"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.LoginType"
            }
          ]
        },
        "scope": {
          "enum": ["all", "application_connect"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.APIKeyScope"
            }
          ]
        },
        "token_name": {
          "type": "string"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "user_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.APIKeyScope": {
      "type": "string",
      "enum": ["all", "application_connect"],
      "x-enum-varnames": ["APIKeyScopeAll", "APIKeyScopeApplicationConnect"]
    },
    "codersdk.AddLicenseRequest": {
      "type": "object",
      "required": ["license"],
      "properties": {
        "license": {
          "type": "string"
        }
      }
    },
    "codersdk.AgentSubsystem": {
      "type": "string",
      "enum": ["envbox", "envbuilder", "exectrace"],
      "x-enum-varnames": [
        "AgentSubsystemEnvbox",
        "AgentSubsystemEnvbuilder",
        "AgentSubsystemExectrace"
      ]
    },
    "codersdk.AppHostResponse": {
      "type": "object",
      "properties": {
        "host": {
          "description": "Host is the externally accessible URL for the Coder instance.",
          "type": "string"
        }
      }
    },
    "codersdk.AppearanceConfig": {
      "type": "object",
      "properties": {
        "logo_url": {
          "type": "string"
        },
        "service_banner": {
          "$ref": "#/definitions/codersdk.ServiceBannerConfig"
        },
        "support_links": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.LinkConfig"
          }
        }
      }
    },
    "codersdk.AssignableRoles": {
      "type": "object",
      "properties": {
        "assignable": {
          "type": "boolean"
        },
        "display_name": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "codersdk.AuditAction": {
      "type": "string",
      "enum": [
        "create",
        "write",
        "delete",
        "start",
        "stop",
        "login",
        "logout",
        "register"
      ],
      "x-enum-varnames": [
        "AuditActionCreate",
        "AuditActionWrite",
        "AuditActionDelete",
        "AuditActionStart",
        "AuditActionStop",
        "AuditActionLogin",
        "AuditActionLogout",
        "AuditActionRegister"
      ]
    },
    "codersdk.AuditDiff": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/codersdk.AuditDiffField"
      }
    },
    "codersdk.AuditDiffField": {
      "type": "object",
      "properties": {
        "new": {},
        "old": {},
        "secret": {
          "type": "boolean"
        }
      }
    },
    "codersdk.AuditLog": {
      "type": "object",
      "properties": {
        "action": {
          "$ref": "#/definitions/codersdk.AuditAction"
        },
        "additional_fields": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "description": {
          "type": "string"
        },
        "diff": {
          "$ref": "#/definitions/codersdk.AuditDiff"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "ip": {
          "type": "string"
        },
        "is_deleted": {
          "type": "boolean"
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "request_id": {
          "type": "string",
          "format": "uuid"
        },
        "resource_icon": {
          "type": "string"
        },
        "resource_id": {
          "type": "string",
          "format": "uuid"
        },
        "resource_link": {
          "type": "string"
        },
        "resource_target": {
          "description": "ResourceTarget is the name of the resource.",
          "type": "string"
        },
        "resource_type": {
          "$ref": "#/definitions/codersdk.ResourceType"
        },
        "status_code": {
          "type": "integer"
        },
        "time": {
          "type": "string",
          "format": "date-time"
        },
        "user": {
          "$ref": "#/definitions/codersdk.User"
        },
        "user_agent": {
          "type": "string"
        }
      }
    },
    "codersdk.AuditLogResponse": {
      "type": "object",
      "properties": {
        "audit_logs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.AuditLog"
          }
        },
        "count": {
          "type": "integer"
        }
      }
    },
    "codersdk.AuthMethod": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      }
    },
    "codersdk.AuthMethods": {
      "type": "object",
      "properties": {
        "github": {
          "$ref": "#/definitions/codersdk.AuthMethod"
        },
        "oidc": {
          "$ref": "#/definitions/codersdk.OIDCAuthMethod"
        },
        "password": {
          "$ref": "#/definitions/codersdk.AuthMethod"
        }
      }
    },
    "codersdk.AuthorizationCheck": {
      "description": "AuthorizationCheck is used to check if the currently authenticated user (or the specified user) can do a given action to a given set of objects.",
      "type": "object",
      "properties": {
        "action": {
          "type": "string",
          "enum": ["create", "read", "update", "delete"]
        },
        "object": {
          "description": "Object can represent a \"set\" of objects, such as: all workspaces in an organization, all workspaces owned by me, and all workspaces across the entire product.\nWhen defining an object, use the most specific language when possible to\nproduce the smallest set. Meaning to set as many fields on 'Object' as\nyou can. Example, if you want to check if you can update all workspaces\nowned by 'me', try to also add an 'OrganizationID' to the settings.\nOmitting the 'OrganizationID' could produce the incorrect value, as\nworkspaces have both `user` and `organization` owners.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.AuthorizationObject"
            }
          ]
        }
      }
    },
    "codersdk.AuthorizationObject": {
      "description": "AuthorizationObject can represent a \"set\" of objects, such as: all workspaces in an organization, all workspaces owned by me, all workspaces across the entire product.",
      "type": "object",
      "properties": {
        "organization_id": {
          "description": "OrganizationID (optional) adds the set constraint to all resources owned by a given organization.",
          "type": "string"
        },
        "owner_id": {
          "description": "OwnerID (optional) adds the set constraint to all resources owned by a given user.",
          "type": "string"
        },
        "resource_id": {
          "description": "ResourceID (optional) reduces the set to a singular resource. This assigns\na resource ID to the resource type, eg: a single workspace.\nThe rbac library will not fetch the resource from the database, so if you\nare using this option, you should also set the owner ID and organization ID\nif possible. Be as specific as possible using all the fields relevant.",
          "type": "string"
        },
        "resource_type": {
          "description": "ResourceType is the name of the resource.\n`./coderd/rbac/object.go` has the list of valid resource types.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.RBACResource"
            }
          ]
        }
      }
    },
    "codersdk.AuthorizationRequest": {
      "type": "object",
      "properties": {
        "checks": {
          "description": "Checks is a map keyed with an arbitrary string to a permission check.\nThe key can be any string that is helpful to the caller, and allows\nmultiple permission checks to be run in a single request.\nThe key ensures that each permission check has the same key in the\nresponse.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/codersdk.AuthorizationCheck"
          }
        }
      }
    },
    "codersdk.AuthorizationResponse": {
      "type": "object",
      "additionalProperties": {
        "type": "boolean"
      }
    },
    "codersdk.BuildInfoResponse": {
      "type": "object",
      "properties": {
        "dashboard_url": {
          "description": "DashboardURL is the URL to hit the deployment's dashboard.\nFor external workspace proxies, this is the coderd they are connected\nto.",
          "type": "string"
        },
        "external_url": {
          "description": "ExternalURL references the current Coder version.\nFor production builds, this will link directly to a release. For development builds, this will link to a commit.",
          "type": "string"
        },
        "version": {
          "description": "Version returns the semantic version of the build.",
          "type": "string"
        },
        "workspace_proxy": {
          "type": "boolean"
        }
      }
    },
    "codersdk.BuildReason": {
      "type": "string",
      "enum": ["initiator", "autostart", "autostop"],
      "x-enum-varnames": [
        "BuildReasonInitiator",
        "BuildReasonAutostart",
        "BuildReasonAutostop"
      ]
    },
    "codersdk.ConnectionLatency": {
      "type": "object",
      "properties": {
        "p50": {
          "type": "number",
          "example": 31.312
        },
        "p95": {
          "type": "number",
          "example": 119.832
        }
      }
    },
    "codersdk.ConvertLoginRequest": {
      "type": "object",
      "required": ["password", "to_type"],
      "properties": {
        "password": {
          "type": "string"
        },
        "to_type": {
          "description": "ToType is the login type to convert to.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.LoginType"
            }
          ]
        }
      }
    },
    "codersdk.CreateFirstUserRequest": {
      "type": "object",
      "required": ["email", "password", "username"],
      "properties": {
        "email": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "trial": {
          "type": "boolean"
        },
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.CreateFirstUserResponse": {
      "type": "object",
      "properties": {
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "user_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.CreateGroupRequest": {
      "type": "object",
      "properties": {
        "avatar_url": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "quota_allowance": {
          "type": "integer"
        }
      }
    },
    "codersdk.CreateOrganizationRequest": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string"
        }
      }
    },
    "codersdk.CreateTemplateRequest": {
      "type": "object",
      "required": ["name", "template_version_id"],
      "properties": {
        "allow_user_autostart": {
          "description": "AllowUserAutostart allows users to set a schedule for autostarting their\nworkspace. By default this is true. This can only be disabled when using\nan enterprise license.",
          "type": "boolean"
        },
        "allow_user_autostop": {
          "description": "AllowUserAutostop allows users to set a custom workspace TTL to use in\nplace of the template's DefaultTTL field. By default this is true. If\nfalse, the DefaultTTL will always be used. This can only be disabled when\nusing an enterprise license.",
          "type": "boolean"
        },
        "allow_user_cancel_workspace_jobs": {
          "description": "Allow users to cancel in-progress workspace jobs.\n*bool as the default value is \"true\".",
          "type": "boolean"
        },
        "autostop_requirement": {
          "description": "AutostopRequirement allows optionally specifying the autostop requirement\nfor workspaces created from this template. This is an enterprise feature.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.TemplateAutostopRequirement"
            }
          ]
        },
        "default_ttl_ms": {
          "description": "DefaultTTLMillis allows optionally specifying the default TTL\nfor all workspaces created from this template.",
          "type": "integer"
        },
        "delete_ttl_ms": {
          "description": "TimeTilDormantAutoDeleteMillis allows optionally specifying the max lifetime before Coder\npermanently deletes dormant workspaces created from this template.",
          "type": "integer"
        },
        "description": {
          "description": "Description is a description of what the template contains. It must be\nless than 128 bytes.",
          "type": "string"
        },
        "disable_everyone_group_access": {
          "description": "DisableEveryoneGroupAccess allows optionally disabling the default\nbehavior of granting the 'everyone' group access to use the template.\nIf this is set to true, the template will not be available to all users,\nand must be explicitly granted to users or groups in the permissions settings\nof the template.",
          "type": "boolean"
        },
        "display_name": {
          "description": "DisplayName is the displayed name of the template.",
          "type": "string"
        },
        "dormant_ttl_ms": {
          "description": "TimeTilDormantMillis allows optionally specifying the max lifetime before Coder\nlocks inactive workspaces created from this template.",
          "type": "integer"
        },
        "failure_ttl_ms": {
          "description": "FailureTTLMillis allows optionally specifying the max lifetime before Coder\nstops all resources for failed workspaces created from this template.",
          "type": "integer"
        },
        "icon": {
          "description": "Icon is a relative path or external URL that specifies\nan icon to be displayed in the dashboard.",
          "type": "string"
        },
        "max_ttl_ms": {
          "description": "TODO(@dean): remove max_ttl once autostop_requirement is matured",
          "type": "integer"
        },
        "name": {
          "description": "Name is the name of the template.",
          "type": "string"
        },
        "template_version_id": {
          "description": "VersionID is an in-progress or completed job to use as an initial version\nof the template.\n\nThis is required on creation to enable a user-flow of validating a\ntemplate works. There is no reason the data-model cannot support empty\ntemplates, but it doesn't make sense for users.",
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.CreateTemplateVersionDryRunRequest": {
      "type": "object",
      "properties": {
        "rich_parameter_values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceBuildParameter"
          }
        },
        "user_variable_values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.VariableValue"
          }
        },
        "workspace_name": {
          "type": "string"
        }
      }
    },
    "codersdk.CreateTemplateVersionRequest": {
      "type": "object",
      "required": ["provisioner", "storage_method"],
      "properties": {
        "example_id": {
          "type": "string"
        },
        "file_id": {
          "type": "string",
          "format": "uuid"
        },
        "message": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "provisioner": {
          "type": "string",
          "enum": ["terraform", "echo"]
        },
        "storage_method": {
          "enum": ["file"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.ProvisionerStorageMethod"
            }
          ]
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "template_id": {
          "description": "TemplateID optionally associates a version with a template.",
          "type": "string",
          "format": "uuid"
        },
        "user_variable_values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.VariableValue"
          }
        }
      }
    },
    "codersdk.CreateTestAuditLogRequest": {
      "type": "object",
      "properties": {
        "action": {
          "enum": ["create", "write", "delete", "start", "stop"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.AuditAction"
            }
          ]
        },
        "additional_fields": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "build_reason": {
          "enum": ["autostart", "autostop", "initiator"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.BuildReason"
            }
          ]
        },
        "resource_id": {
          "type": "string",
          "format": "uuid"
        },
        "resource_type": {
          "enum": [
            "template",
            "template_version",
            "user",
            "workspace",
            "workspace_build",
            "git_ssh_key",
            "auditable_group"
          ],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.ResourceType"
            }
          ]
        },
        "time": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "codersdk.CreateTokenRequest": {
      "type": "object",
      "properties": {
        "lifetime": {
          "type": "integer"
        },
        "scope": {
          "enum": ["all", "application_connect"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.APIKeyScope"
            }
          ]
        },
        "token_name": {
          "type": "string"
        }
      }
    },
    "codersdk.CreateUserRequest": {
      "type": "object",
      "required": ["email", "username"],
      "properties": {
        "disable_login": {
          "description": "DisableLogin sets the user's login type to 'none'. This prevents the user\nfrom being able to use a password or any other authentication method to login.\nDeprecated: Set UserLoginType=LoginTypeDisabled instead.",
          "type": "boolean"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "login_type": {
          "description": "UserLoginType defaults to LoginTypePassword.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.LoginType"
            }
          ]
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "password": {
          "type": "string"
        },
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.CreateWorkspaceBuildRequest": {
      "type": "object",
      "required": ["transition"],
      "properties": {
        "dry_run": {
          "type": "boolean"
        },
        "log_level": {
          "description": "Log level changes the default logging verbosity of a provider (\"info\" if empty).",
          "enum": ["debug"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.ProvisionerLogLevel"
            }
          ]
        },
        "orphan": {
          "description": "Orphan may be set for the Destroy transition.",
          "type": "boolean"
        },
        "rich_parameter_values": {
          "description": "ParameterValues are optional. It will write params to the 'workspace' scope.\nThis will overwrite any existing parameters with the same name.\nThis will not delete old params not included in this list.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceBuildParameter"
          }
        },
        "state": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "template_version_id": {
          "type": "string",
          "format": "uuid"
        },
        "transition": {
          "enum": ["create", "start", "stop", "delete"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceTransition"
            }
          ]
        }
      }
    },
    "codersdk.CreateWorkspaceProxyRequest": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "display_name": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "codersdk.CreateWorkspaceRequest": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "autostart_schedule": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "rich_parameter_values": {
          "description": "RichParameterValues allows for additional parameters to be provided\nduring the initial provision.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceBuildParameter"
          }
        },
        "template_id": {
          "description": "TemplateID specifies which template should be used for creating the workspace.",
          "type": "string",
          "format": "uuid"
        },
        "template_version_id": {
          "description": "TemplateVersionID can be used to specify a specific version of a template for creating the workspace.",
          "type": "string",
          "format": "uuid"
        },
        "ttl_ms": {
          "type": "integer"
        }
      }
    },
    "codersdk.DAUEntry": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "integer"
        },
        "date": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "codersdk.DAUsResponse": {
      "type": "object",
      "properties": {
        "entries": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.DAUEntry"
          }
        },
        "tz_hour_offset": {
          "type": "integer"
        }
      }
    },
    "codersdk.DERP": {
      "type": "object",
      "properties": {
        "config": {
          "$ref": "#/definitions/codersdk.DERPConfig"
        },
        "server": {
          "$ref": "#/definitions/codersdk.DERPServerConfig"
        }
      }
    },
    "codersdk.DERPConfig": {
      "type": "object",
      "properties": {
        "block_direct": {
          "type": "boolean"
        },
        "force_websockets": {
          "type": "boolean"
        },
        "path": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      }
    },
    "codersdk.DERPRegion": {
      "type": "object",
      "properties": {
        "latency_ms": {
          "type": "number"
        },
        "preferred": {
          "type": "boolean"
        }
      }
    },
    "codersdk.DERPServerConfig": {
      "type": "object",
      "properties": {
        "enable": {
          "type": "boolean"
        },
        "region_code": {
          "type": "string"
        },
        "region_id": {
          "type": "integer"
        },
        "region_name": {
          "type": "string"
        },
        "relay_url": {
          "$ref": "#/definitions/clibase.URL"
        },
        "stun_addresses": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.DangerousConfig": {
      "type": "object",
      "properties": {
        "allow_all_cors": {
          "type": "boolean"
        },
        "allow_path_app_sharing": {
          "type": "boolean"
        },
        "allow_path_app_site_owner_access": {
          "type": "boolean"
        }
      }
    },
    "codersdk.DeploymentConfig": {
      "type": "object",
      "properties": {
        "config": {
          "$ref": "#/definitions/codersdk.DeploymentValues"
        },
        "options": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/clibase.Option"
          }
        }
      }
    },
    "codersdk.DeploymentStats": {
      "type": "object",
      "properties": {
        "aggregated_from": {
          "description": "AggregatedFrom is the time in which stats are aggregated from.\nThis might be back in time a specific duration or interval.",
          "type": "string",
          "format": "date-time"
        },
        "collected_at": {
          "description": "CollectedAt is the time in which stats are collected at.",
          "type": "string",
          "format": "date-time"
        },
        "next_update_at": {
          "description": "NextUpdateAt is the time when the next batch of stats will\nbe updated.",
          "type": "string",
          "format": "date-time"
        },
        "session_count": {
          "$ref": "#/definitions/codersdk.SessionCountDeploymentStats"
        },
        "workspaces": {
          "$ref": "#/definitions/codersdk.WorkspaceDeploymentStats"
        }
      }
    },
    "codersdk.DeploymentValues": {
      "type": "object",
      "properties": {
        "access_url": {
          "$ref": "#/definitions/clibase.URL"
        },
        "address": {
          "description": "DEPRECATED: Use HTTPAddress or TLS.Address instead.",
          "allOf": [
            {
              "$ref": "#/definitions/clibase.HostPort"
            }
          ]
        },
        "agent_fallback_troubleshooting_url": {
          "$ref": "#/definitions/clibase.URL"
        },
        "agent_stat_refresh_interval": {
          "type": "integer"
        },
        "autobuild_poll_interval": {
          "type": "integer"
        },
        "browser_only": {
          "type": "boolean"
        },
        "cache_directory": {
          "type": "string"
        },
        "config": {
          "type": "string"
        },
        "config_ssh": {
          "$ref": "#/definitions/codersdk.SSHConfig"
        },
        "dangerous": {
          "$ref": "#/definitions/codersdk.DangerousConfig"
        },
        "derp": {
          "$ref": "#/definitions/codersdk.DERP"
        },
        "disable_owner_workspace_exec": {
          "type": "boolean"
        },
        "disable_password_auth": {
          "type": "boolean"
        },
        "disable_path_apps": {
          "type": "boolean"
        },
        "disable_session_expiry_refresh": {
          "type": "boolean"
        },
        "docs_url": {
          "$ref": "#/definitions/clibase.URL"
        },
        "enable_terraform_debug_mode": {
          "type": "boolean"
        },
        "experiments": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "git_auth": {
          "$ref": "#/definitions/clibase.Struct-array_codersdk_GitAuthConfig"
        },
        "http_address": {
          "description": "HTTPAddress is a string because it may be set to zero to disable.",
          "type": "string"
        },
        "in_memory_database": {
          "type": "boolean"
        },
        "job_hang_detector_interval": {
          "type": "integer"
        },
        "logging": {
          "$ref": "#/definitions/codersdk.LoggingConfig"
        },
        "max_session_expiry": {
          "type": "integer"
        },
        "max_token_lifetime": {
          "type": "integer"
        },
        "metrics_cache_refresh_interval": {
          "type": "integer"
        },
        "oauth2": {
          "$ref": "#/definitions/codersdk.OAuth2Config"
        },
        "oidc": {
          "$ref": "#/definitions/codersdk.OIDCConfig"
        },
        "pg_connection_url": {
          "type": "string"
        },
        "pprof": {
          "$ref": "#/definitions/codersdk.PprofConfig"
        },
        "prometheus": {
          "$ref": "#/definitions/codersdk.PrometheusConfig"
        },
        "provisioner": {
          "$ref": "#/definitions/codersdk.ProvisionerConfig"
        },
        "proxy_health_status_interval": {
          "type": "integer"
        },
        "proxy_trusted_headers": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "proxy_trusted_origins": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "rate_limit": {
          "$ref": "#/definitions/codersdk.RateLimitConfig"
        },
        "redirect_to_access_url": {
          "type": "boolean"
        },
        "scim_api_key": {
          "type": "string"
        },
        "secure_auth_cookie": {
          "type": "boolean"
        },
        "ssh_keygen_algorithm": {
          "type": "string"
        },
        "strict_transport_security": {
          "type": "integer"
        },
        "strict_transport_security_options": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "support": {
          "$ref": "#/definitions/codersdk.SupportConfig"
        },
        "swagger": {
          "$ref": "#/definitions/codersdk.SwaggerConfig"
        },
        "telemetry": {
          "$ref": "#/definitions/codersdk.TelemetryConfig"
        },
        "tls": {
          "$ref": "#/definitions/codersdk.TLSConfig"
        },
        "trace": {
          "$ref": "#/definitions/codersdk.TraceConfig"
        },
        "update_check": {
          "type": "boolean"
        },
        "user_quiet_hours_schedule": {
          "$ref": "#/definitions/codersdk.UserQuietHoursScheduleConfig"
        },
        "verbose": {
          "type": "boolean"
        },
        "wgtunnel_host": {
          "type": "string"
        },
        "wildcard_access_url": {
          "$ref": "#/definitions/clibase.URL"
        },
        "write_config": {
          "type": "boolean"
        }
      }
    },
    "codersdk.DisplayApp": {
      "type": "string",
      "enum": [
        "vscode",
        "vscode_insiders",
        "web_terminal",
        "port_forwarding_helper",
        "ssh_helper"
      ],
      "x-enum-varnames": [
        "DisplayAppVSCodeDesktop",
        "DisplayAppVSCodeInsiders",
        "DisplayAppWebTerminal",
        "DisplayAppPortForward",
        "DisplayAppSSH"
      ]
    },
    "codersdk.Entitlement": {
      "type": "string",
      "enum": ["entitled", "grace_period", "not_entitled"],
      "x-enum-varnames": [
        "EntitlementEntitled",
        "EntitlementGracePeriod",
        "EntitlementNotEntitled"
      ]
    },
    "codersdk.Entitlements": {
      "type": "object",
      "properties": {
        "errors": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "features": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/codersdk.Feature"
          }
        },
        "has_license": {
          "type": "boolean"
        },
        "refreshed_at": {
          "type": "string",
          "format": "date-time"
        },
        "require_telemetry": {
          "type": "boolean"
        },
        "trial": {
          "type": "boolean"
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.Experiment": {
      "type": "string",
      "enum": [
        "moons",
        "workspace_actions",
        "tailnet_pg_coordinator",
        "single_tailnet",
        "template_autostop_requirement",
        "deployment_health_page"
      ],
      "x-enum-varnames": [
        "ExperimentMoons",
        "ExperimentWorkspaceActions",
        "ExperimentTailnetPGCoordinator",
        "ExperimentSingleTailnet",
        "ExperimentTemplateAutostopRequirement",
        "ExperimentDeploymentHealthPage"
      ]
    },
    "codersdk.Feature": {
      "type": "object",
      "properties": {
        "actual": {
          "type": "integer"
        },
        "enabled": {
          "type": "boolean"
        },
        "entitlement": {
          "$ref": "#/definitions/codersdk.Entitlement"
        },
        "limit": {
          "type": "integer"
        }
      }
    },
    "codersdk.GenerateAPIKeyResponse": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        }
      }
    },
    "codersdk.GetUsersResponse": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer"
        },
        "users": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.User"
          }
        }
      }
    },
    "codersdk.GitAuth": {
      "type": "object",
      "properties": {
        "app_install_url": {
          "description": "AppInstallURL is the URL to install the app.",
          "type": "string"
        },
        "app_installable": {
          "description": "AppInstallable is true if the request for app installs was successful.",
          "type": "boolean"
        },
        "authenticated": {
          "type": "boolean"
        },
        "device": {
          "type": "boolean"
        },
        "installations": {
          "description": "AppInstallations are the installations that the user has access to.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.GitAuthAppInstallation"
          }
        },
        "type": {
          "type": "string"
        },
        "user": {
          "description": "User is the user that authenticated with the provider.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.GitAuthUser"
            }
          ]
        }
      }
    },
    "codersdk.GitAuthAppInstallation": {
      "type": "object",
      "properties": {
        "account": {
          "$ref": "#/definitions/codersdk.GitAuthUser"
        },
        "configure_url": {
          "type": "string"
        },
        "id": {
          "type": "integer"
        }
      }
    },
    "codersdk.GitAuthConfig": {
      "type": "object",
      "properties": {
        "app_install_url": {
          "type": "string"
        },
        "app_installations_url": {
          "type": "string"
        },
        "auth_url": {
          "type": "string"
        },
        "client_id": {
          "type": "string"
        },
        "device_code_url": {
          "type": "string"
        },
        "device_flow": {
          "type": "boolean"
        },
        "id": {
          "type": "string"
        },
        "no_refresh": {
          "type": "boolean"
        },
        "regex": {
          "type": "string"
        },
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "token_url": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "validate_url": {
          "type": "string"
        }
      }
    },
    "codersdk.GitAuthDevice": {
      "type": "object",
      "properties": {
        "device_code": {
          "type": "string"
        },
        "expires_in": {
          "type": "integer"
        },
        "interval": {
          "type": "integer"
        },
        "user_code": {
          "type": "string"
        },
        "verification_uri": {
          "type": "string"
        }
      }
    },
    "codersdk.GitAuthUser": {
      "type": "object",
      "properties": {
        "avatar_url": {
          "type": "string"
        },
        "login": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "profile_url": {
          "type": "string"
        }
      }
    },
    "codersdk.GitProvider": {
      "type": "string",
      "enum": ["azure-devops", "github", "gitlab", "bitbucket"],
      "x-enum-varnames": [
        "GitProviderAzureDevops",
        "GitProviderGitHub",
        "GitProviderGitLab",
        "GitProviderBitBucket"
      ]
    },
    "codersdk.GitSSHKey": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "public_key": {
          "type": "string"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "user_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.Group": {
      "type": "object",
      "properties": {
        "avatar_url": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "members": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.User"
          }
        },
        "name": {
          "type": "string"
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "quota_allowance": {
          "type": "integer"
        },
        "source": {
          "$ref": "#/definitions/codersdk.GroupSource"
        }
      }
    },
    "codersdk.GroupSource": {
      "type": "string",
      "enum": ["user", "oidc"],
      "x-enum-varnames": ["GroupSourceUser", "GroupSourceOIDC"]
    },
    "codersdk.Healthcheck": {
      "type": "object",
      "properties": {
        "interval": {
          "description": "Interval specifies the seconds between each health check.",
          "type": "integer"
        },
        "threshold": {
          "description": "Threshold specifies the number of consecutive failed health checks before returning \"unhealthy\".",
          "type": "integer"
        },
        "url": {
          "description": "URL specifies the endpoint to check for the app health.",
          "type": "string"
        }
      }
    },
    "codersdk.InsightsReportInterval": {
      "type": "string",
      "enum": ["day"],
      "x-enum-varnames": ["InsightsReportIntervalDay"]
    },
    "codersdk.IssueReconnectingPTYSignedTokenRequest": {
      "type": "object",
      "required": ["agentID", "url"],
      "properties": {
        "agentID": {
          "type": "string",
          "format": "uuid"
        },
        "url": {
          "description": "URL is the URL of the reconnecting-pty endpoint you are connecting to.",
          "type": "string"
        }
      }
    },
    "codersdk.IssueReconnectingPTYSignedTokenResponse": {
      "type": "object",
      "properties": {
        "signed_token": {
          "type": "string"
        }
      }
    },
    "codersdk.JobErrorCode": {
      "type": "string",
      "enum": ["REQUIRED_TEMPLATE_VARIABLES"],
      "x-enum-varnames": ["RequiredTemplateVariables"]
    },
    "codersdk.License": {
      "type": "object",
      "properties": {
        "claims": {
          "description": "Claims are the JWT claims asserted by the license.  Here we use\na generic string map to ensure that all data from the server is\nparsed verbatim, not just the fields this version of Coder\nunderstands.",
          "type": "object",
          "additionalProperties": true
        },
        "id": {
          "type": "integer"
        },
        "uploaded_at": {
          "type": "string",
          "format": "date-time"
        },
        "uuid": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.LinkConfig": {
      "type": "object",
      "properties": {
        "icon": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "target": {
          "type": "string"
        }
      }
    },
    "codersdk.LogLevel": {
      "type": "string",
      "enum": ["trace", "debug", "info", "warn", "error"],
      "x-enum-varnames": [
        "LogLevelTrace",
        "LogLevelDebug",
        "LogLevelInfo",
        "LogLevelWarn",
        "LogLevelError"
      ]
    },
    "codersdk.LogSource": {
      "type": "string",
      "enum": ["provisioner_daemon", "provisioner"],
      "x-enum-varnames": ["LogSourceProvisionerDaemon", "LogSourceProvisioner"]
    },
    "codersdk.LoggingConfig": {
      "type": "object",
      "properties": {
        "human": {
          "type": "string"
        },
        "json": {
          "type": "string"
        },
        "log_filter": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "stackdriver": {
          "type": "string"
        }
      }
    },
    "codersdk.LoginType": {
      "type": "string",
      "enum": ["", "password", "github", "oidc", "token", "none"],
      "x-enum-varnames": [
        "LoginTypeUnknown",
        "LoginTypePassword",
        "LoginTypeGithub",
        "LoginTypeOIDC",
        "LoginTypeToken",
        "LoginTypeNone"
      ]
    },
    "codersdk.LoginWithPasswordRequest": {
      "type": "object",
      "required": ["email", "password"],
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "password": {
          "type": "string"
        }
      }
    },
    "codersdk.LoginWithPasswordResponse": {
      "type": "object",
      "required": ["session_token"],
      "properties": {
        "session_token": {
          "type": "string"
        }
      }
    },
    "codersdk.MinimalUser": {
      "type": "object",
      "required": ["id", "username"],
      "properties": {
        "avatar_url": {
          "type": "string",
          "format": "uri"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.OAuth2Config": {
      "type": "object",
      "properties": {
        "github": {
          "$ref": "#/definitions/codersdk.OAuth2GithubConfig"
        }
      }
    },
    "codersdk.OAuth2GithubConfig": {
      "type": "object",
      "properties": {
        "allow_everyone": {
          "type": "boolean"
        },
        "allow_signups": {
          "type": "boolean"
        },
        "allowed_orgs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "allowed_teams": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "client_id": {
          "type": "string"
        },
        "client_secret": {
          "type": "string"
        },
        "enterprise_base_url": {
          "type": "string"
        }
      }
    },
    "codersdk.OAuthConversionResponse": {
      "type": "object",
      "properties": {
        "expires_at": {
          "type": "string",
          "format": "date-time"
        },
        "state_string": {
          "type": "string"
        },
        "to_type": {
          "$ref": "#/definitions/codersdk.LoginType"
        },
        "user_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.OIDCAuthMethod": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "iconUrl": {
          "type": "string"
        },
        "signInText": {
          "type": "string"
        }
      }
    },
    "codersdk.OIDCConfig": {
      "type": "object",
      "properties": {
        "allow_signups": {
          "type": "boolean"
        },
        "auth_url_params": {
          "type": "object"
        },
        "client_cert_file": {
          "type": "string"
        },
        "client_id": {
          "type": "string"
        },
        "client_key_file": {
          "description": "ClientKeyFile \u0026 ClientCertFile are used in place of ClientSecret for PKI auth.",
          "type": "string"
        },
        "client_secret": {
          "type": "string"
        },
        "email_domain": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "email_field": {
          "type": "string"
        },
        "group_auto_create": {
          "type": "boolean"
        },
        "group_mapping": {
          "type": "object"
        },
        "group_regex_filter": {
          "$ref": "#/definitions/clibase.Regexp"
        },
        "groups_field": {
          "type": "string"
        },
        "icon_url": {
          "$ref": "#/definitions/clibase.URL"
        },
        "ignore_email_verified": {
          "type": "boolean"
        },
        "ignore_user_info": {
          "type": "boolean"
        },
        "issuer_url": {
          "type": "string"
        },
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sign_in_text": {
          "type": "string"
        },
        "user_role_field": {
          "type": "string"
        },
        "user_role_mapping": {
          "type": "object"
        },
        "user_roles_default": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "username_field": {
          "type": "string"
        }
      }
    },
    "codersdk.Organization": {
      "type": "object",
      "required": ["created_at", "id", "name", "updated_at"],
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "type": "string"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "codersdk.OrganizationMember": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "roles": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Role"
          }
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "user_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.PatchGroupRequest": {
      "type": "object",
      "properties": {
        "add_users": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "avatar_url": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "quota_allowance": {
          "type": "integer"
        },
        "remove_users": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.PatchTemplateVersionRequest": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "codersdk.PatchWorkspaceProxy": {
      "type": "object",
      "required": ["display_name", "icon", "id", "name"],
      "properties": {
        "display_name": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "type": "string"
        },
        "regenerate_token": {
          "type": "boolean"
        }
      }
    },
    "codersdk.PprofConfig": {
      "type": "object",
      "properties": {
        "address": {
          "$ref": "#/definitions/clibase.HostPort"
        },
        "enable": {
          "type": "boolean"
        }
      }
    },
    "codersdk.PrometheusConfig": {
      "type": "object",
      "properties": {
        "address": {
          "$ref": "#/definitions/clibase.HostPort"
        },
        "collect_agent_stats": {
          "type": "boolean"
        },
        "collect_db_metrics": {
          "type": "boolean"
        },
        "enable": {
          "type": "boolean"
        }
      }
    },
    "codersdk.ProvisionerConfig": {
      "type": "object",
      "properties": {
        "daemon_poll_interval": {
          "type": "integer"
        },
        "daemon_poll_jitter": {
          "type": "integer"
        },
        "daemon_psk": {
          "type": "string"
        },
        "daemons": {
          "type": "integer"
        },
        "daemons_echo": {
          "type": "boolean"
        },
        "force_cancel_interval": {
          "type": "integer"
        }
      }
    },
    "codersdk.ProvisionerDaemon": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "type": "string"
        },
        "provisioners": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "updated_at": {
          "format": "date-time",
          "allOf": [
            {
              "$ref": "#/definitions/sql.NullTime"
            }
          ]
        }
      }
    },
    "codersdk.ProvisionerJob": {
      "type": "object",
      "properties": {
        "canceled_at": {
          "type": "string",
          "format": "date-time"
        },
        "completed_at": {
          "type": "string",
          "format": "date-time"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "error": {
          "type": "string"
        },
        "error_code": {
          "enum": ["REQUIRED_TEMPLATE_VARIABLES"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.JobErrorCode"
            }
          ]
        },
        "file_id": {
          "type": "string",
          "format": "uuid"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "queue_position": {
          "type": "integer"
        },
        "queue_size": {
          "type": "integer"
        },
        "started_at": {
          "type": "string",
          "format": "date-time"
        },
        "status": {
          "enum": [
            "pending",
            "running",
            "succeeded",
            "canceling",
            "canceled",
            "failed"
          ],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.ProvisionerJobStatus"
            }
          ]
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "worker_id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.ProvisionerJobLog": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "id": {
          "type": "integer"
        },
        "log_level": {
          "enum": ["trace", "debug", "info", "warn", "error"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.LogLevel"
            }
          ]
        },
        "log_source": {
          "$ref": "#/definitions/codersdk.LogSource"
        },
        "output": {
          "type": "string"
        },
        "stage": {
          "type": "string"
        }
      }
    },
    "codersdk.ProvisionerJobStatus": {
      "type": "string",
      "enum": [
        "pending",
        "running",
        "succeeded",
        "canceling",
        "canceled",
        "failed"
      ],
      "x-enum-varnames": [
        "ProvisionerJobPending",
        "ProvisionerJobRunning",
        "ProvisionerJobSucceeded",
        "ProvisionerJobCanceling",
        "ProvisionerJobCanceled",
        "ProvisionerJobFailed"
      ]
    },
    "codersdk.ProvisionerLogLevel": {
      "type": "string",
      "enum": ["debug"],
      "x-enum-varnames": ["ProvisionerLogLevelDebug"]
    },
    "codersdk.ProvisionerStorageMethod": {
      "type": "string",
      "enum": ["file"],
      "x-enum-varnames": ["ProvisionerStorageMethodFile"]
    },
    "codersdk.ProxyHealthReport": {
      "type": "object",
      "properties": {
        "errors": {
          "description": "Errors are problems that prevent the workspace proxy from being healthy",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "warnings": {
          "description": "Warnings do not prevent the workspace proxy from being healthy, but\nshould be addressed.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.ProxyHealthStatus": {
      "type": "string",
      "enum": ["ok", "unreachable", "unhealthy", "unregistered"],
      "x-enum-varnames": [
        "ProxyHealthy",
        "ProxyUnreachable",
        "ProxyUnhealthy",
        "ProxyUnregistered"
      ]
    },
    "codersdk.PutExtendWorkspaceRequest": {
      "type": "object",
      "required": ["deadline"],
      "properties": {
        "deadline": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "codersdk.RBACResource": {
      "type": "string",
      "enum": [
        "workspace",
        "workspace_proxy",
        "workspace_execution",
        "application_connect",
        "audit_log",
        "template",
        "group",
        "file",
        "provisioner_daemon",
        "organization",
        "assign_role",
        "assign_org_role",
        "api_key",
        "user",
        "user_data",
        "organization_member",
        "license",
        "deployment_config",
        "deployment_stats",
        "replicas",
        "debug_info",
        "system"
      ],
      "x-enum-varnames": [
        "ResourceWorkspace",
        "ResourceWorkspaceProxy",
        "ResourceWorkspaceExecution",
        "ResourceWorkspaceApplicationConnect",
        "ResourceAuditLog",
        "ResourceTemplate",
        "ResourceGroup",
        "ResourceFile",
        "ResourceProvisionerDaemon",
        "ResourceOrganization",
        "ResourceRoleAssignment",
        "ResourceOrgRoleAssignment",
        "ResourceAPIKey",
        "ResourceUser",
        "ResourceUserData",
        "ResourceOrganizationMember",
        "ResourceLicense",
        "ResourceDeploymentValues",
        "ResourceDeploymentStats",
        "ResourceReplicas",
        "ResourceDebugInfo",
        "ResourceSystem"
      ]
    },
    "codersdk.RateLimitConfig": {
      "type": "object",
      "properties": {
        "api": {
          "type": "integer"
        },
        "disable_all": {
          "type": "boolean"
        }
      }
    },
    "codersdk.Region": {
      "type": "object",
      "properties": {
        "display_name": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "icon_url": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "type": "string"
        },
        "path_app_url": {
          "description": "PathAppURL is the URL to the base path for path apps. Optional\nunless wildcard_hostname is set.\nE.g. https://us.example.com",
          "type": "string"
        },
        "wildcard_hostname": {
          "description": "WildcardHostname is the wildcard hostname for subdomain apps.\nE.g. *.us.example.com\nE.g. *--suffix.au.example.com\nOptional. Does not need to be on the same domain as PathAppURL.",
          "type": "string"
        }
      }
    },
    "codersdk.RegionsResponse-codersdk_Region": {
      "type": "object",
      "properties": {
        "regions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Region"
          }
        }
      }
    },
    "codersdk.RegionsResponse-codersdk_WorkspaceProxy": {
      "type": "object",
      "properties": {
        "regions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceProxy"
          }
        }
      }
    },
    "codersdk.Replica": {
      "type": "object",
      "properties": {
        "created_at": {
          "description": "CreatedAt is the timestamp when the replica was first seen.",
          "type": "string",
          "format": "date-time"
        },
        "database_latency": {
          "description": "DatabaseLatency is the latency in microseconds to the database.",
          "type": "integer"
        },
        "error": {
          "description": "Error is the replica error.",
          "type": "string"
        },
        "hostname": {
          "description": "Hostname is the hostname of the replica.",
          "type": "string"
        },
        "id": {
          "description": "ID is the unique identifier for the replica.",
          "type": "string",
          "format": "uuid"
        },
        "region_id": {
          "description": "RegionID is the region of the replica.",
          "type": "integer"
        },
        "relay_address": {
          "description": "RelayAddress is the accessible address to relay DERP connections.",
          "type": "string"
        }
      }
    },
    "codersdk.ResourceType": {
      "type": "string",
      "enum": [
        "template",
        "template_version",
        "user",
        "workspace",
        "workspace_build",
        "git_ssh_key",
        "api_key",
        "group",
        "license",
        "convert_login",
        "workspace_proxy",
        "organization"
      ],
      "x-enum-varnames": [
        "ResourceTypeTemplate",
        "ResourceTypeTemplateVersion",
        "ResourceTypeUser",
        "ResourceTypeWorkspace",
        "ResourceTypeWorkspaceBuild",
        "ResourceTypeGitSSHKey",
        "ResourceTypeAPIKey",
        "ResourceTypeGroup",
        "ResourceTypeLicense",
        "ResourceTypeConvertLogin",
        "ResourceTypeWorkspaceProxy",
        "ResourceTypeOrganization"
      ]
    },
    "codersdk.Response": {
      "type": "object",
      "properties": {
        "detail": {
          "description": "Detail is a debug message that provides further insight into why the\naction failed. This information can be technical and a regular golang\nerr.Error() text.\n- \"database: too many open connections\"\n- \"stat: too many open files\"",
          "type": "string"
        },
        "message": {
          "description": "Message is an actionable message that depicts actions the request took.\nThese messages should be fully formed sentences with proper punctuation.\nExamples:\n- \"A user has been created.\"\n- \"Failed to create a user.\"",
          "type": "string"
        },
        "validations": {
          "description": "Validations are form field-specific friendly error messages. They will be\nshown on a form field in the UI. These can also be used to add additional\ncontext if there is a set of errors in the primary 'Message'.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.ValidationError"
          }
        }
      }
    },
    "codersdk.Role": {
      "type": "object",
      "properties": {
        "display_name": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "codersdk.SSHConfig": {
      "type": "object",
      "properties": {
        "deploymentName": {
          "description": "DeploymentName is the config-ssh Hostname prefix",
          "type": "string"
        },
        "sshconfigOptions": {
          "description": "SSHConfigOptions are additional options to add to the ssh config file.\nThis will override defaults.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.SSHConfigResponse": {
      "type": "object",
      "properties": {
        "hostname_prefix": {
          "type": "string"
        },
        "ssh_config_options": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.ServiceBannerConfig": {
      "type": "object",
      "properties": {
        "background_color": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "codersdk.SessionCountDeploymentStats": {
      "type": "object",
      "properties": {
        "jetbrains": {
          "type": "integer"
        },
        "reconnecting_pty": {
          "type": "integer"
        },
        "ssh": {
          "type": "integer"
        },
        "vscode": {
          "type": "integer"
        }
      }
    },
    "codersdk.SupportConfig": {
      "type": "object",
      "properties": {
        "links": {
          "$ref": "#/definitions/clibase.Struct-array_codersdk_LinkConfig"
        }
      }
    },
    "codersdk.SwaggerConfig": {
      "type": "object",
      "properties": {
        "enable": {
          "type": "boolean"
        }
      }
    },
    "codersdk.TLSConfig": {
      "type": "object",
      "properties": {
        "address": {
          "$ref": "#/definitions/clibase.HostPort"
        },
        "cert_file": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "client_auth": {
          "type": "string"
        },
        "client_ca_file": {
          "type": "string"
        },
        "client_cert_file": {
          "type": "string"
        },
        "client_key_file": {
          "type": "string"
        },
        "enable": {
          "type": "boolean"
        },
        "key_file": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "min_version": {
          "type": "string"
        },
        "redirect_http": {
          "type": "boolean"
        }
      }
    },
    "codersdk.TelemetryConfig": {
      "type": "object",
      "properties": {
        "enable": {
          "type": "boolean"
        },
        "trace": {
          "type": "boolean"
        },
        "url": {
          "$ref": "#/definitions/clibase.URL"
        }
      }
    },
    "codersdk.Template": {
      "type": "object",
      "properties": {
        "active_user_count": {
          "description": "ActiveUserCount is set to -1 when loading.",
          "type": "integer"
        },
        "active_version_id": {
          "type": "string",
          "format": "uuid"
        },
        "allow_user_autostart": {
          "description": "AllowUserAutostart and AllowUserAutostop are enterprise-only. Their\nvalues are only used if your license is entitled to use the advanced\ntemplate scheduling feature.",
          "type": "boolean"
        },
        "allow_user_autostop": {
          "type": "boolean"
        },
        "allow_user_cancel_workspace_jobs": {
          "type": "boolean"
        },
        "autostop_requirement": {
          "description": "AutostopRequirement is an enterprise feature. Its value is only used if\nyour license is entitled to use the advanced template scheduling feature.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.TemplateAutostopRequirement"
            }
          ]
        },
        "build_time_stats": {
          "$ref": "#/definitions/codersdk.TemplateBuildTimeStats"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "created_by_id": {
          "type": "string",
          "format": "uuid"
        },
        "created_by_name": {
          "type": "string"
        },
        "default_ttl_ms": {
          "type": "integer"
        },
        "description": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "failure_ttl_ms": {
          "description": "FailureTTLMillis, TimeTilDormantMillis, and TimeTilDormantAutoDeleteMillis are enterprise-only. Their\nvalues are used if your license is entitled to use the advanced\ntemplate scheduling feature.",
          "type": "integer"
        },
        "icon": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "max_ttl_ms": {
          "description": "TODO(@dean): remove max_ttl once autostop_requirement is matured",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "provisioner": {
          "type": "string",
          "enum": ["terraform"]
        },
        "time_til_dormant_autodelete_ms": {
          "type": "integer"
        },
        "time_til_dormant_ms": {
          "type": "integer"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "codersdk.TemplateAppUsage": {
      "type": "object",
      "properties": {
        "display_name": {
          "type": "string",
          "example": "Visual Studio Code"
        },
        "icon": {
          "type": "string"
        },
        "seconds": {
          "type": "integer",
          "example": 80500
        },
        "slug": {
          "type": "string",
          "example": "vscode"
        },
        "template_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "type": {
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.TemplateAppsType"
            }
          ],
          "example": "builtin"
        }
      }
    },
    "codersdk.TemplateAppsType": {
      "type": "string",
      "enum": ["builtin", "app"],
      "x-enum-varnames": ["TemplateAppsTypeBuiltin", "TemplateAppsTypeApp"]
    },
    "codersdk.TemplateAutostopRequirement": {
      "type": "object",
      "properties": {
        "days_of_week": {
          "description": "DaysOfWeek is a list of days of the week on which restarts are required.\nRestarts happen within the user's quiet hours (in their configured\ntimezone). If no days are specified, restarts are not required. Weekdays\ncannot be specified twice.\n\nRestarts will only happen on weekdays in this list on weeks which line up\nwith Weeks.",
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "monday",
              "tuesday",
              "wednesday",
              "thursday",
              "friday",
              "saturday",
              "sunday"
            ]
          }
        },
        "weeks": {
          "description": "Weeks is the number of weeks between required restarts. Weeks are synced\nacross all workspaces (and Coder deployments) using modulo math on a\nhardcoded epoch week of January 2nd, 2023 (the first Monday of 2023).\nValues of 0 or 1 indicate weekly restarts. Values of 2 indicate\nfortnightly restarts, etc.",
          "type": "integer"
        }
      }
    },
    "codersdk.TemplateBuildTimeStats": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/codersdk.TransitionStats"
      }
    },
    "codersdk.TemplateExample": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "markdown": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "url": {
          "type": "string"
        }
      }
    },
    "codersdk.TemplateInsightsIntervalReport": {
      "type": "object",
      "properties": {
        "active_users": {
          "type": "integer",
          "example": 14
        },
        "end_time": {
          "type": "string",
          "format": "date-time"
        },
        "interval": {
          "$ref": "#/definitions/codersdk.InsightsReportInterval"
        },
        "start_time": {
          "type": "string",
          "format": "date-time"
        },
        "template_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        }
      }
    },
    "codersdk.TemplateInsightsReport": {
      "type": "object",
      "properties": {
        "active_users": {
          "type": "integer",
          "example": 22
        },
        "apps_usage": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.TemplateAppUsage"
          }
        },
        "end_time": {
          "type": "string",
          "format": "date-time"
        },
        "parameters_usage": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.TemplateParameterUsage"
          }
        },
        "start_time": {
          "type": "string",
          "format": "date-time"
        },
        "template_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        }
      }
    },
    "codersdk.TemplateInsightsResponse": {
      "type": "object",
      "properties": {
        "interval_reports": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.TemplateInsightsIntervalReport"
          }
        },
        "report": {
          "$ref": "#/definitions/codersdk.TemplateInsightsReport"
        }
      }
    },
    "codersdk.TemplateParameterUsage": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "options": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.TemplateVersionParameterOption"
          }
        },
        "template_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "type": {
          "type": "string"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.TemplateParameterValue"
          }
        }
      }
    },
    "codersdk.TemplateParameterValue": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "codersdk.TemplateRole": {
      "type": "string",
      "enum": ["admin", "use", ""],
      "x-enum-varnames": [
        "TemplateRoleAdmin",
        "TemplateRoleUse",
        "TemplateRoleDeleted"
      ]
    },
    "codersdk.TemplateUser": {
      "type": "object",
      "required": ["created_at", "email", "id", "username"],
      "properties": {
        "avatar_url": {
          "type": "string",
          "format": "uri"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "last_seen_at": {
          "type": "string",
          "format": "date-time"
        },
        "login_type": {
          "$ref": "#/definitions/codersdk.LoginType"
        },
        "organization_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "role": {
          "enum": ["admin", "use"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.TemplateRole"
            }
          ]
        },
        "roles": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Role"
          }
        },
        "status": {
          "enum": ["active", "suspended"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.UserStatus"
            }
          ]
        },
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.TemplateVersion": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "created_by": {
          "$ref": "#/definitions/codersdk.MinimalUser"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "job": {
          "$ref": "#/definitions/codersdk.ProvisionerJob"
        },
        "message": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "readme": {
          "type": "string"
        },
        "template_id": {
          "type": "string",
          "format": "uuid"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "warnings": {
          "type": "array",
          "items": {
            "enum": ["DEPRECATED_PARAMETERS"],
            "$ref": "#/definitions/codersdk.TemplateVersionWarning"
          }
        }
      }
    },
    "codersdk.TemplateVersionGitAuth": {
      "type": "object",
      "properties": {
        "authenticate_url": {
          "type": "string"
        },
        "authenticated": {
          "type": "boolean"
        },
        "id": {
          "type": "string"
        },
        "type": {
          "$ref": "#/definitions/codersdk.GitProvider"
        }
      }
    },
    "codersdk.TemplateVersionParameter": {
      "type": "object",
      "properties": {
        "default_value": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "description_plaintext": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "ephemeral": {
          "type": "boolean"
        },
        "icon": {
          "type": "string"
        },
        "mutable": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        },
        "options": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.TemplateVersionParameterOption"
          }
        },
        "required": {
          "type": "boolean"
        },
        "type": {
          "type": "string",
          "enum": ["string", "number", "bool", "list(string)"]
        },
        "validation_error": {
          "type": "string"
        },
        "validation_max": {
          "type": "integer"
        },
        "validation_min": {
          "type": "integer"
        },
        "validation_monotonic": {
          "enum": ["increasing", "decreasing"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.ValidationMonotonicOrder"
            }
          ]
        },
        "validation_regex": {
          "type": "string"
        }
      }
    },
    "codersdk.TemplateVersionParameterOption": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "codersdk.TemplateVersionVariable": {
      "type": "object",
      "properties": {
        "default_value": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "required": {
          "type": "boolean"
        },
        "sensitive": {
          "type": "boolean"
        },
        "type": {
          "type": "string",
          "enum": ["string", "number", "bool"]
        },
        "value": {
          "type": "string"
        }
      }
    },
    "codersdk.TemplateVersionWarning": {
      "type": "string",
      "enum": ["UNSUPPORTED_WORKSPACES"],
      "x-enum-varnames": ["TemplateVersionWarningUnsupportedWorkspaces"]
    },
    "codersdk.TokenConfig": {
      "type": "object",
      "properties": {
        "max_token_lifetime": {
          "type": "integer"
        }
      }
    },
    "codersdk.TraceConfig": {
      "type": "object",
      "properties": {
        "capture_logs": {
          "type": "boolean"
        },
        "data_dog": {
          "type": "boolean"
        },
        "enable": {
          "type": "boolean"
        },
        "honeycomb_api_key": {
          "type": "string"
        }
      }
    },
    "codersdk.TransitionStats": {
      "type": "object",
      "properties": {
        "p50": {
          "type": "integer",
          "example": 123
        },
        "p95": {
          "type": "integer",
          "example": 146
        }
      }
    },
    "codersdk.UpdateActiveTemplateVersion": {
      "type": "object",
      "required": ["id"],
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.UpdateAppearanceConfig": {
      "type": "object",
      "properties": {
        "logo_url": {
          "type": "string"
        },
        "service_banner": {
          "$ref": "#/definitions/codersdk.ServiceBannerConfig"
        }
      }
    },
    "codersdk.UpdateCheckResponse": {
      "type": "object",
      "properties": {
        "current": {
          "description": "Current indicates whether the server version is the same as the latest.",
          "type": "boolean"
        },
        "url": {
          "description": "URL to download the latest release of Coder.",
          "type": "string"
        },
        "version": {
          "description": "Version is the semantic version for the latest release of Coder.",
          "type": "string"
        }
      }
    },
    "codersdk.UpdateRoles": {
      "type": "object",
      "properties": {
        "roles": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "codersdk.UpdateTemplateACL": {
      "type": "object",
      "properties": {
        "group_perms": {
          "description": "GroupPerms should be a mapping of group id to role.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/codersdk.TemplateRole"
          },
          "example": {
            "8bd26b20-f3e8-48be-a903-46bb920cf671": "use",
            "\u003cuser_id\u003e\u003e": "admin"
          }
        },
        "user_perms": {
          "description": "UserPerms should be a mapping of user id to role. The user id must be the\nuuid of the user, not a username or email address.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/codersdk.TemplateRole"
          },
          "example": {
            "4df59e74-c027-470b-ab4d-cbba8963a5e9": "use",
            "\u003cgroup_id\u003e": "admin"
          }
        }
      }
    },
    "codersdk.UpdateUserPasswordRequest": {
      "type": "object",
      "required": ["password"],
      "properties": {
        "old_password": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      }
    },
    "codersdk.UpdateUserProfileRequest": {
      "type": "object",
      "required": ["username"],
      "properties": {
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.UpdateUserQuietHoursScheduleRequest": {
      "type": "object",
      "required": ["schedule"],
      "properties": {
        "schedule": {
          "description": "Schedule is a cron expression that defines when the user's quiet hours\nwindow is. Schedule must not be empty. For new users, the schedule is set\nto 2am in their browser or computer's timezone. The schedule denotes the\nbeginning of a 4 hour window where the workspace is allowed to\nautomatically stop or restart due to maintenance or template max TTL.\n\nThe schedule must be daily with a single time, and should have a timezone\nspecified via a CRON_TZ prefix (otherwise UTC will be used).\n\nIf the schedule is empty, the user will be updated to use the default\nschedule.",
          "type": "string"
        }
      }
    },
    "codersdk.UpdateWorkspaceAutostartRequest": {
      "type": "object",
      "properties": {
        "schedule": {
          "type": "string"
        }
      }
    },
    "codersdk.UpdateWorkspaceDormancy": {
      "type": "object",
      "properties": {
        "dormant": {
          "type": "boolean"
        }
      }
    },
    "codersdk.UpdateWorkspaceRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        }
      }
    },
    "codersdk.UpdateWorkspaceTTLRequest": {
      "type": "object",
      "properties": {
        "ttl_ms": {
          "type": "integer"
        }
      }
    },
    "codersdk.UploadResponse": {
      "type": "object",
      "properties": {
        "hash": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "codersdk.User": {
      "type": "object",
      "required": ["created_at", "email", "id", "username"],
      "properties": {
        "avatar_url": {
          "type": "string",
          "format": "uri"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "last_seen_at": {
          "type": "string",
          "format": "date-time"
        },
        "login_type": {
          "$ref": "#/definitions/codersdk.LoginType"
        },
        "organization_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "roles": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Role"
          }
        },
        "status": {
          "enum": ["active", "suspended"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.UserStatus"
            }
          ]
        },
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.UserLatency": {
      "type": "object",
      "properties": {
        "avatar_url": {
          "type": "string",
          "format": "uri"
        },
        "latency_ms": {
          "$ref": "#/definitions/codersdk.ConnectionLatency"
        },
        "template_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "user_id": {
          "type": "string",
          "format": "uuid"
        },
        "username": {
          "type": "string"
        }
      }
    },
    "codersdk.UserLatencyInsightsReport": {
      "type": "object",
      "properties": {
        "end_time": {
          "type": "string",
          "format": "date-time"
        },
        "start_time": {
          "type": "string",
          "format": "date-time"
        },
        "template_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "users": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.UserLatency"
          }
        }
      }
    },
    "codersdk.UserLatencyInsightsResponse": {
      "type": "object",
      "properties": {
        "report": {
          "$ref": "#/definitions/codersdk.UserLatencyInsightsReport"
        }
      }
    },
    "codersdk.UserLoginType": {
      "type": "object",
      "properties": {
        "login_type": {
          "$ref": "#/definitions/codersdk.LoginType"
        }
      }
    },
    "codersdk.UserQuietHoursScheduleConfig": {
      "type": "object",
      "properties": {
        "default_schedule": {
          "type": "string"
        }
      }
    },
    "codersdk.UserQuietHoursScheduleResponse": {
      "type": "object",
      "properties": {
        "next": {
          "description": "Next is the next time that the quiet hours window will start.",
          "type": "string",
          "format": "date-time"
        },
        "raw_schedule": {
          "type": "string"
        },
        "time": {
          "description": "Time is the time of day that the quiet hours window starts in the given\nTimezone each day.",
          "type": "string"
        },
        "timezone": {
          "description": "raw format from the cron expression, UTC if unspecified",
          "type": "string"
        },
        "user_set": {
          "description": "UserSet is true if the user has set their own quiet hours schedule. If\nfalse, the user is using the default schedule.",
          "type": "boolean"
        }
      }
    },
    "codersdk.UserStatus": {
      "type": "string",
      "enum": ["active", "dormant", "suspended"],
      "x-enum-varnames": [
        "UserStatusActive",
        "UserStatusDormant",
        "UserStatusSuspended"
      ]
    },
    "codersdk.ValidationError": {
      "type": "object",
      "required": ["detail", "field"],
      "properties": {
        "detail": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    "codersdk.ValidationMonotonicOrder": {
      "type": "string",
      "enum": ["increasing", "decreasing"],
      "x-enum-varnames": [
        "MonotonicOrderIncreasing",
        "MonotonicOrderDecreasing"
      ]
    },
    "codersdk.VariableValue": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "codersdk.Workspace": {
      "type": "object",
      "properties": {
        "autostart_schedule": {
          "type": "string"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "deleting_at": {
          "description": "DeletingAt indicates the time at which the workspace will be permanently deleted.\nA workspace is eligible for deletion if it is dormant (a non-nil dormant_at value)\nand a value has been specified for time_til_dormant_autodelete on its template.",
          "type": "string",
          "format": "date-time"
        },
        "dormant_at": {
          "description": "DormantAt being non-nil indicates a workspace that is dormant.\nA dormant workspace is no longer accessible must be activated.\nIt is subject to deletion if it breaches\nthe duration of the time_til_ field on its template.",
          "type": "string",
          "format": "date-time"
        },
        "health": {
          "description": "Health shows the health of the workspace and information about\nwhat is causing an unhealthy status.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceHealth"
            }
          ]
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "last_used_at": {
          "type": "string",
          "format": "date-time"
        },
        "latest_build": {
          "$ref": "#/definitions/codersdk.WorkspaceBuild"
        },
        "name": {
          "type": "string"
        },
        "organization_id": {
          "type": "string",
          "format": "uuid"
        },
        "outdated": {
          "type": "boolean"
        },
        "owner_id": {
          "type": "string",
          "format": "uuid"
        },
        "owner_name": {
          "type": "string"
        },
        "template_active_version_id": {
          "type": "string",
          "format": "uuid"
        },
        "template_allow_user_cancel_workspace_jobs": {
          "type": "boolean"
        },
        "template_display_name": {
          "type": "string"
        },
        "template_icon": {
          "type": "string"
        },
        "template_id": {
          "type": "string",
          "format": "uuid"
        },
        "template_name": {
          "type": "string"
        },
        "ttl_ms": {
          "type": "integer"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "codersdk.WorkspaceAgent": {
      "type": "object",
      "properties": {
        "apps": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceApp"
          }
        },
        "architecture": {
          "type": "string"
        },
        "connection_timeout_seconds": {
          "type": "integer"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "directory": {
          "type": "string"
        },
        "disconnected_at": {
          "type": "string",
          "format": "date-time"
        },
        "display_apps": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.DisplayApp"
          }
        },
        "environment_variables": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "expanded_directory": {
          "type": "string"
        },
        "first_connected_at": {
          "type": "string",
          "format": "date-time"
        },
        "health": {
          "description": "Health reports the health of the agent.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceAgentHealth"
            }
          ]
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "instance_id": {
          "type": "string"
        },
        "last_connected_at": {
          "type": "string",
          "format": "date-time"
        },
        "latency": {
          "description": "DERPLatency is mapped by region name (e.g. \"New York City\", \"Seattle\").",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/codersdk.DERPRegion"
          }
        },
        "lifecycle_state": {
          "$ref": "#/definitions/codersdk.WorkspaceAgentLifecycle"
        },
        "login_before_ready": {
          "description": "Deprecated: Use StartupScriptBehavior instead.",
          "type": "boolean"
        },
        "logs_length": {
          "type": "integer"
        },
        "logs_overflowed": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        },
        "operating_system": {
          "type": "string"
        },
        "ready_at": {
          "type": "string",
          "format": "date-time"
        },
        "resource_id": {
          "type": "string",
          "format": "uuid"
        },
        "shutdown_script": {
          "type": "string"
        },
        "shutdown_script_timeout_seconds": {
          "type": "integer"
        },
        "started_at": {
          "type": "string",
          "format": "date-time"
        },
        "startup_script": {
          "type": "string"
        },
        "startup_script_behavior": {
          "$ref": "#/definitions/codersdk.WorkspaceAgentStartupScriptBehavior"
        },
        "startup_script_timeout_seconds": {
          "description": "StartupScriptTimeoutSeconds is the number of seconds to wait for the startup script to complete. If the script does not complete within this time, the agent lifecycle will be marked as start_timeout.",
          "type": "integer"
        },
        "status": {
          "$ref": "#/definitions/codersdk.WorkspaceAgentStatus"
        },
        "subsystems": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.AgentSubsystem"
          }
        },
        "troubleshooting_url": {
          "type": "string"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "version": {
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceAgentConnectionInfo": {
      "type": "object",
      "properties": {
        "derp_force_websockets": {
          "type": "boolean"
        },
        "derp_map": {
          "$ref": "#/definitions/tailcfg.DERPMap"
        },
        "disable_direct_connections": {
          "type": "boolean"
        }
      }
    },
    "codersdk.WorkspaceAgentHealth": {
      "type": "object",
      "properties": {
        "healthy": {
          "description": "Healthy is true if the agent is healthy.",
          "type": "boolean",
          "example": false
        },
        "reason": {
          "description": "Reason is a human-readable explanation of the agent's health. It is empty if Healthy is true.",
          "type": "string",
          "example": "agent has lost connection"
        }
      }
    },
    "codersdk.WorkspaceAgentLifecycle": {
      "type": "string",
      "enum": [
        "created",
        "starting",
        "start_timeout",
        "start_error",
        "ready",
        "shutting_down",
        "shutdown_timeout",
        "shutdown_error",
        "off"
      ],
      "x-enum-varnames": [
        "WorkspaceAgentLifecycleCreated",
        "WorkspaceAgentLifecycleStarting",
        "WorkspaceAgentLifecycleStartTimeout",
        "WorkspaceAgentLifecycleStartError",
        "WorkspaceAgentLifecycleReady",
        "WorkspaceAgentLifecycleShuttingDown",
        "WorkspaceAgentLifecycleShutdownTimeout",
        "WorkspaceAgentLifecycleShutdownError",
        "WorkspaceAgentLifecycleOff"
      ]
    },
    "codersdk.WorkspaceAgentListeningPort": {
      "type": "object",
      "properties": {
        "network": {
          "description": "only \"tcp\" at the moment",
          "type": "string"
        },
        "port": {
          "type": "integer"
        },
        "process_name": {
          "description": "may be empty",
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceAgentListeningPortsResponse": {
      "type": "object",
      "properties": {
        "ports": {
          "description": "If there are no ports in the list, nothing should be displayed in the UI.\nThere must not be a \"no ports available\" message or anything similar, as\nthere will always be no ports displayed on platforms where our port\ndetection logic is unsupported.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceAgentListeningPort"
          }
        }
      }
    },
    "codersdk.WorkspaceAgentLog": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "id": {
          "type": "integer"
        },
        "level": {
          "$ref": "#/definitions/codersdk.LogLevel"
        },
        "output": {
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceAgentLogSource": {
      "type": "string",
      "enum": [
        "startup_script",
        "shutdown_script",
        "kubernetes",
        "envbox",
        "envbuilder",
        "external"
      ],
      "x-enum-varnames": [
        "WorkspaceAgentLogSourceStartupScript",
        "WorkspaceAgentLogSourceShutdownScript",
        "WorkspaceAgentLogSourceKubernetes",
        "WorkspaceAgentLogSourceEnvbox",
        "WorkspaceAgentLogSourceEnvbuilder",
        "WorkspaceAgentLogSourceExternal"
      ]
    },
    "codersdk.WorkspaceAgentMetadataDescription": {
      "type": "object",
      "properties": {
        "display_name": {
          "type": "string"
        },
        "interval": {
          "type": "integer"
        },
        "key": {
          "type": "string"
        },
        "script": {
          "type": "string"
        },
        "timeout": {
          "type": "integer"
        }
      }
    },
    "codersdk.WorkspaceAgentStartupScriptBehavior": {
      "type": "string",
      "enum": ["blocking", "non-blocking"],
      "x-enum-varnames": [
        "WorkspaceAgentStartupScriptBehaviorBlocking",
        "WorkspaceAgentStartupScriptBehaviorNonBlocking"
      ]
    },
    "codersdk.WorkspaceAgentStatus": {
      "type": "string",
      "enum": ["connecting", "connected", "disconnected", "timeout"],
      "x-enum-varnames": [
        "WorkspaceAgentConnecting",
        "WorkspaceAgentConnected",
        "WorkspaceAgentDisconnected",
        "WorkspaceAgentTimeout"
      ]
    },
    "codersdk.WorkspaceApp": {
      "type": "object",
      "properties": {
        "command": {
          "type": "string"
        },
        "display_name": {
          "description": "DisplayName is a friendly name for the app.",
          "type": "string"
        },
        "external": {
          "description": "External specifies whether the URL should be opened externally on\nthe client or not.",
          "type": "boolean"
        },
        "health": {
          "$ref": "#/definitions/codersdk.WorkspaceAppHealth"
        },
        "healthcheck": {
          "description": "Healthcheck specifies the configuration for checking app health.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.Healthcheck"
            }
          ]
        },
        "icon": {
          "description": "Icon is a relative path or external URL that specifies\nan icon to be displayed in the dashboard.",
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "sharing_level": {
          "enum": ["owner", "authenticated", "public"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceAppSharingLevel"
            }
          ]
        },
        "slug": {
          "description": "Slug is a unique identifier within the agent.",
          "type": "string"
        },
        "subdomain": {
          "description": "Subdomain denotes whether the app should be accessed via a path on the\n`coder server` or via a hostname-based dev URL. If this is set to true\nand there is no app wildcard configured on the server, the app will not\nbe accessible in the UI.",
          "type": "boolean"
        },
        "url": {
          "description": "URL is the address being proxied to inside the workspace.\nIf external is specified, this will be opened on the client.",
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceAppHealth": {
      "type": "string",
      "enum": ["disabled", "initializing", "healthy", "unhealthy"],
      "x-enum-varnames": [
        "WorkspaceAppHealthDisabled",
        "WorkspaceAppHealthInitializing",
        "WorkspaceAppHealthHealthy",
        "WorkspaceAppHealthUnhealthy"
      ]
    },
    "codersdk.WorkspaceAppSharingLevel": {
      "type": "string",
      "enum": ["owner", "authenticated", "public"],
      "x-enum-varnames": [
        "WorkspaceAppSharingLevelOwner",
        "WorkspaceAppSharingLevelAuthenticated",
        "WorkspaceAppSharingLevelPublic"
      ]
    },
    "codersdk.WorkspaceBuild": {
      "type": "object",
      "properties": {
        "build_number": {
          "type": "integer"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "daily_cost": {
          "type": "integer"
        },
        "deadline": {
          "type": "string",
          "format": "date-time"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "initiator_id": {
          "type": "string",
          "format": "uuid"
        },
        "initiator_name": {
          "type": "string"
        },
        "job": {
          "$ref": "#/definitions/codersdk.ProvisionerJob"
        },
        "max_deadline": {
          "type": "string",
          "format": "date-time"
        },
        "reason": {
          "enum": ["initiator", "autostart", "autostop"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.BuildReason"
            }
          ]
        },
        "resources": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceResource"
          }
        },
        "status": {
          "enum": [
            "pending",
            "starting",
            "running",
            "stopping",
            "stopped",
            "failed",
            "canceling",
            "canceled",
            "deleting",
            "deleted"
          ],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceStatus"
            }
          ]
        },
        "template_version_id": {
          "type": "string",
          "format": "uuid"
        },
        "template_version_name": {
          "type": "string"
        },
        "transition": {
          "enum": ["start", "stop", "delete"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceTransition"
            }
          ]
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "workspace_id": {
          "type": "string",
          "format": "uuid"
        },
        "workspace_name": {
          "type": "string"
        },
        "workspace_owner_id": {
          "type": "string",
          "format": "uuid"
        },
        "workspace_owner_name": {
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceBuildParameter": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceConnectionLatencyMS": {
      "type": "object",
      "properties": {
        "p50": {
          "type": "number"
        },
        "p95": {
          "type": "number"
        }
      }
    },
    "codersdk.WorkspaceDeploymentStats": {
      "type": "object",
      "properties": {
        "building": {
          "type": "integer"
        },
        "connection_latency_ms": {
          "$ref": "#/definitions/codersdk.WorkspaceConnectionLatencyMS"
        },
        "failed": {
          "type": "integer"
        },
        "pending": {
          "type": "integer"
        },
        "running": {
          "type": "integer"
        },
        "rx_bytes": {
          "type": "integer"
        },
        "stopped": {
          "type": "integer"
        },
        "tx_bytes": {
          "type": "integer"
        }
      }
    },
    "codersdk.WorkspaceHealth": {
      "type": "object",
      "properties": {
        "failing_agents": {
          "description": "FailingAgents lists the IDs of the agents that are failing, if any.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "healthy": {
          "description": "Healthy is true if the workspace is healthy.",
          "type": "boolean",
          "example": false
        }
      }
    },
    "codersdk.WorkspaceProxy": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "deleted": {
          "type": "boolean"
        },
        "derp_enabled": {
          "type": "boolean"
        },
        "derp_only": {
          "type": "boolean"
        },
        "display_name": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "icon_url": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "type": "string"
        },
        "path_app_url": {
          "description": "PathAppURL is the URL to the base path for path apps. Optional\nunless wildcard_hostname is set.\nE.g. https://us.example.com",
          "type": "string"
        },
        "status": {
          "description": "Status is the latest status check of the proxy. This will be empty for deleted\nproxies. This value can be used to determine if a workspace proxy is healthy\nand ready to use.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceProxyStatus"
            }
          ]
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "wildcard_hostname": {
          "description": "WildcardHostname is the wildcard hostname for subdomain apps.\nE.g. *.us.example.com\nE.g. *--suffix.au.example.com\nOptional. Does not need to be on the same domain as PathAppURL.",
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceProxyStatus": {
      "type": "object",
      "properties": {
        "checked_at": {
          "type": "string",
          "format": "date-time"
        },
        "report": {
          "description": "Report provides more information about the health of the workspace proxy.",
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.ProxyHealthReport"
            }
          ]
        },
        "status": {
          "$ref": "#/definitions/codersdk.ProxyHealthStatus"
        }
      }
    },
    "codersdk.WorkspaceQuota": {
      "type": "object",
      "properties": {
        "budget": {
          "type": "integer"
        },
        "credits_consumed": {
          "type": "integer"
        }
      }
    },
    "codersdk.WorkspaceResource": {
      "type": "object",
      "properties": {
        "agents": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceAgent"
          }
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "daily_cost": {
          "type": "integer"
        },
        "hide": {
          "type": "boolean"
        },
        "icon": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "job_id": {
          "type": "string",
          "format": "uuid"
        },
        "metadata": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.WorkspaceResourceMetadata"
          }
        },
        "name": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "workspace_transition": {
          "enum": ["start", "stop", "delete"],
          "allOf": [
            {
              "$ref": "#/definitions/codersdk.WorkspaceTransition"
            }
          ]
        }
      }
    },
    "codersdk.WorkspaceResourceMetadata": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "sensitive": {
          "type": "boolean"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "codersdk.WorkspaceStatus": {
      "type": "string",
      "enum": [
        "pending",
        "starting",
        "running",
        "stopping",
        "stopped",
        "failed",
        "canceling",
        "canceled",
        "deleting",
        "deleted"
      ],
      "x-enum-varnames": [
        "WorkspaceStatusPending",
        "WorkspaceStatusStarting",
        "WorkspaceStatusRunning",
        "WorkspaceStatusStopping",
        "WorkspaceStatusStopped",
        "WorkspaceStatusFailed",
        "WorkspaceStatusCanceling",
        "WorkspaceStatusCanceled",
        "WorkspaceStatusDeleting",
        "WorkspaceStatusDeleted"
      ]
    },
    "codersdk.WorkspaceTransition": {
      "type": "string",
      "enum": ["start", "stop", "delete"],
      "x-enum-varnames": [
        "WorkspaceTransitionStart",
        "WorkspaceTransitionStop",
        "WorkspaceTransitionDelete"
      ]
    },
    "codersdk.WorkspacesResponse": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer"
        },
        "workspaces": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Workspace"
          }
        }
      }
    },
    "derp.ServerInfoMessage": {
      "type": "object",
      "properties": {
        "tokenBucketBytesBurst": {
          "description": "TokenBucketBytesBurst is how many bytes the server will\nallow to burst, temporarily violating\nTokenBucketBytesPerSecond.\n\nZero means unspecified. There might be a limit, but the\nclient need not try to respect it.",
          "type": "integer"
        },
        "tokenBucketBytesPerSecond": {
          "description": "TokenBucketBytesPerSecond is how many bytes per second the\nserver says it will accept, including all framing bytes.\n\nZero means unspecified. There might be a limit, but the\nclient need not try to respect it.",
          "type": "integer"
        }
      }
    },
    "derphealth.NodeReport": {
      "type": "object",
      "properties": {
        "can_exchange_messages": {
          "type": "boolean"
        },
        "client_errs": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "client_logs": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "error": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "node": {
          "$ref": "#/definitions/tailcfg.DERPNode"
        },
        "node_info": {
          "$ref": "#/definitions/derp.ServerInfoMessage"
        },
        "round_trip_ping": {
          "type": "string"
        },
        "round_trip_ping_ms": {
          "type": "integer"
        },
        "stun": {
          "$ref": "#/definitions/derphealth.StunReport"
        },
        "uses_websocket": {
          "type": "boolean"
        }
      }
    },
    "derphealth.RegionReport": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "node_reports": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/derphealth.NodeReport"
          }
        },
        "region": {
          "$ref": "#/definitions/tailcfg.DERPRegion"
        }
      }
    },
    "derphealth.Report": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "netcheck": {
          "$ref": "#/definitions/netcheck.Report"
        },
        "netcheck_err": {
          "type": "string"
        },
        "netcheck_logs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "regions": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/derphealth.RegionReport"
          }
        }
      }
    },
    "derphealth.StunReport": {
      "type": "object",
      "properties": {
        "canSTUN": {
          "type": "boolean"
        },
        "enabled": {
          "type": "boolean"
        },
        "error": {
          "type": "string"
        }
      }
    },
    "healthcheck.AccessURLReport": {
      "type": "object",
      "properties": {
        "access_url": {
          "type": "string"
        },
        "error": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "healthz_response": {
          "type": "string"
        },
        "reachable": {
          "type": "boolean"
        },
        "status_code": {
          "type": "integer"
        }
      }
    },
    "healthcheck.DatabaseReport": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        },
        "latency": {
          "type": "string"
        },
        "latency_ms": {
          "type": "integer"
        },
        "reachable": {
          "type": "boolean"
        }
      }
    },
    "healthcheck.Report": {
      "type": "object",
      "properties": {
        "access_url": {
          "$ref": "#/definitions/healthcheck.AccessURLReport"
        },
        "coder_version": {
          "description": "The Coder version of the server that the report was generated on.",
          "type": "string"
        },
        "database": {
          "$ref": "#/definitions/healthcheck.DatabaseReport"
        },
        "derp": {
          "$ref": "#/definitions/derphealth.Report"
        },
        "failing_sections": {
          "description": "FailingSections is a list of sections that have failed their healthcheck.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "healthy": {
          "description": "Healthy is true if the report returns no errors.",
          "type": "boolean"
        },
        "time": {
          "description": "Time is the time the report was generated at.",
          "type": "string"
        },
        "websocket": {
          "$ref": "#/definitions/healthcheck.WebsocketReport"
        }
      }
    },
    "healthcheck.WebsocketReport": {
      "type": "object",
      "properties": {
        "body": {
          "type": "string"
        },
        "code": {
          "type": "integer"
        },
        "error": {
          "type": "string"
        },
        "healthy": {
          "type": "boolean"
        }
      }
    },
    "netcheck.Report": {
      "type": "object",
      "properties": {
        "captivePortal": {
          "description": "CaptivePortal is set when we think there's a captive portal that is\nintercepting HTTP traffic.",
          "type": "string"
        },
        "globalV4": {
          "description": "ip:port of global IPv4",
          "type": "string"
        },
        "globalV6": {
          "description": "[ip]:port of global IPv6",
          "type": "string"
        },
        "hairPinning": {
          "description": "HairPinning is whether the router supports communicating\nbetween two local devices through the NATted public IP address\n(on IPv4).",
          "type": "string"
        },
        "icmpv4": {
          "description": "an ICMPv4 round trip completed",
          "type": "boolean"
        },
        "ipv4": {
          "description": "an IPv4 STUN round trip completed",
          "type": "boolean"
        },
        "ipv4CanSend": {
          "description": "an IPv4 packet was able to be sent",
          "type": "boolean"
        },
        "ipv6": {
          "description": "an IPv6 STUN round trip completed",
          "type": "boolean"
        },
        "ipv6CanSend": {
          "description": "an IPv6 packet was able to be sent",
          "type": "boolean"
        },
        "mappingVariesByDestIP": {
          "description": "MappingVariesByDestIP is whether STUN results depend which\nSTUN server you're talking to (on IPv4).",
          "type": "string"
        },
        "oshasIPv6": {
          "description": "could bind a socket to ::1",
          "type": "boolean"
        },
        "pcp": {
          "description": "PCP is whether PCP appears present on the LAN.\nEmpty means not checked.",
          "type": "string"
        },
        "pmp": {
          "description": "PMP is whether NAT-PMP appears present on the LAN.\nEmpty means not checked.",
          "type": "string"
        },
        "preferredDERP": {
          "description": "or 0 for unknown",
          "type": "integer"
        },
        "regionLatency": {
          "description": "keyed by DERP Region ID",
          "type": "object",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "regionV4Latency": {
          "description": "keyed by DERP Region ID",
          "type": "object",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "regionV6Latency": {
          "description": "keyed by DERP Region ID",
          "type": "object",
          "additionalProperties": {
            "type": "integer"
          }
        },
        "udp": {
          "description": "a UDP STUN round trip completed",
          "type": "boolean"
        },
        "upnP": {
          "description": "UPnP is whether UPnP appears present on the LAN.\nEmpty means not checked.",
          "type": "string"
        }
      }
    },
    "sql.NullTime": {
      "type": "object",
      "properties": {
        "time": {
          "type": "string"
        },
        "valid": {
          "description": "Valid is true if Time is not NULL",
          "type": "boolean"
        }
      }
    },
    "tailcfg.DERPHomeParams": {
      "type": "object",
      "properties": {
        "regionScore": {
          "description": "RegionScore scales latencies of DERP regions by a given scaling\nfactor when determining which region to use as the home\n(\"preferred\") DERP. Scores in the range (0, 1) will cause this\nregion to be proportionally more preferred, and scores in the range\n(1, ∞) will penalize a region.\n\nIf a region is not present in this map, it is treated as having a\nscore of 1.0.\n\nScores should not be 0 or negative; such scores will be ignored.\n\nA nil map means no change from the previous value (if any); an empty\nnon-nil map can be sent to reset all scores back to 1.0.",
          "type": "object",
          "additionalProperties": {
            "type": "number"
          }
        }
      }
    },
    "tailcfg.DERPMap": {
      "type": "object",
      "properties": {
        "homeParams": {
          "description": "HomeParams, if non-nil, is a change in home parameters.\n\nThe rest of the DEPRMap fields, if zero, means unchanged.",
          "allOf": [
            {
              "$ref": "#/definitions/tailcfg.DERPHomeParams"
            }
          ]
        },
        "omitDefaultRegions": {
          "description": "OmitDefaultRegions specifies to not use Tailscale's DERP servers, and only use those\nspecified in this DERPMap. If there are none set outside of the defaults, this is a noop.\n\nThis field is only meaningful if the Regions map is non-nil (indicating a change).",
          "type": "boolean"
        },
        "regions": {
          "description": "Regions is the set of geographic regions running DERP node(s).\n\nIt's keyed by the DERPRegion.RegionID.\n\nThe numbers are not necessarily contiguous.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/tailcfg.DERPRegion"
          }
        }
      }
    },
    "tailcfg.DERPNode": {
      "type": "object",
      "properties": {
        "canPort80": {
          "description": "CanPort80 specifies whether this DERP node is accessible over HTTP\non port 80 specifically. This is used for captive portal checks.",
          "type": "boolean"
        },
        "certName": {
          "description": "CertName optionally specifies the expected TLS cert common\nname. If empty, HostName is used. If CertName is non-empty,\nHostName is only used for the TCP dial (if IPv4/IPv6 are\nnot present) + TLS ClientHello.",
          "type": "string"
        },
        "derpport": {
          "description": "DERPPort optionally provides an alternate TLS port number\nfor the DERP HTTPS server.\n\nIf zero, 443 is used.",
          "type": "integer"
        },
        "forceHTTP": {
          "description": "ForceHTTP is used by unit tests to force HTTP.\nIt should not be set by users.",
          "type": "boolean"
        },
        "hostName": {
          "description": "HostName is the DERP node's hostname.\n\nIt is required but need not be unique; multiple nodes may\nhave the same HostName but vary in configuration otherwise.",
          "type": "string"
        },
        "insecureForTests": {
          "description": "InsecureForTests is used by unit tests to disable TLS verification.\nIt should not be set by users.",
          "type": "boolean"
        },
        "ipv4": {
          "description": "IPv4 optionally forces an IPv4 address to use, instead of using DNS.\nIf empty, A record(s) from DNS lookups of HostName are used.\nIf the string is not an IPv4 address, IPv4 is not used; the\nconventional string to disable IPv4 (and not use DNS) is\n\"none\".",
          "type": "string"
        },
        "ipv6": {
          "description": "IPv6 optionally forces an IPv6 address to use, instead of using DNS.\nIf empty, AAAA record(s) from DNS lookups of HostName are used.\nIf the string is not an IPv6 address, IPv6 is not used; the\nconventional string to disable IPv6 (and not use DNS) is\n\"none\".",
          "type": "string"
        },
        "name": {
          "description": "Name is a unique node name (across all regions).\nIt is not a host name.\nIt's typically of the form \"1b\", \"2a\", \"3b\", etc. (region\nID + suffix within that region)",
          "type": "string"
        },
        "regionID": {
          "description": "RegionID is the RegionID of the DERPRegion that this node\nis running in.",
          "type": "integer"
        },
        "stunonly": {
          "description": "STUNOnly marks a node as only a STUN server and not a DERP\nserver.",
          "type": "boolean"
        },
        "stunport": {
          "description": "Port optionally specifies a STUN port to use.\nZero means 3478.\nTo disable STUN on this node, use -1.",
          "type": "integer"
        },
        "stuntestIP": {
          "description": "STUNTestIP is used in tests to override the STUN server's IP.\nIf empty, it's assumed to be the same as the DERP server.",
          "type": "string"
        }
      }
    },
    "tailcfg.DERPRegion": {
      "type": "object",
      "properties": {
        "avoid": {
          "description": "Avoid is whether the client should avoid picking this as its home\nregion. The region should only be used if a peer is there.\nClients already using this region as their home should migrate\naway to a new region without Avoid set.",
          "type": "boolean"
        },
        "embeddedRelay": {
          "description": "EmbeddedRelay is true when the region is bundled with the Coder\ncontrol plane.",
          "type": "boolean"
        },
        "nodes": {
          "description": "Nodes are the DERP nodes running in this region, in\npriority order for the current client. Client TLS\nconnections should ideally only go to the first entry\n(falling back to the second if necessary). STUN packets\nshould go to the first 1 or 2.\n\nIf nodes within a region route packets amongst themselves,\nbut not to other regions. That said, each user/domain\nshould get a the same preferred node order, so if all nodes\nfor a user/network pick the first one (as they should, when\nthings are healthy), the inter-cluster routing is minimal\nto zero.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/tailcfg.DERPNode"
          }
        },
        "regionCode": {
          "description": "RegionCode is a short name for the region. It's usually a popular\ncity or airport code in the region: \"nyc\", \"sf\", \"sin\",\n\"fra\", etc.",
          "type": "string"
        },
        "regionID": {
          "description": "RegionID is a unique integer for a geographic region.\n\nIt corresponds to the legacy derpN.tailscale.com hostnames\nused by older clients. (Older clients will continue to resolve\nderpN.tailscale.com when contacting peers, rather than use\nthe server-provided DERPMap)\n\nRegionIDs must be non-zero, positive, and guaranteed to fit\nin a JavaScript number.\n\nRegionIDs in range 900-999 are reserved for end users to run their\nown DERP nodes.",
          "type": "integer"
        },
        "regionName": {
          "description": "RegionName is a long English name for the region: \"New York City\",\n\"San Francisco\", \"Singapore\", \"Frankfurt\", etc.",
          "type": "string"
        }
      }
    },
    "url.Userinfo": {
      "type": "object"
    },
    "workspaceapps.AccessMethod": {
      "type": "string",
      "enum": ["path", "subdomain", "terminal"],
      "x-enum-varnames": [
        "AccessMethodPath",
        "AccessMethodSubdomain",
        "AccessMethodTerminal"
      ]
    },
    "workspaceapps.IssueTokenRequest": {
      "type": "object",
      "properties": {
        "app_hostname": {
          "description": "AppHostname is the optional hostname for subdomain apps on the external\nproxy. It must start with an asterisk.",
          "type": "string"
        },
        "app_path": {
          "description": "AppPath is the path of the user underneath the app base path.",
          "type": "string"
        },
        "app_query": {
          "description": "AppQuery is the query parameters the user provided in the app request.",
          "type": "string"
        },
        "app_request": {
          "$ref": "#/definitions/workspaceapps.Request"
        },
        "path_app_base_url": {
          "description": "PathAppBaseURL is required.",
          "type": "string"
        },
        "session_token": {
          "description": "SessionToken is the session token provided by the user.",
          "type": "string"
        }
      }
    },
    "workspaceapps.Request": {
      "type": "object",
      "properties": {
        "access_method": {
          "$ref": "#/definitions/workspaceapps.AccessMethod"
        },
        "agent_name_or_id": {
          "description": "AgentNameOrID is not required if the workspace has only one agent.",
          "type": "string"
        },
        "app_slug_or_port": {
          "type": "string"
        },
        "base_path": {
          "description": "BasePath of the app. For path apps, this is the path prefix in the router\nfor this particular app. For subdomain apps, this should be \"/\". This is\nused for setting the cookie path.",
          "type": "string"
        },
        "username_or_id": {
          "description": "For the following fields, if the AccessMethod is AccessMethodTerminal,\nthen only AgentNameOrID may be set and it must be a UUID. The other\nfields must be left blank.",
          "type": "string"
        },
        "workspace_name_or_id": {
          "type": "string"
        }
      }
    },
    "workspaceapps.StatsReport": {
      "type": "object",
      "properties": {
        "access_method": {
          "$ref": "#/definitions/workspaceapps.AccessMethod"
        },
        "agent_id": {
          "type": "string"
        },
        "requests": {
          "type": "integer"
        },
        "session_ended_at": {
          "description": "Updated periodically while app is in use active and when the last connection is closed.",
          "type": "string"
        },
        "session_id": {
          "type": "string"
        },
        "session_started_at": {
          "type": "string"
        },
        "slug_or_port": {
          "type": "string"
        },
        "user_id": {
          "type": "string"
        },
        "workspace_id": {
          "type": "string"
        }
      }
    },
    "wsproxysdk.AgentIsLegacyResponse": {
      "type": "object",
      "properties": {
        "found": {
          "type": "boolean"
        },
        "legacy": {
          "type": "boolean"
        }
      }
    },
    "wsproxysdk.DeregisterWorkspaceProxyRequest": {
      "type": "object",
      "properties": {
        "replica_id": {
          "description": "ReplicaID is a unique identifier for the replica of the proxy that is\nderegistering. It should be generated by the client on startup and\nshould've already been passed to the register endpoint.",
          "type": "string"
        }
      }
    },
    "wsproxysdk.IssueSignedAppTokenResponse": {
      "type": "object",
      "properties": {
        "signed_token_str": {
          "description": "SignedTokenStr should be set as a cookie on the response.",
          "type": "string"
        }
      }
    },
    "wsproxysdk.RegisterWorkspaceProxyRequest": {
      "type": "object",
      "properties": {
        "access_url": {
          "description": "AccessURL that hits the workspace proxy api.",
          "type": "string"
        },
        "derp_enabled": {
          "description": "DerpEnabled indicates whether the proxy should be included in the DERP\nmap or not.",
          "type": "boolean"
        },
        "derp_only": {
          "description": "DerpOnly indicates whether the proxy should only be included in the DERP\nmap and should not be used for serving apps.",
          "type": "boolean"
        },
        "hostname": {
          "description": "ReplicaHostname is the OS hostname of the machine that the proxy is running\non.  This is only used for tracking purposes in the replicas table.",
          "type": "string"
        },
        "replica_error": {
          "description": "ReplicaError is the error that the replica encountered when trying to\ndial it's peers. This is stored in the replicas table for debugging\npurposes but does not affect the proxy's ability to register.\n\nThis value is only stored on subsequent requests to the register\nendpoint, not the first request.",
          "type": "string"
        },
        "replica_id": {
          "description": "ReplicaID is a unique identifier for the replica of the proxy that is\nregistering. It should be generated by the client on startup and\npersisted (in memory only) until the process is restarted.",
          "type": "string"
        },
        "replica_relay_address": {
          "description": "ReplicaRelayAddress is the DERP address of the replica that other\nreplicas may use to connect internally for DERP meshing.",
          "type": "string"
        },
        "version": {
          "description": "Version is the Coder version of the proxy.",
          "type": "string"
        },
        "wildcard_hostname": {
          "description": "WildcardHostname that the workspace proxy api is serving for subdomain apps.",
          "type": "string"
        }
      }
    },
    "wsproxysdk.RegisterWorkspaceProxyResponse": {
      "type": "object",
      "properties": {
        "app_security_key": {
          "type": "string"
        },
        "derp_force_websockets": {
          "type": "boolean"
        },
        "derp_map": {
          "$ref": "#/definitions/tailcfg.DERPMap"
        },
        "derp_mesh_key": {
          "type": "string"
        },
        "derp_region_id": {
          "type": "integer"
        },
        "sibling_replicas": {
          "description": "SiblingReplicas is a list of all other replicas of the proxy that have\nnot timed out.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/codersdk.Replica"
          }
        }
      }
    },
    "wsproxysdk.ReportAppStatsRequest": {
      "type": "object",
      "properties": {
        "stats": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/workspaceapps.StatsReport"
          }
        }
      }
    }
  },
  "securityDefinitions": {
    "CoderSessionToken": {
      "type": "apiKey",
      "name": "Coder-Session-Token",
      "in": "header"
    }
  }
}
