{
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "schemes": [
    "https"
  ],
  "swagger": "2.0",
  "info": {
    "description": "Manage enterprise portal users, install options, branding, documentation, email templates, and access control.",
    "title": "Vendor API V3",
    "contact": {
      "name": "Replicated, Inc.",
      "url": "http://www.replicated.com/",
      "email": "info@replicated.com"
    },
    "version": "3.0.0"
  },
  "host": "api.replicated.com",
  "basePath": "/vendor/v3",
  "paths": {
    "/app": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Create a new app for the team with the provided name.\nThe app will be available for further configuration and channel management.\n\nRequired RBAC Policy: kots/app/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Create an app.",
        "operationId": "createApp",
        "parameters": [
          {
            "description": "App create parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "description": "Name of the app that is to be created.",
                  "type": "string",
                  "x-go-name": "Name"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/getAppResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/app/{app_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the details of a specific app, including its metadata and a list of associated channels.\n\nRequired RBAC Policy: kots/app/[:appid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Get an app.",
        "operationId": "getAppProperties",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getAppResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Delete the specified app from the team.\nThe app and all its associated resources will be removed.\n\nRequired RBAC Policy: kots/app/[:appid]/delete",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Delete an app.",
        "operationId": "deleteApp",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/responseOk"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/app/{app_id}/builtin-license-field/{field_name}": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/builtin-licensefields/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Set a builtin license field value override for a given app and named field.",
        "operationId": "setBuiltinLicenseFieldOverride",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "FieldName",
            "description": "Field name",
            "name": "field_name",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "value"
              ],
              "properties": {
                "is_locked": {
                  "description": "Whether the field should be locked. Optional.",
                  "type": "boolean",
                  "x-go-name": "IsLocked"
                },
                "value": {
                  "description": "Value of the builtin license field that is to be overridden. Allows empty string.",
                  "type": "string",
                  "x-go-name": "Value"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/setBuiltinLicenseFieldOverrideResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/builtin-licensefields/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Delete a builtin license field override for a given app and named field.",
        "operationId": "deleteBuiltinLicenseFieldOverride",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "FieldName",
            "description": "Field name",
            "name": "field_name",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/builtin-license-fields": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/license/create",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "List builtin license fields for a given appId, with overrides applied.",
        "operationId": "listBuiltinLicenseFields",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listBuiltinLicenseFieldsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/builtin-licensefields/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Delete all of the builtin license field overrides for a given app and revert to the builtin defaults.",
        "operationId": "deleteBuiltinLicenseFieldsOverrides",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Create a new channel for the specified app, allowing for configuration of channel properties such as name, description, and feature flags.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Creates a channel in the KOTS application.",
        "operationId": "createChannel",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "JSON input",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "airgapDiffBundlesEnabled": {
                  "description": "AirgapDiffBundlesEnabled will allow building diff airgap bundles for the channel.",
                  "type": "boolean",
                  "x-go-name": "AirgapDiffBundlesEnabled"
                },
                "airgapDockerRegistryFormatEnabled": {
                  "description": "AirgapDockerRegistryFormatEnabled airgap bundles built after enabling this will use the Docker Registry format.",
                  "type": "boolean",
                  "x-go-name": "AirgapDockerRegistryFormatEnabled"
                },
                "allowPublishableKey": {
                  "description": "AllowPublishableKey when enabled, allows customers to use publishable keys to create customer records and sign up for this channel through the SDK",
                  "type": "boolean",
                  "x-go-name": "AllowPublishableKey"
                },
                "buildAirgapAutomatically": {
                  "description": "BuildAirgapAutomatically when enabled, automatically creates air gap builds for newly promoted releases in this channel.",
                  "type": "boolean",
                  "x-go-name": "BuildAirgapAutomatically"
                },
                "channelIcon": {
                  "description": "ChannelIcon icon of the channel that is to be created.",
                  "type": "string",
                  "x-go-name": "ChannelIcon"
                },
                "customHostnameOverrides": {
                  "$ref": "#/definitions/CustomHostnameOverrides"
                },
                "description": {
                  "description": "Description of the channel that is to be created.",
                  "type": "string",
                  "x-go-name": "Description"
                },
                "enterprisePartnerChannelID": {
                  "description": "Enterprise Partner Channel Id to be added to channel.",
                  "type": "string",
                  "x-go-name": "EnterprisePartnerChannelID"
                },
                "isDefault": {
                  "description": "IsDefault indicates if this channel is the default channel for the application.",
                  "type": "boolean",
                  "x-go-name": "IsDefault"
                },
                "name": {
                  "type": "string",
                  "x-go-name": "Name"
                },
                "semverRequired": {
                  "description": "SemverRequired when enabled, will cause an error when non semver values are used for new releases",
                  "type": "boolean",
                  "x-go-name": "SemverRequired"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/getChannelResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the details of a specific channel within an app, including its metadata and optionally its releases.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Get a channel.",
        "operationId": "getChannelProperties",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "x-go-name": "ExcludeReleases",
            "description": "Exclude releases",
            "name": "excludeReleases",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "IncludeSecuritySummary",
            "description": "Include security summary",
            "name": "includeSecuritySummary",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getChannelResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update the properties of an existing channel, such as its name, description, and feature flags.\nAll properties must be provided in the request body.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Updates an app channel.",
        "operationId": "updateChannel",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Channel update parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "airgapDiffBundlesEnabled": {
                  "description": "AirgapDiffBundlesEnabled will allow building diff airgap bundles for the channel.",
                  "type": "boolean",
                  "x-go-name": "AirgapDiffBundlesEnabled"
                },
                "airgapDockerRegistryFormatEnabled": {
                  "description": "AirgapDockerRegistryFormatEnabled airgap bundles built after enabling this will use the Docker Registry format.",
                  "type": "boolean",
                  "x-go-name": "AirgapDockerRegistryFormatEnabled"
                },
                "allowPublishableKey": {
                  "description": "AllowPublishableKey when enabled, allows customers to use publishable keys to create customer records and sign up for this channel through the SDK",
                  "type": "boolean",
                  "x-go-name": "AllowPublishableKey"
                },
                "buildAirgapAutomatically": {
                  "description": "BuildAirgapAutomatically when enabled, automatically creates air gap builds for newly promoted releases in this channel.",
                  "type": "boolean",
                  "x-go-name": "BuildAirgapAutomatically"
                },
                "channelIcon": {
                  "description": "Icon of the channel that is to be updated.",
                  "type": "string",
                  "x-go-name": "ChannelIcon"
                },
                "customHostnameOverrides": {
                  "$ref": "#/definitions/CustomHostnameOverrides"
                },
                "description": {
                  "description": "Description of the channel that is to be updated.",
                  "type": "string",
                  "x-go-name": "Description"
                },
                "isDefault": {
                  "description": "IsDefault indicates if this channel is the default channel for the application.",
                  "type": "boolean",
                  "x-go-name": "IsDefault"
                },
                "name": {
                  "description": "Name of the channel that is to be updated.",
                  "type": "string",
                  "x-go-name": "Name"
                },
                "semverRequired": {
                  "description": "SemverRequired when enabled, will cause an error when non semver values are used for new releases",
                  "type": "boolean",
                  "x-go-name": "SemverRequired"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getChannelResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Archives the specified channel, making it unavailable for new releases or deployments.\nArchived channels can no longer be used but are retained for historical reference.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/archive",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Archives an app channel.",
        "operationId": "archiveChannel",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/responseOk"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      },
      "patch": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Allow partial updates to a channel's properties. Only the fields provided in the request body will be updated.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Patches an app channel.",
        "operationId": "patchChannel",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Channel patch parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "airgapDiffBundlesEnabled": {
                  "description": "AirgapDiffBundlesEnabled will allow building diff airgap bundles for the channel.",
                  "type": "boolean",
                  "x-go-name": "AirgapDiffBundlesEnabled"
                },
                "airgapDockerRegistryFormatEnabled": {
                  "description": "AirgapDockerRegistryFormatEnabled airgap bundles built after enabling this will use the Docker Registry format.",
                  "type": "boolean",
                  "x-go-name": "AirgapDockerRegistryFormatEnabled"
                },
                "allowPublishableKey": {
                  "description": "AllowPublishableKey when enabled, allows customers to use publishable keys to create customer records and sign up for this channel through the SDK",
                  "type": "boolean",
                  "x-go-name": "AllowPublishableKey"
                },
                "buildAirgapAutomatically": {
                  "description": "BuildAirgapAutomatically when enabled, automatically creates air gap builds for newly promoted releases in this channel.",
                  "type": "boolean",
                  "x-go-name": "BuildAirgapAutomatically"
                },
                "channelIcon": {
                  "description": "Icon of the channel that is to be updated.",
                  "type": "string",
                  "x-go-name": "ChannelIcon"
                },
                "customHostnameOverrides": {
                  "$ref": "#/definitions/CustomHostnameOverrides"
                },
                "description": {
                  "description": "Description of the channel that is to be updated.",
                  "type": "string",
                  "x-go-name": "Description"
                },
                "isDefault": {
                  "description": "IsDefault indicates if this channel is the default channel for the application.",
                  "type": "boolean",
                  "x-go-name": "IsDefault"
                },
                "name": {
                  "description": "Name of the channel that is to be updated.",
                  "type": "string",
                  "x-go-name": "Name"
                },
                "semverRequired": {
                  "description": "SemverRequired when enabled, will cause an error when non semver values are used for new releases",
                  "type": "boolean",
                  "x-go-name": "SemverRequired"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getChannelResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/adoption": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns a report of version adoption rates for a channel, grouped by day or week, and filtered by license type and date range.\nThe report helps track how quickly customers are upgrading to new releases.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Get adoption rates for an app channel.",
        "operationId": "getChannelAdoptionReport",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "format": "date-time",
            "x-go-name": "StartDate",
            "description": "Report start date in YYYY-MM-DD format",
            "name": "startDate",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "format": "date-time",
            "x-go-name": "EndDate",
            "description": "Report end date in YYYY-MM-DD format",
            "name": "endDate",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "LicenseTypes",
            "description": "License types to include",
            "name": "licenseTypes",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "Interval",
            "description": "Interval to group the report by. Valid values are \"1d\" and \"1w\".  Default is 1d",
            "name": "interval",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getChannelAdoptionReportResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/airgap/download-url": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns a download URL for the airgap bundle associated with the active release on the specified channel. Optionally, a specific channel sequence can be requested via query parameter.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/airgap/download-url",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "Get airgap bundle download URL the active release on the channel.",
        "operationId": "channelReleaseAirgapBundleURL",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "ChannelSequence",
            "description": "If provided, the airgap bundle download URL for the given channel sequence will be returned",
            "name": "channelSequence",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/channelReleaseAirgapBundleURLResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/delete": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Permanently deletes the specified channel, removing it from the database.\nThis action is irreversible. The channel cannot have any customers assigned to it.\nDefault channels and system channels cannot be deleted.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/delete",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Permanently deletes an app channel.",
        "operationId": "deleteChannel",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/responseOk"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/embeddedcluster/release": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a .tgz file containing the embedded cluster release for the specified channel and app.\nOptional query parameters allow specifying a channel sequence, a customer license file to include, and whether to include an airgap bundle.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/embeddedcluster/release",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Get an embedded cluster release.",
        "operationId": "getEmbeddedClusterRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "ChannelSequence",
            "description": "If provided, downloads the embedded cluster release for the given channel sequence.",
            "name": "channelSequence",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "If provided, includes the customer's license file in the embedded cluster release.",
            "name": "customerId",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "Airgap",
            "description": "If provided, includes the airgap bundle in the embedded cluster release.",
            "name": "airgap",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "Include",
            "description": "If provided, only the specified components are included in the release.\nComma-separated list of component names: binary, release, license, ec-online-bundle, app-airgap-bundle, ec-airgap-bundle.\nWhen omitted, all components are included.",
            "name": "include",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/airgap/build": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Triggers a build of an airgap bundle for the specified release in a channel. The airgap bundle can be used for offline installations.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/airgap",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "Trigger airgap build for a channel's release.",
        "operationId": "channelReleaseAirgapBuild",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/channelReleaseAirgapBuildResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/airgap/cancel": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Cancels an in-progress airgap build for the specified release in a channel.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/airgap",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "Cancel airgap build for a channel's release.",
        "operationId": "channelReleaseAirgapCancel",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/channelReleaseAirgapCancelResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/airgap/status": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns the current airgap build status for the specified release in a channel.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/airgap/status/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "Get airgap build status for a channel's release.",
        "operationId": "channelReleaseAirgapStatus",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/channelReleaseAirgapStatusResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/demote": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Demote a specific release from a channel, making it unavailable for new installations or upgrades via that channel.\nDemoted releases can be un-demoted if needed.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/release/[:releasesequence]/demote",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Demote a channel release.",
        "operationId": "demoteChannelRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "Demote channel release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/demoteChannelRelease"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/install-commands": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return the install commands for a specific release in a channel, including commands for embedded and existing clusters.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "Get install commands for a specific channel release.",
        "operationId": "getChannelReleaseInstallCommands",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getChannelReleaseInstallCommandsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/undemote": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Restore a previously demoted release to a channel, making it available again for installations and upgrades via that channel.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/release/[:releasesequence]/undemote",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Un-demote a channel release.",
        "operationId": "unDemoteChannelRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "UnDemote channel release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/unDemoteChannelRelease"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/release/{sequence}/update-properties": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Updates the properties (such as version label, release notes, and required status) for a specific release in a channel.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "Update properties for a channel release.",
        "operationId": "updateChannelRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "Update release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "isRequired": {
                  "description": "Prevent this release from being skipped during upgrades",
                  "type": "boolean",
                  "x-go-name": "IsRequired"
                },
                "releaseNotes": {
                  "description": "The updated release notes",
                  "type": "string",
                  "x-go-name": "ReleaseNotes"
                },
                "versionLabel": {
                  "description": "The new version label to use",
                  "type": "string",
                  "x-go-name": "VersionLabel"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateChannelRelease"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/releases": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a paginated list of releases for a specific channel within an app, including release metadata and status.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/releases/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channelReleases"
        ],
        "summary": "List releases for an app channel.",
        "operationId": "listChannelReleases",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "ExcludeDemoted",
            "description": "Exclude demoted releases",
            "name": "excludeDemoted",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "IncludeSecuritySummary",
            "description": "Include security summary",
            "name": "includeSecuritySummary",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "VersionLabel",
            "description": "Filter by version label (partial match)",
            "name": "versionLabel",
            "in": "query"
          },
          {
            "enum": [
              "online",
              "airgap"
            ],
            "type": "string",
            "x-go-name": "IncludeInstallerImages",
            "description": "Include EC installer images in the images list. Empty = app images only (default).",
            "name": "includeInstallerImages",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listChannelReleasesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channel/{channel_id}/trends": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return historical and current trends for customer instances on a specific channel, such as median instance age, unique versions, active instances, and upgrade statistics.\nThe interval for trend comparison is specified via query parameter.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "Get customer instance trends for an app channel.",
        "operationId": "getChannelInstanceTrends",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Interval",
            "name": "Interval",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getChannelInstanceTrendsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/channels": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns a paginated list of channels for the specified app, with optional filtering by channel name. Channel details and associated releases can be included or excluded using query parameters.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "channels"
        ],
        "summary": "List channels for an app.",
        "operationId": "listChannels",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ChannelName",
            "description": "filter by channel name",
            "name": "channelName",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "ExcludeDetail",
            "description": "Exclude detail",
            "name": "excludeDetail",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "ExcludeAdoption",
            "description": "Exclude adoption",
            "name": "excludeAdoption",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "ChannelNameFilter",
            "description": "Channel name filter",
            "name": "channelNameFilter",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "IncludeSecuritySummary",
            "description": "Include security summary",
            "name": "includeSecuritySummary",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listChannelsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/cluster-usage": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "List cluster distribution/version usage by customers.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "List cluster usage.",
        "operationId": "listClusterUsage",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listClusterUsageResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/custom-hostname": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Add a new custom hostname for a specific app and service (registry, proxy, download portal, or replicated app).\n\nRequired RBAC Policy: kots/app/[:appid]/customhostname/create",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customHostnames"
        ],
        "summary": "Create a custom hostname",
        "operationId": "createCustomHostname",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "downloadPortal": {
                  "$ref": "#/definitions/CreateCustomHostnameParams"
                },
                "proxy": {
                  "$ref": "#/definitions/CreateCustomHostnameParams"
                },
                "registry": {
                  "$ref": "#/definitions/CreateCustomHostnameParams"
                },
                "replicatedApp": {
                  "$ref": "#/definitions/CreateCustomHostnameParams"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/createCustomHostnameResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Remove a custom hostname from a specific app and service (registry, proxy, download portal, or replicated app).\n\nRequired RBAC Policy: kots/app/[:appid]/customhostname/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customHostnames"
        ],
        "summary": "Delete a custom hostname",
        "operationId": "deleteCustomHostname",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "downloadPortal": {
                  "$ref": "#/definitions/DeleteCustomHostnameParams"
                },
                "proxy": {
                  "$ref": "#/definitions/DeleteCustomHostnameParams"
                },
                "registry": {
                  "$ref": "#/definitions/DeleteCustomHostnameParams"
                },
                "replicatedApp": {
                  "$ref": "#/definitions/DeleteCustomHostnameParams"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteCustomHostnameResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/custom-hostname/default/set": {
      "put": {
        "description": "Set the default custom hostname for a specific app and service (registry, proxy, download portal, or replicated app).\nThe default hostname is used when no other custom hostname is specified for a channel.\n\nRequired RBAC Policy: kots/app/[:appid]/customhostname/default/set",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customHostnames"
        ],
        "summary": "Set the default hostname",
        "operationId": "setDefaultHostname",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "downloadPortal": {
                  "$ref": "#/definitions/SetDefaultHostnameParams"
                },
                "proxy": {
                  "$ref": "#/definitions/SetDefaultHostnameParams"
                },
                "registry": {
                  "$ref": "#/definitions/SetDefaultHostnameParams"
                },
                "replicatedApp": {
                  "$ref": "#/definitions/SetDefaultHostnameParams"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/setDefaultHostnameResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/custom-hostname/default/unset": {
      "put": {
        "description": "Remove the default custom hostname for a specific app and service (registry, proxy, download portal, or replicated app).\nAfter unsetting, the system will fall back to the replicated hostname for that service if a custom hostname is not set for a channel.\n\nRequired RBAC Policy: kots/app/[:appid]/customhostname/default/unset",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customHostnames"
        ],
        "summary": "Unset the default hostname",
        "operationId": "unsetDefaultHostname",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "downloadPortal": {
                  "$ref": "#/definitions/UnsetDefaultHostnameParams"
                },
                "proxy": {
                  "$ref": "#/definitions/UnsetDefaultHostnameParams"
                },
                "registry": {
                  "$ref": "#/definitions/UnsetDefaultHostnameParams"
                },
                "replicatedApp": {
                  "$ref": "#/definitions/UnsetDefaultHostnameParams"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/unsetDefaultHostnameResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/custom-hostnames": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return all custom hostnames configured for the specified app, grouped by service (registry, proxy, download portal, replicated app).\n\nRequired RBAC Policy: kots/app/[:appid]/customhostname/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customHostnames"
        ],
        "summary": "List custom hostnames for an app.",
        "operationId": "listCustomHostnames",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listCustomHostnamesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer/{customer_id}/instance/{instance_id}/running-images": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Get running images for an instance.",
        "operationId": "getCustomerInstanceRunningImages",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Optional cluster identifier to disambiguate instance_id",
            "name": "ClusterID",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerInstanceRunningImagesResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer/{customer_id}/instance/{instance_id}/scan": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve security scan summaries for all images reported by a specific instance.\nThe response contains scan summaries in the same shape as the channel-based endpoint.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Get security scan summaries for an instance.",
        "operationId": "getCustomerInstanceScan",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Optional cluster identifier to disambiguate instance_id",
            "name": "ClusterID",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerInstanceScan"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer/{customer_id}/instance/{instance_id}/scan/trigger": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Sends a request to SecureBuild to scan a specific image from a customer instance.\nThis is typically used when no SBOM exists for an image.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Trigger a security scan for an instance image.",
        "operationId": "triggerCustomerInstanceScan",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Request body for triggering a scan",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TriggerCustomerInstanceScanBody"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/triggerCustomerInstanceScan"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer/{customer_id}/instance/{instance_id}/tags": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the tags associated with a specific customer instance, allowing teams to view metadata or categorization applied to that instance.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Get tags for a instance.",
        "operationId": "getCustomerInstanceTags",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Optional cluster identifier to disambiguate instance_id",
            "name": "ClusterID",
            "in": "query"
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/getCustomerInstanceTagsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Create or update tags for a specific customer instance.\nTags can be used for categorization, filtering, or metadata. Keys with empty values will remove the tag.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Create or update the tags for an instance.",
        "operationId": "updateCustomerInstanceTags",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Requried: true",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "cluster_id": {
                  "description": "Optional cluster identifier to disambiguate instance_id",
                  "type": "string",
                  "x-go-name": "ClusterID"
                },
                "tags": {
                  "description": "Upsert (create or update) instance tags. A key with an empty value will result in a delete operation for the key=value pair.",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/InstanceTag"
                  },
                  "x-go-name": "Tags"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/updateCustomerInstanceTagsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer/{customer_id}/instances": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a list of all instances associated with a specific customer and app, including instance metadata and status.\nUseful for tracking deployments and usage per customer.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "List customer instances.",
        "operationId": "listCustomerInstances",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listCustomerInstancesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer/{customer_id}/license-download": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the license for a specific customer and app, returning it as a YAML file suitable for use with KOTS installations.\nThe license includes all entitlements and metadata required for installation and updates.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "text/yaml",
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Download a customer license file as YAML.",
        "operationId": "downloadLicense",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/downloadLicenseResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customer_instances": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Generate and return a report of all customer instances for a specific app, in either CSV or JSON format.\nIncludes instance metadata and supports filtering by customer IDs and archived status.\n\nRequired RBAC Policy: kots/app/[:appid]/read (app-level gate; results are also\nfiltered per-customer by kots/app/[:appid]/license/[:licenseid]/read)",
        "produces": [
          "file"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Export customer instances for an app as CSV or JSON.",
        "operationId": "listAppCustomerInstances",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "Format",
            "description": "Format to export: csv or json",
            "name": "format",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "CustomerIds",
            "description": "Comma separated array of customer ids",
            "name": "customerIds",
            "in": "query"
          },
          {
            "type": "boolean",
            "name": "IncludeArchived",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Customer-level filters",
            "name": "Query",
            "in": "query"
          },
          {
            "type": "boolean",
            "name": "IncludeActive",
            "in": "query"
          },
          {
            "type": "boolean",
            "name": "IncludeInactive",
            "in": "query"
          },
          {
            "type": "boolean",
            "name": "IncludeArchivedCustomers",
            "in": "query"
          },
          {
            "type": "string",
            "name": "LicenseType",
            "in": "query"
          },
          {
            "type": "string",
            "name": "ChannelName",
            "in": "query"
          },
          {
            "type": "string",
            "name": "AdoptionRateFilter",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Instance-level filters",
            "name": "IncludeArchivedInstances",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listAppCustomerInstancesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customers": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a paginated list of customers for a specific app, with optional filtering by name, test status, and expiration.\nIncludes customer metadata and instance information.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "List customers for an app.",
        "operationId": "listAppCustomers",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "CustomerName",
            "description": "filter by customer name",
            "name": "customerName",
            "in": "query"
          },
          {
            "type": "boolean",
            "name": "IncludeTest",
            "in": "query"
          },
          {
            "type": "string",
            "format": "date-time",
            "name": "ExpiresBefore",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listCustomersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/customers_csv": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Generate and return a CSV report of all customers for a specific app, including metadata and instance information.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "file"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Get customer report in CSV format.",
        "operationId": "listAppCustomersCsv",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "CustomerName",
            "description": "filter by customer name",
            "name": "customerName",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listAppCustomersCsvResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/access": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/enterprise-portal/access/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get download portal access settings",
        "operationId": "getEnterprisePortalAccess",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEnterprisePortalAccessResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/{app_id}/enterprise-portal/access/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Update download portal access settings",
        "operationId": "updateEnterprisePortalAccess",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "JSON input",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "auto_invite_to_ep_on_create": {
                  "description": "Whether to automatically invite the customer email to Enterprise Portal on customer creation.\nRequires download_portal_disabled to be true.",
                  "type": "boolean",
                  "x-go-name": "AutoInviteToEpOnCreate"
                },
                "download_portal_disabled": {
                  "description": "Whether the download portal is disabled. When set to false, auto_invite_to_ep_on_create is automatically disabled.",
                  "type": "boolean",
                  "x-go-name": "DownloadPortalDisabled"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateEnterprisePortalAccessResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/branding": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/enterprise-portal/branding/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get custom branding for the enterprise portal",
        "operationId": "getEnterprisePortalBranding",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEnterprisePortalBrandingResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/{app_id}/enterprise-portal/branding/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Update custom branding for the enterprise portal",
        "operationId": "updateEnterprisePortalBranding",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Update custom branding for the enterprise portal",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "branding"
              ],
              "properties": {
                "activeEnterprisePortalTemplate": {
                  "description": "Active default template name: \"docs\", \"custom\", or empty",
                  "type": "string",
                  "x-go-name": "ActiveEnterprisePortalTemplate"
                },
                "branding": {
                  "description": "Branding object that will be parsed by the enterprise portal",
                  "type": "string",
                  "x-go-name": "Branding"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEnterprisePortalBrandingResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/content-versions/pin": {
      "post": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Creates a virtual content branch row that pins a release version label to\nthe content of an existing real branch.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Pin a release version label to an existing content branch",
        "operationId": "createContentVersionPin",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "JSON input",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "version_label"
              ],
              "properties": {
                "replace_existing": {
                  "description": "When true, an existing pin row with the same version_label is\nremoved before the new one is created. Used by `--replace` from the\nCLI and the Edit affordance in the vendor portal.",
                  "type": "boolean",
                  "x-go-name": "ReplaceExisting"
                },
                "source_branch_pattern": {
                  "description": "Semver-shaped pattern resolved server-side to the highest matching\nbranch (e.g. \"1.x.x\", \"1.2.x\"). Mutually exclusive with\nsource_version_id.",
                  "type": "string",
                  "x-go-name": "SourceBranchPattern"
                },
                "source_version_id": {
                  "description": "ID of the existing content version whose content is pinned. Mutually\nexclusive with source_branch_pattern.",
                  "type": "string",
                  "x-go-name": "SourceVersionID"
                },
                "version_label": {
                  "description": "Release version label to pin",
                  "type": "string",
                  "x-go-name": "VersionLabel"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/createContentVersionPinResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/content-versions/{version_id}": {
      "delete": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Removes a content version row and its pages, toc, and theme.\nMainly used to remove pin rows. Real-branch rows can be deleted too —\nthey'll be recreated (empty) on the next sync.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Delete a content version",
        "operationId": "deleteContentVersion",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "VersionID",
            "description": "Content version identifier",
            "name": "version_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteContentVersionResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/content-versions/{version_id}/dismiss-notice": {
      "post": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Clear the sync notice for a content version.",
        "operationId": "dismissContentVersionNotice",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "VersionID",
            "description": "Content version identifier",
            "name": "version_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/dismissContentVersionNoticeResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/customer-allowed-domains": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy:\nkots/app/[:appid]/enterprise-portal/customer-allowed-domains/read\nkots/app/[:appid]/license/[:customer_id]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List customer allowed domains for the enterprise portal",
        "operationId": "listCustomerAllowedDomains",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "FilterCustomerID",
            "description": "Filter by customer ID",
            "name": "customer_id",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listCustomerAllowedDomainsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy:\nkots/app/[:appid]/enterprise-portal/customer-allowed-domains/create\nkots/app/[:appid]/license/[:customer_id]/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Create a customer allowed domain for the enterprise portal",
        "operationId": "createCustomerAllowedDomain",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Create a customer allowed domain for the enterprise portal",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "customer_id": {
                  "type": "string",
                  "x-go-name": "CustomerID"
                },
                "domain": {
                  "type": "string",
                  "x-go-name": "Domain"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createCustomerAllowedDomainResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/customer-allowed-domains/{allowedDomainId}": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy:\nkots/app/[:appid]/enterprise-portal/customer-allowed-domains/delete\nkots/app/[:appid]/license/[:customer_id]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Delete a customer allowed domain for the enterprise portal",
        "operationId": "deleteCustomerAllowedDomain",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "AllowedDomainID",
            "description": "The allowed domain ID to delete",
            "name": "allowedDomainId",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "The customer ID for the allowed domain",
            "name": "customer_id",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/customer-user": {
      "post": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Invite a customer user to the enterprise portal, sending an invite email to the customer user.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Invite a customer user to the enterprise portal",
        "operationId": "inviteEnterprisePortalCustomerUser",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Invite a customer user to the enterprise portal",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "customer_id": {
                  "type": "string",
                  "x-go-name": "CustomerID"
                },
                "email_address": {
                  "type": "string",
                  "x-go-name": "EmailAddress"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/inviteEnterprisePortalCustomerUserResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Delete a customer user for the enterprise portal",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "operationId": "deleteEnterprisePortalCustomerUser",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "The email address of the user to delete",
            "name": "EmailAddress",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "The customer ID which the user belongs to",
            "name": "customer_id",
            "in": "query"
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/customer-users": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy:\nkots/app/[:appid]/enterprise-portal/customer-users/read\nkots/app/[:appid]/license/[:customer_id]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List customer users for the enterprise portal",
        "operationId": "listEnterprisePortalCustomerUsers",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "default": false,
            "name": "ExcludeInvites",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by customer ID",
            "name": "FilterCustomerID",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by email address",
            "name": "FilterEmail",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "name": "Limit",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "name": "Offset",
            "in": "query"
          },
          {
            "type": "string",
            "name": "Sort",
            "in": "query"
          },
          {
            "type": "string",
            "name": "Order",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listEnterprisePortalCustomerUsersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/documentation": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/enterprise-portal/documentation/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get documentation URLs for various installation methods",
        "operationId": "getEnterprisePortalDocumentation",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getDocumentationResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update documentation URLs and markdown content for various installation methods\n\nRequired RBAC Policy: kots/app/[:appid]/enterprise-portal/documentation/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Update documentation URLs",
        "operationId": "updateEnterprisePortalDocumentation",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "JSON input",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "embeddedClusterInstallURL": {
                  "description": "URL for Embedded Cluster installation documentation",
                  "type": "string",
                  "x-go-name": "EmbeddedClusterInstallURL"
                },
                "embeddedClusterPostInstall": {
                  "description": "Markdown content for Embedded Cluster post-installation steps",
                  "type": "string",
                  "x-go-name": "EmbeddedClusterPostInstall"
                },
                "embeddedClusterPreInstall": {
                  "description": "Markdown content for Embedded Cluster pre-installation steps",
                  "type": "string",
                  "x-go-name": "EmbeddedClusterPreInstall"
                },
                "helmInstallURL": {
                  "description": "URL for Helm installation documentation",
                  "type": "string",
                  "x-go-name": "HelmInstallURL"
                },
                "helmPostInstall": {
                  "description": "Markdown content for Helm post-installation steps",
                  "type": "string",
                  "x-go-name": "HelmPostInstall"
                },
                "helmPreInstall": {
                  "description": "Markdown content for Helm pre-installation steps",
                  "type": "string",
                  "x-go-name": "HelmPreInstall"
                },
                "kotsInstallURL": {
                  "description": "URL for KOTS installation documentation",
                  "type": "string",
                  "x-go-name": "KOTSInstallURL"
                },
                "kurlInstallURL": {
                  "description": "URL for kURL installation documentation",
                  "type": "string",
                  "x-go-name": "KURLInstallURL"
                },
                "valuesOverrideURL": {
                  "description": "URL for Values Override documentation",
                  "type": "string",
                  "x-go-name": "ValuesOverrideURL"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateDocumentationResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/email-history": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns a paginated list of emails sent through the enterprise portal with their delivery status.\n\nRequired RBAC Policy:\nkots/app/{app_id}/enterprise-portal/email-history/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List email history for the enterprise portal",
        "operationId": "listEnterprisePortalEmailHistory",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Filter by email type (login, invite, version_update)",
            "name": "EmailType",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by status (sent, delivered, bounced, spam_complaint)",
            "name": "Status",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by customer ID",
            "name": "CustomerID",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 25,
            "name": "Limit",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 0,
            "name": "Offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listEnterprisePortalEmailHistoryResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/failed-login-attempts": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "List failed login attempts for the enterprise portal users.\n\n\nRequired RBAC Policy: kots/app/[:appid]/enterprise-portal/failed-login-attempts/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List failed login attempts",
        "operationId": "listFailedLoginAttempts",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Maximum number of results to return",
            "name": "Limit",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Number of results to skip",
            "name": "Offset",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by email address",
            "name": "FilterEmail",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Sort field",
            "name": "Sort",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Sort order (asc or desc)",
            "name": "Order",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listFailedLoginAttemptsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/features": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get Enterprise Portal feature settings for an app",
        "operationId": "getPortalFeatures",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getPortalFeaturesResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Update Enterprise Portal feature settings for an app",
        "operationId": "updatePortalFeatures",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "askAiEnabled": {
                  "description": "Whether the Ask AI assistant should be enabled in the Enterprise Portal.",
                  "type": "boolean",
                  "x-go-name": "AskAiEnabled"
                },
                "supportBundleUploadEnabled": {
                  "description": "Whether support bundle upload should be enabled in the Enterprise Portal.",
                  "type": "boolean",
                  "x-go-name": "SupportBundleUploadEnabled"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getPortalFeaturesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/install-attempts": {
      "get": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "List install attempts for a customer or all customers in the app.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List installation attempts for the enterprise portal",
        "operationId": "listInstallAttempts",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Filter by a specific customer ID",
            "name": "FilterCustomerID",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by a specific instance ID",
            "name": "FilterInstanceID",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Maximum number of results to return",
            "name": "Limit",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Number of results to skip",
            "name": "Offset",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Filter by status",
            "name": "FilterStatus",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listInstallAttemptsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/install-options": {
      "post": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Create an installation options record for a customer describing the installation configuration. Automatically creating\na service account for the installation that can be used to perform the actual installation.\nOptionally include generated install instructions by setting the includeInstructions query parameter to true.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Create an installation options record",
        "operationId": "createInstallOptions",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "x-go-name": "WithInstructions",
            "description": "Whether to include install instructions in the response",
            "name": "includeInstructions",
            "in": "query"
          },
          {
            "description": "JSON input",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "customer_id",
                "install_type",
                "instance_name",
                "network_availability",
                "channel_id",
                "channel_release_sequence"
              ],
              "properties": {
                "admin_console_url": {
                  "description": "URL for the admin console, used for updates",
                  "type": "string",
                  "x-go-name": "AdminConsoleURL"
                },
                "channel_id": {
                  "description": "Channel ID to use for the installation",
                  "type": "string",
                  "x-go-name": "ChannelID"
                },
                "channel_release_sequence": {
                  "description": "Channel release sequence number to use for the installation",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "ChannelReleaseSequence"
                },
                "customer_id": {
                  "description": "The customer ID for which to create install options",
                  "type": "string",
                  "x-go-name": "CustomerID"
                },
                "install_type": {
                  "description": "Type of installation",
                  "type": "string",
                  "enum": [
                    "linux",
                    "helm"
                  ],
                  "x-go-name": "InstallType"
                },
                "instance_name": {
                  "description": "Name of the installation instance, also used as service account name - must be unique per customer",
                  "type": "string",
                  "x-go-name": "InstanceName"
                },
                "is_multi_node": {
                  "description": "Whether this is a multi-node installation (only applicable for linux install type)",
                  "type": "boolean",
                  "x-go-name": "IsMultiNode"
                },
                "kubernetes_distribution": {
                  "description": "Kubernetes distribution that will be used for the helm installation (only applicable for helm install type)",
                  "type": "string",
                  "enum": [
                    "vanilla",
                    "openshift",
                    "rancher",
                    "aks",
                    "eks",
                    "gke"
                  ],
                  "x-go-name": "KubernetesDistribution"
                },
                "network_availability": {
                  "description": "Network availability for the installation environment",
                  "type": "string",
                  "enum": [
                    "airgap",
                    "proxy",
                    "online"
                  ],
                  "x-go-name": "NetworkAvailability"
                },
                "registry_availability": {
                  "description": "Registry availability for installations that use a private registry",
                  "type": "string",
                  "enum": [
                    "online",
                    "partial",
                    "offline"
                  ],
                  "x-go-name": "RegistryAvailability"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createInstallOptionsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/install-options/{install_options_id}": {
      "delete": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Soft-delete an existing installation options record for a customer by setting its status to \"discarded\".\nThe record is preserved for audit purposes. The associated service account is not revoked. The service account\nmust be revoked before the instance name can be reused with a new install option record for the same customer.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Delete an installation options record",
        "operationId": "deleteInstallOptions",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstallOptionsID",
            "description": "Install options ID from path",
            "name": "install_options_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "patch": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Update an existing installation options record for a customer. Only provided fields will be updated.\nYou cannot change the service account ID, instance name, or install type as these are immutable.\n\nOptionally return updated install instructions by setting the includeInstructions query parameter to true.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Update an installation options record",
        "operationId": "patchInstallOptions",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstallOptionsID",
            "description": "Install options ID from path",
            "name": "install_options_id",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "x-go-name": "WithInstructions",
            "description": "Whether to include install instructions in the response",
            "name": "includeInstructions",
            "in": "query"
          },
          {
            "description": "JSON input - all fields are optional for PATCH",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "admin_console_url": {
                  "description": "URL for the admin console, used for updates",
                  "type": "string",
                  "x-go-name": "AdminConsoleURL"
                },
                "channel_id": {
                  "description": "Channel ID to use for the installation (must be provided together with channel_release_sequence if being updated)",
                  "type": "string",
                  "x-go-name": "ChannelID"
                },
                "channel_release_sequence": {
                  "description": "Channel release sequence number to use for the installation (must be provided together with channel_id if being updated)",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "ChannelReleaseSequence"
                },
                "instance_name": {
                  "description": "Instance name (display name for the installation)",
                  "type": "string",
                  "x-go-name": "InstanceName"
                },
                "kubernetes_distribution": {
                  "description": "Kubernetes distribution that will be used for the helm installation (only applicable for helm install type)",
                  "type": "string",
                  "enum": [
                    "vanilla",
                    "openshift",
                    "rancher",
                    "aks",
                    "eks",
                    "gke"
                  ],
                  "x-go-name": "KubernetesDistribution"
                },
                "network_availability": {
                  "description": "Network availability for the installation environment",
                  "type": "string",
                  "enum": [
                    "airgap",
                    "proxy",
                    "online"
                  ],
                  "x-go-name": "NetworkAvailability"
                },
                "registry_availability": {
                  "description": "Registry availability for installations that use a private registry",
                  "type": "string",
                  "enum": [
                    "online",
                    "partial",
                    "offline"
                  ],
                  "x-go-name": "RegistryAvailability"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/patchInstallOptionsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/install-options/{option_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Retrieve the installation options that describe the installation configured for a customers install via the Enterprise Portal or API.\nOptionally include generated install instructions by setting the includeInstructions query parameter to true.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get an install options record",
        "operationId": "getInstallOptions",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "OptionID",
            "description": "The ID for a customer install options record (returned from create install options)",
            "name": "option_id",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "x-go-name": "WithInstructions",
            "description": "Whether to include install instructions in the response",
            "name": "includeInstructions",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getInstallOptionsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/install-options/{option_id}/update-instructions": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Generates step-by-step instructions for updating an installation to a specific target version.\nSupports both Helm and Linux (Embedded Cluster) installation types. The update instructions\nwill use upgrade/update commands instead of install commands, and are tailored to the\nnetwork and registry availability configuration from the original install options.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get update instructions",
        "operationId": "getUpdateInstructions",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "OptionID",
            "description": "The ID for a customer install options record",
            "name": "option_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "The instance ID for a legacy/airgap instance (used when option_id is \"placeholder\")",
            "name": "instance_id",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Optional cluster ID used to disambiguate a kots_license_instance row when\nthe same instance_id exists across multiple clusters.",
            "name": "cluster_id",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "TargetChannelID",
            "description": "Target channel ID for the update",
            "name": "targetChannelId",
            "in": "query",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TargetChannelSequence",
            "description": "Target channel sequence for the update",
            "name": "targetChannelSequence",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getUpdateInstructionsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/instances": {
      "get": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "List instances for the enterprise portal with optional pagination and customer filtering.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List instances",
        "operationId": "listEnterprisePortalInstances",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Filter by customer ID",
            "name": "FilterCustomerID",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Maximum number of results to return",
            "name": "Limit",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Number of results to skip",
            "name": "Offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listEnterprisePortalInstancesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/service-accounts": {
      "get": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "List service accounts for the enterprise portal, optionally filtered by customer ID and/or revoked status.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List service accounts",
        "operationId": "listEnterprisePortalServiceAccounts",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Filter by a specific customer ID",
            "name": "FilterCustomerID",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Maximum number of results to return",
            "name": "Limit",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "description": "Number of results to skip",
            "name": "Offset",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Sort field",
            "name": "Sort",
            "in": "query"
          },
          {
            "type": "string",
            "description": "Sort order (asc or desc)",
            "name": "Order",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Filter by revoked status",
            "name": "FilterRevoked",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listEnterprisePortalServiceAccountsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/service-accounts/{serviceAccountId}": {
      "delete": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "Revokes an enterprise portal service account, marking it as revoked and clearing sensitive data. Note that this\nmakes the service account name reusable.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Delete (revoke) a service account",
        "operationId": "deleteEnterprisePortalServiceAccount",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ServiceAccountID",
            "description": "Service Account ID to revoke",
            "name": "serviceAccountId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/settings": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Get enterprise portal settings for a customer",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "operationId": "getEnterprisePortalSettings",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Filter by customer ID",
            "name": "FilterCustomerID",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEnterprisePortalSettingsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update enterprise portal settings for a customer",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "operationId": "updateEnterprisePortalSettings",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "allowedDomainsEnabled": {
                  "type": "boolean",
                  "x-go-name": "AllowedDomainsEnabled"
                },
                "customerId": {
                  "type": "string",
                  "x-go-name": "CustomerID"
                },
                "portalVersion": {
                  "type": "string",
                  "x-go-name": "PortalVersion"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateEnterprisePortalSettingsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/status": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Get the status of the enterprise portal for an app",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Get enterprise portal status",
        "operationId": "getEnterprisePortalStatus",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEnterprisePortalStatusResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update the status of the enterprise portal for an app",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Update status of the enterprise portal",
        "operationId": "updateEnterprisePortalStatus",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Update status for the enterprise portal",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "status"
              ],
              "properties": {
                "status": {
                  "description": "Status value",
                  "type": "string",
                  "enum": [
                    "always",
                    "never",
                    "per-customer"
                  ],
                  "x-go-name": "Status"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEnterprisePortalStatusResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/system-user-login": {
      "post": {
        "security": [
          {
            "api_key": []
          },
          {
            "Required RBAC Policy": []
          }
        ],
        "description": "The system user will be created on-demand if it does not exist. The URL will open the EP verify endpoint with the generated nonce.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "Create a one-time login URL for Enterprise Portal using a system user for the specified customer.",
        "operationId": "createEnterprisePortalSystemUserLogin",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Create a login link for Enterprise Portal using a system user for the specified customer",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "customer_id"
              ],
              "properties": {
                "customer_id": {
                  "description": "Customer ID to scope the system user email address",
                  "type": "string",
                  "x-go-name": "CustomerID"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createEnterprisePortalSystemUserLoginResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/trials": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a paginated list of trial signups for a specific app,\nwith email, company, and status information.\n\nRequired RBAC Policy: kots/app/[:appid]/license/*/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "List all trial signups for an app.",
        "operationId": "listPendingTrials",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "boolean",
            "description": "Filter for verification status: \"true\" for verified, \"false\" for unverified, omit for all",
            "name": "Verified",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listPendingTrialsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/enterprise-portal/update-attempts": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/enterprise-portal/update-attempts/read\n\nLists update attempts for a customer, optionally filtered by service account ID.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "enterprisePortal"
        ],
        "summary": "List customer update attempts",
        "operationId": "listUpdateAttempts",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "The customer ID to list update attempts for",
            "name": "customer_id",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ServiceAccountID",
            "description": "Optional service account ID filter",
            "name": "service_account_id",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 1,
            "x-go-name": "Page",
            "description": "Page number (starting at 1)",
            "name": "page",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size (1-100)",
            "name": "page_size",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listUpdateAttemptsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/events": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Get instance events in JSON format.",
        "operationId": "listAppInstanceEvents",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "CustomerIds",
            "description": "Comma separated array of customer ids",
            "name": "customerIds",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "InstanceIds",
            "name": "instanceIds",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "EventTypes",
            "name": "eventTypes",
            "in": "query"
          },
          {
            "type": "string",
            "format": "date-time",
            "x-go-name": "Before",
            "name": "before",
            "in": "query"
          },
          {
            "type": "string",
            "format": "date-time",
            "x-go-name": "After",
            "name": "after",
            "in": "query"
          },
          {
            "type": "string",
            "name": "Format",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listAppInstanceEventsResponse"
          },
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/instance-tag-schema": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns a map of distinct tag keys to their distinct values across all instances belonging to the app.\n\nRequired RBAC Policy: kots/app/[:appid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Get the instance tag schema for an app.",
        "operationId": "getInstanceTagSchema",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getInstanceTagSchemaResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/instance-tags": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Accepts a list of instance IDs and returns their tags in a single response.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Get tags for multiple instances.",
        "operationId": "getCustomerInstancesTagsBulk",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "clusterIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "ClusterIDs"
                },
                "instanceIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "InstanceIDs"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerInstancesTagsBulkResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/instances/archive": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Archives multiple customer instances in a single request. Only development,\nairgap, or inactive instances are eligible. Instances that cannot be archived\n(e.g., active production instances or instances the caller lacks permission\nfor) are skipped and returned in the skipped array with a reason.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Batch archive customer instances.",
        "operationId": "batchArchiveCustomerInstances",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "instances": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/BatchArchiveInstance"
                  },
                  "x-go-name": "Instances"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/batchArchiveCustomerInstancesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/license-field": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/licensefields/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Create a license field for a given app.",
        "operationId": "createLicenseField",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "name",
                "type",
                "title",
                "hidden"
              ],
              "properties": {
                "default": {
                  "description": "Default value of the entitlement field that is to be created.",
                  "type": "string",
                  "x-go-name": "Default"
                },
                "enumOptions": {
                  "description": "Enum options for the entitlement field (only for Enum type).",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "EnumOptions"
                },
                "hidden": {
                  "description": "Hidden flag of the entitlement field that is to be created.",
                  "type": "boolean",
                  "x-go-name": "Hidden"
                },
                "name": {
                  "description": "Name of the entitlement field that is to be created.",
                  "type": "string",
                  "x-go-name": "Name"
                },
                "required": {
                  "description": "Required flag of the entitlement field that is to be created.",
                  "type": "boolean",
                  "x-go-name": "Required"
                },
                "title": {
                  "description": "Title of the entitlement field that is to be created.",
                  "type": "string",
                  "x-go-name": "Title"
                },
                "type": {
                  "description": "Type of the entitlement field that is to be created.",
                  "type": "string",
                  "x-go-name": "Type"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/createLicenseFieldResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/license-field/{license_field_name}": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/licensefields/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Update a license field for a given appId and licenseFieldName.",
        "operationId": "editLicenseField",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "LicenseFieldName",
            "description": "Field name",
            "name": "license_field_name",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "title",
                "default",
                "hidden",
                "required"
              ],
              "properties": {
                "default": {
                  "description": "Optional default value for this licensefield.",
                  "type": "string",
                  "x-go-name": "Default"
                },
                "enumOptions": {
                  "description": "Enum options for the entitlement field (only for Enum type).",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "EnumOptions"
                },
                "hidden": {
                  "description": "Indicates if this field will be visible from the on-premise license screen.",
                  "type": "boolean",
                  "x-go-name": "Hidden"
                },
                "required": {
                  "description": "Indicates if this field will be required from the on-premise license screen.",
                  "type": "boolean",
                  "x-go-name": "Required"
                },
                "title": {
                  "description": "Title of custom license field to display.",
                  "type": "string",
                  "x-go-name": "Title"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/editLicenseFieldResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/licensefields/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Delete a field for a given app and named field.",
        "operationId": "deleteLicenseField",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "LicenseFieldName",
            "description": "Field name",
            "name": "license_field_name",
            "in": "path",
            "required": true
          },
          {
            "type": "boolean",
            "x-go-name": "PreserveFields",
            "description": "Field name",
            "name": "preserve_fields",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteLicenseFieldResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/license-fields": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/licensefields/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "List license fields for a given appId.",
        "operationId": "listLicenseFields",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listLicenseFieldsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/release": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Create a new release for the specified app using the provided release specification.\nThe release can be configured with a raw or gzipped spec and will be available for promotion to channels.\n\nRequired RBAC Policy: kots/app/[:appid]/release/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Create a new release.",
        "operationId": "createRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Create release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "spec": {
                  "description": "The spec to use in the new release",
                  "type": "string",
                  "x-go-name": "Spec"
                },
                "spec_gzip": {
                  "description": "The spec to use in the new release, but gzipped",
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "uint8"
                  },
                  "x-go-name": "SpecGzip"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createRelease"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/release/draft": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Create a draft release for the specified app, which can be further edited and eventually promoted.\nSupports both KOTS and Builders draft types depending on team entitlements.\n\nRequired RBAC Policy: kots/app/[:appid]/release/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Draft a release for an app.",
        "operationId": "draftRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Create draft release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "isBuildersRelease": {
                  "description": "When true, the draft will be a Builders draft. Otherwise it will be a KOTS draft.",
                  "type": "boolean",
                  "x-go-name": "IsBuildersRelease"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/draftReleaseResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/release/{sequence}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the details of a specific release for an app, identified by its sequence number.\nThe response includes the release specification, metadata, and status information.\n\nRequired RBAC Policy: kots/app/[:appid]/release/[:releasesequence]/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Get a release by sequence.",
        "operationId": "getRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getRelease"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update the specification and metadata for an existing release, identified by its sequence number.\nOnly non-promoted releases can be updated. Supports raw and gzipped specs.\n\nRequired RBAC Policy: kots/app/[:appid]/release/[:releasesequence]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Update a release.",
        "operationId": "updateRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "Update release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "spec": {
                  "description": "The spec to use in the release",
                  "type": "string",
                  "x-go-name": "Spec"
                },
                "spec_gzip": {
                  "description": "The spec to use in the release, in gzip format",
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "uint8"
                  },
                  "x-go-name": "SpecGzip"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateRelease"
          },
          "400": {
            "$ref": "#/responses/updateReleaseError"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/release/{sequence}/compatibility": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Report the compatibility test results for a specific release, including Kubernetes distribution, version, and success or failure details.\n\nRequired RBAC Policy: kots/app/[:appid]/release/[:releasesequence]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Report a compatibility result.",
        "operationId": "reportCompatibilityResult",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "Report Compatibility result parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "distribution": {
                  "type": "string",
                  "x-go-name": "Distribution"
                },
                "failureAt": {
                  "type": "string",
                  "format": "date-time",
                  "x-go-name": "FailureAt"
                },
                "failureNotes": {
                  "type": "string",
                  "x-go-name": "FailureNotes"
                },
                "successAt": {
                  "type": "string",
                  "format": "date-time",
                  "x-go-name": "SuccessAt"
                },
                "successNotes": {
                  "type": "string",
                  "x-go-name": "SuccessNotes"
                },
                "version": {
                  "type": "string",
                  "x-go-name": "Version"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/compatibilityResponse"
          },
          "400": {
            "$ref": "#/responses/compatibilityErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/release/{sequence}/promote": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Promote a specific release to one or more channels, making it available for deployment.\nSupports setting release notes, version labels, and marking releases as required.\n\nRequired RBAC Policy: kots/app/[:appid]/channel/[:channelid]/promote",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Promote a release.",
        "operationId": "promoteRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "Promote release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "channelIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "ChannelIDs"
                },
                "ignoreWarnings": {
                  "type": "boolean",
                  "x-go-name": "IgnoreWarnings"
                },
                "isRequired": {
                  "type": "boolean",
                  "x-go-name": "IsRequired"
                },
                "notifyUsers": {
                  "description": "Sends email notifications to all Enterprise Portal users on the target channel",
                  "type": "boolean",
                  "x-go-name": "NotifyUsers"
                },
                "omitDetailsInResponse": {
                  "description": "Omits channels, charts, and compatibilityResults details in the response body",
                  "type": "boolean",
                  "x-go-name": "OmitDetailsInResponse"
                },
                "releaseNotes": {
                  "type": "string",
                  "x-go-name": "ReleaseNotes"
                },
                "releaseNotesGzip": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "uint8"
                  },
                  "x-go-name": "ReleaseNotesGzip"
                },
                "versionLabel": {
                  "type": "string",
                  "x-go-name": "VersionLabel"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/promoteReleaseResponse"
          },
          "400": {
            "$ref": "#/responses/promoteReleaseErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/release/{sequence}/test": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Trigger automated tests for a specific release, validating its configuration and compatibility.\nResults are reported asynchronously and may include errors or warnings.\n\nRequired RBAC Policy: kots/app/[:appid]/releases/test",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Test a release.",
        "operationId": "testRelease",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true
          },
          {
            "description": "Promote release parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/testReleaseResponse"
          },
          "400": {
            "$ref": "#/responses/testReleaseErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/testReleaseErrorResponse"
          },
          "412": {
            "$ref": "#/responses/testReleaseErrorResponse"
          }
        }
      }
    },
    "/app/{app_id}/releases": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a paginated list of all releases for the specified app, including their metadata, status, and sequence numbers.\n\nRequired RBAC Policy: kots/app/[:appid]/release/[:releasesequence]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "List releases for an app.",
        "operationId": "listReleases",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "IncludeSecuritySummary",
            "description": "Include security summary",
            "name": "includeSecuritySummary",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listReleasesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/releases/active": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a list of all active (currently promoted) releases for the specified app.\nActive releases are those that will be used by default when installing a particular channel.\n\nRequired RBAC Policy: kots/app/[:appid]/release/[:releasesequence]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "List active releases for an app.",
        "operationId": "listActiveReleases",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "IncludeSecuritySummary",
            "description": "Include security summary",
            "name": "includeSecuritySummary",
            "in": "query"
          }
        ],
        "responses": {
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/releases/archive": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Archive one or more releases for the specified app, making them unavailable for deployment or download.\nActive releases cannot be archived.\n\nRequired RBAC Policy: kots/app/[:appid]/release/[:releasesequence]/archive",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "releases"
        ],
        "summary": "Archive releases.",
        "operationId": "archiveReleases",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Archive releases parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "sequences": {
                  "description": "The release sequences to archive",
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "int64"
                  },
                  "x-go-name": "Sequences"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/atchiveReleasesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/rename": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/app/[:appid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Rename the app.",
        "operationId": "renameApp",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "App rename parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "description": "New name of the app.",
                  "type": "string",
                  "x-go-name": "Name"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/responseOk"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "429": {
            "$ref": "#/responses/responseErrTooManyRequests"
          }
        }
      }
    },
    "/app/{app_id}/security-center-settings": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Get the security center configuration settings for the specified app.\n\nRequired RBAC Policy: kots/app/[:appid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Get app security center settings.",
        "operationId": "getSecurityCenterSettings",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getSecurityCenterSettingsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update the security center configuration settings for the specified app.\n\nRequired RBAC Policy: kots/app/[:appid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Update app security center settings.",
        "operationId": "updateSecurityCenterSettings",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Security center settings configuration",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "enabled"
              ],
              "properties": {
                "enabled": {
                  "description": "Whether security center is enabled",
                  "type": "boolean",
                  "x-go-name": "Enabled"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getSecurityCenterSettingsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/supportbundle-command": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a command that can be run to collect a support bundle for the specified app.\nThe command may vary depending on the app's configuration and entitlements.\n\nRequired RBAC Policy: kots/app/[:appid]/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get a support bundle command for an app",
        "operationId": "getSupportBundleCommand",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getSupportBundleCommandResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/trial-signup": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Enable or disable trial signup for the specified app.\n\nRequired RBAC Policy: kots/app/[:appid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Update app trial signup setting.",
        "operationId": "updateAppTrialSignup",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Trial signup configuration",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "enabled"
              ],
              "properties": {
                "enabled": {
                  "description": "Whether trial signup is enabled for this app",
                  "type": "boolean",
                  "x-go-name": "Enabled"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getAppResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/app/{app_id}/trial-signup-settings": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Get the trial signup configuration settings for the specified app.\n\nRequired RBAC Policy: kots/app/[:appid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Get app trial signup settings.",
        "operationId": "getTrialSignupSettings",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getTrialSignupSettingsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update the trial signup configuration settings for the specified app.\n\nRequired RBAC Policy: kots/app/[:appid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "Update app trial signup settings.",
        "operationId": "updateTrialSignupSettings",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Trial signup settings configuration",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "defaultChannelId",
                "expirationDays",
                "helmInstallEnabled",
                "embeddedClusterEnabled",
                "isHelmAirgapEnabled",
                "supportBundleUploadEnabled",
                "licenseType"
              ],
              "properties": {
                "customSignupFields": {
                  "description": "Custom signup fields for the enterprise portal signup form",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CustomSignupFieldDefinition"
                  },
                  "x-go-name": "CustomSignupFields"
                },
                "defaultChannelId": {
                  "description": "Default channel ID for trial signups",
                  "type": "string",
                  "x-go-name": "DefaultChannelID"
                },
                "domainFilterDomains": {
                  "description": "List of domains to block or allow",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "DomainFilterDomains"
                },
                "domainFilterMode": {
                  "description": "Domain filter mode: off, block, or allow",
                  "type": "string",
                  "x-go-name": "DomainFilterMode"
                },
                "domainFilterUseDefaultBlocklist": {
                  "description": "Whether to include the default consumer domain blocklist",
                  "type": "boolean",
                  "x-go-name": "DomainFilterUseDefaultBlock"
                },
                "embeddedClusterEnabled": {
                  "description": "Whether embedded cluster is enabled",
                  "type": "boolean",
                  "x-go-name": "EmbeddedClusterEnabled"
                },
                "expirationDays": {
                  "description": "Number of days until trial expires (max 90)",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "ExpirationDays"
                },
                "helmInstallEnabled": {
                  "description": "Whether helm install is enabled",
                  "type": "boolean",
                  "x-go-name": "HelmInstallEnabled"
                },
                "isHelmAirgapEnabled": {
                  "description": "Whether helm airgap is enabled",
                  "type": "boolean",
                  "x-go-name": "IsHelmAirgapEnabled"
                },
                "licenseType": {
                  "description": "License type: trial or community",
                  "type": "string",
                  "x-go-name": "LicenseType"
                },
                "supportBundleUploadEnabled": {
                  "description": "Whether support bundle upload is enabled",
                  "type": "boolean",
                  "x-go-name": "SupportBundleUploadEnabled"
                },
                "termsAndConditionsUrl": {
                  "description": "Terms and conditions URL (optional, must be HTTPS)",
                  "type": "string",
                  "x-go-name": "TermsAndConditionsURL"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getTrialSignupSettingsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/apps": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a list of all apps accessible to the authenticated team, including their metadata and associated channels.\nOptionally, channels can be excluded from the response using the excludeChannels query parameter.\n\nRequired RBAC Policy: kots/app/[:appid]/read and kots/app/[:appid]/channel/[:channelid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "apps"
        ],
        "summary": "List apps for a team.",
        "operationId": "apps",
        "responses": {
          "200": {
            "$ref": "#/responses/listAppsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cli/telemetry/error": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Records detailed error information for a CLI command that failed. The event_id must reference\na valid event from cli_telemetry_events table, otherwise a 400 error is returned.\n\nNote: Authentication required. Team and user information is extracted automatically from the Bearer token.\nThis endpoint is accessible to all authenticated users, including read-only users, to ensure comprehensive telemetry collection.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "telemetry"
        ],
        "summary": "Record CLI error details",
        "operationId": "postCliTelemetryError",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "event_id",
                "command"
              ],
              "properties": {
                "command": {
                  "description": "Command that failed",
                  "type": "string",
                  "x-go-name": "Command",
                  "example": "release lint"
                },
                "error_message": {
                  "description": "Detailed error message",
                  "type": "string",
                  "x-go-name": "ErrorMessage",
                  "example": "Invalid YAML syntax in release manifest"
                },
                "error_type": {
                  "description": "Type of error that occurred",
                  "type": "string",
                  "x-go-name": "ErrorType",
                  "example": "ValidationError"
                },
                "event_id": {
                  "description": "Event ID to link this error to (must be a valid event_id from cli_telemetry_events)",
                  "type": "string",
                  "x-go-name": "EventID",
                  "example": "550e8400-e29b-41d4-a716-446655440000"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/cliTelemetryErrorResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          }
        }
      }
    },
    "/cli/telemetry/event": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Records telemetry data for a CLI command execution including exit code, duration, and environment metadata.\nReturns a unique event_id that can be used to correlate errors with this event.\n\nNote: Authentication required. Team and user information is extracted automatically from the Bearer token.\nThis endpoint is accessible to all authenticated users, including read-only users, to ensure comprehensive telemetry collection.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "telemetry"
        ],
        "summary": "Record CLI command execution event",
        "operationId": "postCliTelemetryEvent",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "event_id",
                "command"
              ],
              "properties": {
                "command": {
                  "description": "Name of the CLI command that was executed",
                  "type": "string",
                  "x-go-name": "Command",
                  "example": "release create"
                },
                "duration_ms": {
                  "description": "Duration of command execution in milliseconds",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "DurationMs",
                  "example": 5000
                },
                "event_id": {
                  "description": "Unique identifier for the event (UUID format, must be generated by client)",
                  "type": "string",
                  "x-go-name": "EventID",
                  "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "exit_code": {
                  "description": "Exit code of the command execution",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "ExitCode",
                  "example": 0
                },
                "has_config_file": {
                  "description": "Whether a config file was present",
                  "type": "boolean",
                  "x-go-name": "HasConfigFile"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/cliTelemetryEventResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          }
        }
      }
    },
    "/cli/telemetry/stats": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Records resource count statistics for a CLI operation, including number of Helm charts,\nKubernetes manifests, preflights, and support bundles. Also captures tool version information.\n\nNote: Authentication required. Team and user information is extracted automatically from the Bearer token.\nThis endpoint is accessible to all authenticated users, including read-only users, to ensure comprehensive telemetry collection.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "telemetry"
        ],
        "summary": "Record CLI resource statistics",
        "operationId": "postCliTelemetryStats",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "command"
              ],
              "properties": {
                "command": {
                  "description": "Name of the CLI command",
                  "type": "string",
                  "x-go-name": "Command",
                  "example": "release create"
                },
                "helm_charts": {
                  "description": "Number of Helm charts in the release",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "HelmCharts",
                  "example": 3
                },
                "k8s_manifests": {
                  "description": "Number of Kubernetes manifests in the release",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "K8sManifests",
                  "example": 45
                },
                "preflights": {
                  "description": "Number of preflight checks",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "Preflights",
                  "example": 2
                },
                "support_bundles": {
                  "description": "Number of support bundle definitions",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "SupportBundles",
                  "example": 1
                },
                "tool_versions": {
                  "description": "Versions of tools used (e.g., helm, kubectl)",
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "x-go-name": "ToolVersions",
                  "example": {
                    "helm": "3.12.0",
                    "kubectl": "1.28.0"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/cliTelemetryStatsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          }
        }
      }
    },
    "/cluster": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/create",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Create a test cluster.",
        "operationId": "createCluster",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CreateClusterParametersBody"
            }
          },
          {
            "type": "boolean",
            "name": "DryRun",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/createClusterDryRunResponse"
          },
          "201": {
            "$ref": "#/responses/createClusterResponse"
          },
          "400": {
            "$ref": "#/responses/createClusterErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/filters": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Get clusters filters.",
        "operationId": "getClusterFilters",
        "responses": {
          "200": {
            "$ref": "#/responses/getClusterFiltersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/quotas": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "List cluster quotas.",
        "operationId": "listClusterQuotas",
        "responses": {
          "200": {
            "$ref": "#/responses/listClusterQuotasResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/stats": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Get clusters stats.",
        "operationId": "getClusterStats",
        "responses": {
          "200": {
            "$ref": "#/responses/getClusterStatsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/versions": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "List cluster versions.",
        "operationId": "listClusterVersions",
        "responses": {
          "200": {
            "$ref": "#/responses/listClusterVersionsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Get the details for a test cluster.",
        "operationId": "getCluster",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getClusterResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Delete a test cluster.",
        "operationId": "deleteCluster",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteClusterResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/addons": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/addon/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusterAddons"
        ],
        "summary": "Lists addons for all clusters.",
        "operationId": "listClusterAddons",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listClusterAddonsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/addons/objectstore": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/addon/create/objectstore",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusterAddons"
        ],
        "summary": "Adds an object store addon to a cluster.",
        "operationId": "createClusterAddonObjectStore",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "bucket": {
                  "type": "string",
                  "x-go-name": "BucketDeprecated"
                },
                "bucket_prefix": {
                  "type": "string",
                  "x-go-name": "BucketPrefix"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createClusterAddonObjectStoreResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/addons/{addon_id}": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/addon/[:addonid]/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusterAddons"
        ],
        "summary": "Deletes an addon from a cluster.",
        "operationId": "deleteClusterAddon",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "AddonID",
            "description": "Cluster addon identifier",
            "name": "addon_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/kubeconfig": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/kubeconfig",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Get the kubeconfig for a test cluster.",
        "operationId": "getClusterKubeconfig",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getClusterKubeconfigResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/nodegroup/{nodegroup_id}": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/nodegroup",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Update a nodegroup for a cluster.",
        "operationId": "updateClusterNodegroup",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "NodegroupID",
            "description": "Nodegroup identifier",
            "name": "nodegroup_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "count": {
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "Count"
                },
                "maxCount": {
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "MaxCount"
                },
                "minCount": {
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "MinCount"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateClusterNodegroupResponse"
          },
          "400": {
            "$ref": "#/responses/updateClusterNodegroupErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/port": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/port/expose",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Exposes a port on a cluster.",
        "operationId": "createClusterPort",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "port",
                "protocols"
              ],
              "properties": {
                "is_wildcard": {
                  "description": "IsWildcard",
                  "type": "boolean",
                  "x-go-name": "IsWildcard"
                },
                "port": {
                  "description": "Port Number",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "Port"
                },
                "protocols": {
                  "description": "Protocols",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/PortProtocol"
                  },
                  "x-go-name": "Protocols"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createClusterPortResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/port/{port_number}": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/port/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Deletes a port from a cluster.",
        "operationId": "deleteClusterPort",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "PortNumber",
            "description": "Port Number",
            "name": "port_number",
            "in": "path",
            "required": true
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "Protocols",
            "description": "Protocols",
            "name": "protocols",
            "in": "query",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteClusterPortResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/ports": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/port/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Lists ports for a cluster.",
        "operationId": "listClusterPorts",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listClusterPortsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/tags": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/tag/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Update the tags for a cluster.",
        "operationId": "updateClusterTags",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "tags": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Tag"
                  },
                  "x-go-name": "Tags"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/updateClusterTagsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/ttl": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/ttl/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Update ttl for a cluster.",
        "operationId": "updateClusterTTL",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "ttl": {
                  "type": "string",
                  "x-go-name": "TTL"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateClusterTTLResponse"
          },
          "400": {
            "$ref": "#/responses/updateClusterTTLErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cluster/{cluster_id}/upgrade": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/[:clusterid]/upgrade",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Upgrade a test cluster.",
        "operationId": "upgradeCluster",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ClusterID",
            "description": "Cluster identifier",
            "name": "cluster_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "kubernetes_version": {
                  "type": "string",
                  "x-go-name": "KubernetesVersion"
                }
              }
            }
          },
          {
            "type": "boolean",
            "name": "DryRun",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/upgradeClusterResponse"
          },
          "400": {
            "$ref": "#/responses/upgradeClusterValidationErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/clusters": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "List test clusters.",
        "operationId": "listClusters",
        "parameters": [
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "ShowTerminated",
            "name": "show-terminated",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "StartTimeStr",
            "description": "Specify a start time in the format \"YYYY-MM-DDTHH:MM:SSZ\".",
            "name": "start-time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "EndTimeStr",
            "description": "Specify an end time in the format \"YYYY-MM-DDTHH:MM:SSZ\".",
            "name": "end-time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "ActorFilter",
            "description": "Filter clusters by actor type or name, e.g. \"user\" or \"Replicated CLI\".",
            "name": "actor-filter",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "TagFilter",
            "description": "Filter clusters by tag, e.g. \"tag1=value1\".",
            "name": "tag-filter",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "TagSortKey",
            "description": "Sort clusters by a specific key, e.g. \"terminated_at\" would sort by\ntermination time.",
            "name": "tag-sort-key",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listClustersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cmx/credits/buy": {
      "post": {
        "description": "Start the process of adding credits to a team. This generally\ncredits a stripe checkout session",
        "tags": [
          "clusters"
        ],
        "summary": "Add credits to a team.",
        "operationId": "addClusterCredits",
        "responses": {
          "200": {
            "$ref": "#/responses/increaseClusterCreditsResponse"
          },
          "400": {
            "$ref": "#/responses/increaseClusterCreditsErrorResponse"
          },
          "500": {
            "$ref": "#/responses/increaseClusterCreditsErrorResponse"
          }
        }
      }
    },
    "/cmx/history": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "List CMX usage history for both VMs and clusters.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "cmx"
        ],
        "summary": "List CMX usage history.",
        "operationId": "listCMXHistory",
        "parameters": [
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "StartTimeStr",
            "description": "Specify a start time in the format \"YYYY-MM-DDTHH:MM:SSZ\".",
            "name": "start-time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "EndTimeStr",
            "description": "Specify an end time in the format \"YYYY-MM-DDTHH:MM:SSZ\".",
            "name": "end-time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "ActorFilter",
            "description": "Filter history by actor type or name, e.g. \"user\" or \"Replicated CLI\".",
            "name": "actor-filter",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "TagFilter",
            "description": "Filter history by tag, e.g. \"tag1=value1\".",
            "name": "tag-filter",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "TagSortKey",
            "description": "Sort history by a specific key, e.g. \"terminated_at\" would sort by\ntermination time.",
            "name": "tag-sort-key",
            "in": "query"
          },
          {
            "enum": [
              "kubernetes",
              "vm"
            ],
            "type": "string",
            "x-go-name": "DistributionType",
            "description": "Filter by distribution type",
            "name": "distribution-type",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "TotalOnly",
            "description": "Only return the total count of items.  Supports filtering using other parameters.",
            "name": "count-only",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listCMXHistoryResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cmx/quotas": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "cmx"
        ],
        "summary": "List CMX quotas.",
        "operationId": "listCMXQuotas",
        "responses": {
          "200": {
            "$ref": "#/responses/listCMXQuotasResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cmx/quotas/increase": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/increase-quota",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "clusters"
        ],
        "summary": "Send a request to increase cluster quota.",
        "operationId": "increaseClusterQuota",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "requests": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/IncreaseQuotaRequest"
                  },
                  "x-go-name": "Requests"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/increaseClusterQuotaResponse"
          },
          "400": {
            "$ref": "#/responses/increaseClusterQuotaErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cmx/stats": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/cluster/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "cmx"
        ],
        "summary": "Get CMX usage stats.",
        "operationId": "getCMXStats",
        "responses": {
          "200": {
            "$ref": "#/responses/getCMXStatsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/cmx/user/public-keys": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns all SSH public keys associated with the authenticated user in their team.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "cmx"
        ],
        "summary": "Get public keys for the authenticated user.",
        "operationId": "getUserPublicKeys",
        "responses": {
          "200": {
            "$ref": "#/responses/getUserPublicKeysResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          }
        }
      },
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Adds an SSH public key associated with the authenticated user in their team.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "cmx"
        ],
        "summary": "Add a public key for the authenticated user.",
        "operationId": "addUserPublicKey",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "public_key",
                "user_id"
              ],
              "properties": {
                "public_key": {
                  "description": "SSH public key to add",
                  "type": "string",
                  "x-go-name": "PublicKey"
                },
                "user_id": {
                  "description": "GitHub username or identifier for the public key",
                  "type": "string",
                  "x-go-name": "UserID"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/addUserPublicKeyResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          }
        }
      }
    },
    "/cmx/user/public-keys/{user_id}/{fingerprint}": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Deletes an SSH public key associated with the authenticated user in their team.\nSynced keys (from GitHub) cannot be deleted.",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "cmx"
        ],
        "summary": "Delete a public key for the authenticated user.",
        "operationId": "deleteUserPublicKey",
        "parameters": [
          {
            "type": "string",
            "description": "The user ID (GitHub username or identifier) associated with the public key",
            "name": "user_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "The SHA256 fingerprint of the public key to delete",
            "name": "fingerprint",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteUserPublicKeyResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customer": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Create a new customer and license for a specified app, with options for channel assignment, license type, expiration, and feature flags.\nThe created customer will be available for management and download.\n\nRequired RBAC Policy: kots/app/[:appid]/license/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Create a KOTS customer.",
        "operationId": "createCustomer",
        "parameters": [
          {
            "description": "Customer create parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "name",
                "app_id"
              ],
              "properties": {
                "app_id": {
                  "description": "App to which the customer is associated.",
                  "type": "string",
                  "x-go-name": "AppID"
                },
                "channel_id": {
                  "description": "Channel to which the customer license is associated. This is the default channel for the customer.",
                  "type": "string",
                  "x-go-name": "ChannelID"
                },
                "custom_id": {
                  "description": "Custom ID that can be used in external systems.",
                  "type": "string",
                  "x-go-name": "CustomID"
                },
                "email": {
                  "description": "Email address of the customer that is to be created",
                  "type": "string",
                  "x-go-name": "Email"
                },
                "entitlementValues": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/EntitlementValue"
                  },
                  "x-go-name": "EntitlementValues"
                },
                "expires_at": {
                  "type": "string",
                  "x-go-name": "ExpiresAtStr"
                },
                "is_airgap_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsAirgapEnabled"
                },
                "is_dev_mode_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsDevModeEnabled"
                },
                "is_disaster_recovery_supported": {
                  "type": "boolean",
                  "x-go-name": "IsDisasterRecoverySupported"
                },
                "is_embedded_cluster_download_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEmbeddedClusterDownloadEnabled"
                },
                "is_embedded_cluster_multinode_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEmbeddedClusterMultiNodeEnabled"
                },
                "is_geoaxis_supported": {
                  "type": "boolean",
                  "x-go-name": "IsGeoaxisSupported"
                },
                "is_gitops_supported": {
                  "type": "boolean",
                  "x-go-name": "IsGitopsSupported"
                },
                "is_helm_airgap_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsHelmAirgapEnabled"
                },
                "is_helm_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsHelmInstallEnabled"
                },
                "is_identity_service_supported": {
                  "type": "boolean",
                  "x-go-name": "IsIdentityServiceSupported"
                },
                "is_installer_support_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsInstallerSupportEnabled"
                },
                "is_kots_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsKotsInstallEnabled"
                },
                "is_kurl_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsKurlInstallEnabled"
                },
                "is_snapshot_supported": {
                  "type": "boolean",
                  "x-go-name": "IsSnapshotSupported"
                },
                "is_support_bundle_upload_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsSupportBundleUploadEnabled"
                },
                "name": {
                  "description": "Name of the customer that is to be created.",
                  "type": "string",
                  "x-go-name": "Name"
                },
                "saml_allowed": {
                  "description": "SAML configuration - vendors can enable/disable SAML for customers\nCustomers configure their IdP details via market-api",
                  "type": "boolean",
                  "x-go-name": "SamlAllowed"
                },
                "type": {
                  "$ref": "#/definitions/LicenseType"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/getCustomerResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/customer-entitlements/{customer_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the entitlement values for a specific customer and app, including all custom and default entitlements assigned to the customer.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Get customer entitlements.",
        "operationId": "getCustomerEntitlements",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerEntitlementsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customer/{customer_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the details of a specific customer, including metadata, license, and instance information.\nOptionally, channel details can be excluded from the response.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Get a customer.",
        "operationId": "getCustomer",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Update the details, license, and channel assignments for an existing customer.\nSupports changing metadata, license type, expiration, entitlements, and feature flags.\nParameters that are not provided are reset to default values.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Update a customer.",
        "operationId": "updateCustomer",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Update customer parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "name",
                "app_id"
              ],
              "properties": {
                "app_id": {
                  "description": "App to which the channel is associated.",
                  "type": "string",
                  "x-go-name": "AppID"
                },
                "channel_id": {
                  "description": "The channel id to which the customer is associated. This is the default channel for the customer.",
                  "type": "string",
                  "x-go-name": "ChannelID"
                },
                "custom_id": {
                  "description": "Custom ID that can be used in external systems.",
                  "type": "string",
                  "x-go-name": "CustomID"
                },
                "email": {
                  "description": "Email of the customer that is to be updated",
                  "type": "string",
                  "x-go-name": "Email"
                },
                "entitlementValues": {
                  "description": "Applies only to the currently selected app",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/EntitlementValue"
                  },
                  "x-go-name": "EntitlementValues"
                },
                "expires_at": {
                  "description": "Format is YYYY-MM-DD, e.g. 2021-02-24",
                  "type": "string",
                  "x-go-name": "ExpiresAtStr"
                },
                "is_airgap_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsAirgapEnabled"
                },
                "is_dev_mode_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsDevModeEnabled"
                },
                "is_disaster_recovery_supported": {
                  "type": "boolean",
                  "x-go-name": "IsDisasterRecoverySupported"
                },
                "is_embedded_cluster_download_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEmbeddedClusterDownloadEnabled"
                },
                "is_embedded_cluster_multinode_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEmbeddedClusterMultiNodeEnabled"
                },
                "is_enterprise_portal_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEnterprisePortalEnabled"
                },
                "is_geoaxis_supported": {
                  "type": "boolean",
                  "x-go-name": "IsGeoaxisSupported"
                },
                "is_gitops_supported": {
                  "type": "boolean",
                  "x-go-name": "IsGitopsSupported"
                },
                "is_helm_airgap_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsHelmAirgapEnabled"
                },
                "is_helm_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsHelmInstallEnabled"
                },
                "is_identity_service_supported": {
                  "type": "boolean",
                  "x-go-name": "IsIdentityServiceSupported"
                },
                "is_kots_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsKotsInstallEnabled"
                },
                "is_kurl_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsKurlInstallEnabled"
                },
                "is_snapshot_supported": {
                  "type": "boolean",
                  "x-go-name": "IsSnapshotSupported"
                },
                "is_support_bundle_upload_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsSupportBundleUploadEnabled"
                },
                "name": {
                  "description": "Name of the customer that is to be updated.",
                  "type": "string",
                  "x-go-name": "Name"
                },
                "saml_allowed": {
                  "description": "SAML configuration - vendors can enable/disable SAML for customers\nCustomers configure their IdP details via market-api",
                  "type": "boolean",
                  "x-go-name": "SamlAllowed"
                },
                "type": {
                  "$ref": "#/definitions/LicenseType"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Permanently delete a customer, removing all their data including licenses and access to associated resources.\nThis action is irreversible. For temporary deactivation, use the archive endpoint instead.\n\nSafety Restriction: Only development customers (type: \"dev\") can be deleted.\nAttempting to delete customers of other types (prod, trial, community, test) will return a 400 Bad Request error.\n\nRequired RBAC Policy: kots/license/[:customerid]/delete\nand kots/app/[:appid]/license/[:customerid]/delete",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Delete a customer.",
        "operationId": "deleteCustomer",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "patch": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Apply partial updates to a customer's details, license, channels, and entitlements.\nOnly the fields provided in the request body will be updated.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Patch a customer.",
        "operationId": "patchCustomer",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Patch customer parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "add_channels": {
                  "description": "Channels this customer will be assigned to.",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CustomerChannel"
                  },
                  "x-go-name": "AddChannels"
                },
                "add_entitlements": {
                  "description": "List of entitlements to add for the customer.",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CustomerEntitlement"
                  },
                  "x-go-name": "AddEntitlements"
                },
                "custom_id": {
                  "description": "Custom ID that can be used in external systems.",
                  "type": "string",
                  "x-go-name": "CustomID"
                },
                "email": {
                  "description": "Email of the customer that is to be updated",
                  "type": "string",
                  "x-go-name": "Email"
                },
                "expires_at": {
                  "description": "Format is YYYY-MM-DD, e.g. 2021-02-24",
                  "type": "string",
                  "x-go-name": "ExpiresAtStr"
                },
                "is_airgap_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsAirgapEnabled"
                },
                "is_dev_mode_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsDevModeEnabled"
                },
                "is_disaster_recovery_supported": {
                  "type": "boolean",
                  "x-go-name": "IsDisasterRecoverySupported"
                },
                "is_embedded_cluster_download_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEmbeddedClusterDownloadEnabled"
                },
                "is_embedded_cluster_multinode_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEmbeddedClusterMultiNodeEnabled"
                },
                "is_enterprise_portal_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsEnterprisePortalEnabled"
                },
                "is_geoaxis_supported": {
                  "type": "boolean",
                  "x-go-name": "IsGeoaxisSupported"
                },
                "is_gitops_supported": {
                  "type": "boolean",
                  "x-go-name": "IsGitopsSupported"
                },
                "is_helm_airgap_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsHelmAirgapEnabled"
                },
                "is_helm_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsHelmInstallEnabled"
                },
                "is_identity_service_supported": {
                  "type": "boolean",
                  "x-go-name": "IsIdentityServiceSupported"
                },
                "is_kots_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsKotsInstallEnabled"
                },
                "is_kurl_install_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsKurlInstallEnabled"
                },
                "is_security_center_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsSecurityCenterEnabled"
                },
                "is_snapshot_supported": {
                  "type": "boolean",
                  "x-go-name": "IsSnapshotSupported"
                },
                "is_support_bundle_upload_enabled": {
                  "type": "boolean",
                  "x-go-name": "IsSupportBundleUploadEnabled"
                },
                "name": {
                  "description": "Name of the customer that is to be updated.",
                  "type": "string",
                  "x-go-name": "Name"
                },
                "remove_channels": {
                  "description": "Channels this customer will be removed from.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "RemoveChannels"
                },
                "remove_entitlements": {
                  "description": "List of entitlement names to remove from the customer. Default values will be used.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "RemoveEntitlements"
                },
                "remove_expires_at": {
                  "type": "boolean",
                  "x-go-name": "RemoveExpiresAt"
                },
                "saml_allowed": {
                  "description": "SAML configuration - vendors can enable/disable SAML for customers",
                  "type": "boolean",
                  "x-go-name": "SamlAllowed"
                },
                "type": {
                  "$ref": "#/definitions/LicenseType"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getCustomerResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customer/{customer_id}/airgap/password": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Generate a new password (or set a provided one) for accessing the customer's airgap download portal.\n\nRequired RBAC Policy: kots/license/[:licenseid]/airgap/password",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Regenerate the airgap password used to access the customer's download portal.",
        "operationId": "postAirgapPassword",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "password": {
                  "type": "string",
                  "x-go-name": "Password"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/postAirgapPasswordResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customer/{customer_id}/archive": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Deactivate a customer, revoking their license and access to associated resources.\nUseful for offboarding or suspending customers without deleting their data.\n\nRequired RBAC Policy: kots/license/[:customerid]/archive\nand kots/app/[:appid]/license/[:customerid]/archive",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Archive a customer.",
        "operationId": "archiveCustomer",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customer/{customer_id}/unarchive": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Restore a previously archived customer, making their license and associated data active again.\nUseful for re-enabling access for customers who were previously deactivated.\n\nRequired RBAC Policy: kots/license/[:customerid]/unarchive\nand kots/app/[:appid]/license/[:customerid]/unarchive",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Unarchive a customer.",
        "operationId": "unarchiveCustomer",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "CustomerID",
            "description": "Customer identifier",
            "name": "customer_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customers": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a paginated list of all customers accessible to the team, with optional filtering and sorting.\nIncludes metadata and license information for each customer.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "List all customers.",
        "operationId": "listCustomers",
        "parameters": [
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "boolean",
            "name": "IncludeTest",
            "in": "query"
          },
          {
            "type": "string",
            "format": "date-time",
            "name": "ExpiresBefore",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listCustomersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/customers/search": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Search for customers within a team using flexible query parameters, including name, type, channel, and status.\nSupports pagination, sorting, and filtering by customer attributes.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "customers"
        ],
        "summary": "Search all customers for a given team context.",
        "operationId": "searchTeamCustomers",
        "parameters": [
          {
            "description": "Search customers parameters.\nAt least one of the following flags is **required**: `include_inactive`, `include_active`.\nAt least one of the following flags is **required**: `include_dev`, `include_trial`, `include_paid`, `include_community`, `include_test`.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "adoption_rate_filter": {
                  "type": "string",
                  "x-go-name": "AdoptionRateFilter"
                },
                "app_id": {
                  "description": "The app id to limit search. If not provided, customers for all apps will be searched.",
                  "type": "string",
                  "x-go-name": "AppID"
                },
                "channel_names": {
                  "description": "Restrict search to customers in the specified channels.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "ChannelNames"
                },
                "expires_before": {
                  "type": "string",
                  "format": "date-time",
                  "x-go-name": "ExpiresBefore"
                },
                "include_active": {
                  "description": "When set to true, active customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeActive"
                },
                "include_archived": {
                  "description": "When set to true, archived customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeArchived"
                },
                "include_community": {
                  "description": "When set to true, community customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeCommunity"
                },
                "include_dev": {
                  "description": "When set to true, dev customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeDev"
                },
                "include_inactive": {
                  "description": "When set to true, inactive customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeInactive"
                },
                "include_paid": {
                  "description": "When set to true, paid customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludePaid"
                },
                "include_test": {
                  "description": "When set to true, test customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeTest"
                },
                "include_trial": {
                  "description": "When set to true, trial customers will be included in the search results. Default is false.",
                  "type": "boolean",
                  "x-go-name": "IncludeTrial"
                },
                "instance_preview": {
                  "description": "When set to true, more detailed information for active and inactive customer instances will be provided in the search results. If false, active and inactive instances will be combined into a single list. Default is false.",
                  "type": "boolean",
                  "x-go-name": "InstancePreview"
                },
                "license_or_service_account": {
                  "description": "Search by license ID or Enterprise Portal service account token.\nWhen provided, this will find the specific customer associated with the license ID or service account token.\nThis field accepts both actual license IDs and Enterprise Portal service account tokens as license substitutes.",
                  "type": "string",
                  "x-go-name": "LicenseOrServiceAccount"
                },
                "max_instances": {
                  "description": "The maximum number of instances to return for each customer. Default is 3.",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "MaxInstances"
                },
                "offset": {
                  "description": "The number of pages to skip.",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "Offset"
                },
                "page_size": {
                  "description": "The number of customers to return per page.",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "PageSize"
                },
                "query": {
                  "description": "The search query.\nBy default this value will be used to search customers by name.\nWhen value is in the key:value format, it can be used to search specific fields.\nThe following fields are supported.\n`name`: search by customer name. For example name:acme. This search is fuzzy and case insensitive.\n`type`: search by customer type. Possible values are prod, trial, dev, and community. For example type:trial.\n`airgap`: search by airgap status. Possible values are true and false. For example airgap:true.\n`channels`.name: search by channel name. For example channels.name:stable. This search is fuzzy and case insensitive.\n`customId`: search by custom id. For example customId:123. This is an exact match search.\n`email`: search by customer email. For example email:bob@replicated.com. This is an exact match search.",
                  "type": "string",
                  "x-go-name": "Query"
                },
                "sort_direction": {
                  "description": "The sort direction. Possible values are `asc` and `desc`. Default is `desc` if `sort_field` is specified.",
                  "type": "string",
                  "x-go-name": "SortDirection"
                },
                "sort_field": {
                  "description": "The field to sort by. Possible values are `expiresAt`, `createdAt`, `name`, `type`. There is no default value.",
                  "type": "string",
                  "x-go-name": "SortField"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/searchTeamCustomersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          }
        }
      }
    },
    "/external_registries": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "List external registries for a team.",
        "operationId": "listExternalRegistries",
        "responses": {
          "200": {
            "$ref": "#/responses/listExternalRegistriesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/external_registry": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "Creates an external registry with the specified parameters.",
        "operationId": "createExternalRegistry",
        "parameters": [
          {
            "description": "ExternalRegistry create parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "endpoint",
                "username",
                "password"
              ],
              "properties": {
                "appIds": {
                  "description": "AppIds is a list of app IDs that can access this registry. If null or empty, registry is shared across all apps. (optional)",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "AppIds"
                },
                "authType": {
                  "description": "Auth type for the upstream registry (optional)",
                  "type": "string",
                  "x-go-name": "AuthType"
                },
                "copyPassword": {
                  "description": "CopyPassword flag to indicate if password should be copied from original registry (optional)",
                  "type": "boolean",
                  "x-go-name": "CopyPassword"
                },
                "endpoint": {
                  "description": "Endpoint of the upstream registry.",
                  "type": "string",
                  "x-go-name": "Endpoint"
                },
                "originalSlug": {
                  "description": "OriginalSlug is used when duplicating a registry to copy passwords if they're unchanged (optional)",
                  "type": "string",
                  "x-go-name": "OriginalSlug"
                },
                "password": {
                  "description": "Password for authentication with the upstream registry.",
                  "type": "string",
                  "x-go-name": "Password"
                },
                "provider": {
                  "description": "Provider of the upstream registry. (optional)",
                  "type": "string",
                  "x-go-name": "Provider"
                },
                "skipValidation": {
                  "description": "SkipValidation just saves the values without checking if the registry is valid.",
                  "type": "boolean",
                  "x-go-name": "SkipValidation"
                },
                "slug": {
                  "description": "Slug (registry name) for the upstream registry. If not provided, the endpoint will be used as the slug. (optional)",
                  "type": "string",
                  "x-go-name": "Slug"
                },
                "username": {
                  "description": "Username for authentication with the upstream registry.",
                  "type": "string",
                  "x-go-name": "Username"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createExternalRegistryResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/external_registry/iam": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "Get team OIDC IAM configuration for ECR.",
        "operationId": "getECRIAMConfig",
        "responses": {
          "200": {
            "$ref": "#/responses/getECRIAMConfigResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/external_registry/logs": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/logs/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "Get the logs for a specific external registry either by endpoint or slug, or both.",
        "operationId": "externalRegistryLogs",
        "parameters": [
          {
            "type": "string",
            "description": "The endpoint of the external registry to get logs for",
            "name": "Endpoint",
            "in": "query"
          },
          {
            "type": "string",
            "description": "The slug of the external registry to get logs for",
            "name": "Slug",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/externalRegistryLogsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/external_registry/test": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/test",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "Test external registry for a team.",
        "operationId": "testExternalRegistry",
        "parameters": [
          {
            "description": "ExternalRegistry create parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "endpoint",
                "image"
              ],
              "properties": {
                "authType": {
                  "description": "Auth type for the registry (optional)",
                  "type": "string",
                  "x-go-name": "AuthType"
                },
                "copyPassword": {
                  "description": "Whether to copy password from original registry when testing",
                  "type": "boolean",
                  "x-go-name": "CopyPassword"
                },
                "endpoint": {
                  "description": "Endpoint of the external registry.",
                  "type": "string",
                  "x-go-name": "Endpoint"
                },
                "image": {
                  "description": "Image to test pulling.",
                  "type": "string",
                  "x-go-name": "Image"
                },
                "originalSlug": {
                  "description": "Original registry slug to copy password from when testing during duplication",
                  "type": "string",
                  "x-go-name": "OriginalSlug"
                },
                "password": {
                  "description": "Password to use, provide only when testing before saving",
                  "type": "string",
                  "x-go-name": "Password"
                },
                "slug": {
                  "description": "Slug of the external registry.\nWill default to the endpoint if not provided.",
                  "type": "string",
                  "x-go-name": "Slug"
                },
                "username": {
                  "description": "Username to use, provide only when testing before saving",
                  "type": "string",
                  "x-go-name": "Username"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/testExternalRegistryResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/external_registry/{slug}": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "Updates an external registry with the specified parameters.",
        "operationId": "updateExternalRegistry",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "Slug",
            "description": "Registry slug - can not be changed",
            "name": "slug",
            "in": "path",
            "required": true
          },
          {
            "description": "ExternalRegistry update parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "appIds": {
                  "description": "AppIds is a list of app IDs that can access this registry.\nIf null/omitted, existing appIds are preserved\nIf empty array [], registry becomes shared across all apps\nIf contains values, registry is scoped to those apps (optional)",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "AppIds"
                },
                "authType": {
                  "description": "Authentication type for the registry (e.g., \"password\", \"token\"). (optional)",
                  "type": "string",
                  "x-go-name": "AuthType"
                },
                "endpoint": {
                  "description": "Endpoint of the external registry. (optional)",
                  "type": "string",
                  "x-go-name": "Endpoint"
                },
                "password": {
                  "description": "Password for authentication with the upstream registry. (optional)",
                  "type": "string",
                  "x-go-name": "Password"
                },
                "provider": {
                  "description": "Provider of the external registry (e.g., \"dockerhub\", \"gcr\", \"ecr\", etc.). (optional)",
                  "type": "string",
                  "x-go-name": "Provider"
                },
                "username": {
                  "description": "Username for authentication with the upstream registry. (optional)",
                  "type": "string",
                  "x-go-name": "Username"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateExternalRegistryResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/externalregistry/[:slug]/delete",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "externalRegistries"
        ],
        "summary": "Deletes an external registry by slug.",
        "operationId": "deleteExternalRegistry",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "Slug",
            "description": "Slug identifier",
            "name": "slug",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/instance/{instance_id}/archive": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Deactivate a customer instance, making it inactive and unavailable for future use.\nOnly development, airgap, or inactive instances can be archived.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Archive an instance.",
        "operationId": "archiveCustomerInstance",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Optional cluster identifier to disambiguate instance_id",
            "name": "ClusterID",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/archiveCustomerInstanceResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/instance/{instance_id}/unarchive": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Restore a previously archived customer instance, making it active and available for use again.\n\nRequired RBAC Policy: kots/app/[:appid]/license/[:licenseid]/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "instances"
        ],
        "summary": "Unarchive an instance.",
        "operationId": "unarchiveCustomerInstance",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "InstanceID",
            "description": "Instance identifier",
            "name": "instance_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "description": "Optional cluster identifier to disambiguate instance_id",
            "name": "ClusterID",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/unarchiveCustomerInstanceResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/network/{network_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "The resources field contains a historical list of all clusters and VMs that have ever been\nassociated with this network. Resources remain in the list even after deletion to preserve\nhistory for network report correlation.\n\nRequired RBAC Policy: kots/network/[:clusterid]",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "networks"
        ],
        "summary": "Get the details for a test network.",
        "operationId": "getNetwork",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "NetworkID",
            "description": "Network identifier",
            "name": "network_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getNetworkResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/network/{network_id}/update": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/network/[:networkid]/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "networks"
        ],
        "summary": "Update network settings (policy and/or collect report).",
        "operationId": "updateNetwork",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "NetworkID",
            "description": "Network identifier",
            "name": "network_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "policy": {
                  "type": "string",
                  "x-go-name": "Policy"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateNetworkResponse"
          },
          "400": {
            "$ref": "#/responses/updateNetworkErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/networks": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Each network includes a resources field containing a historical list of all clusters and VMs\nthat have ever been associated with the network. Resources remain in the list even after\ndeletion to preserve history for network report correlation.\n\nRequired RBAC Policy: kots/network/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "networks"
        ],
        "summary": "List test networks.",
        "operationId": "listNetworks",
        "parameters": [
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SortColumn",
            "description": "Sort column",
            "name": "sortColumn",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "SortDesc",
            "description": "Sort descending",
            "name": "sortDesc",
            "in": "query"
          },
          {
            "type": "boolean",
            "x-go-name": "ShowTerminated",
            "description": "Show terminated networks",
            "name": "show-terminated",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "TerminatedFilter",
            "description": "Filter terminated networks. Allowed values: \"all\" (default, no filter) or\n\"with-report\" (only include terminated networks that have a report).",
            "name": "terminated-filter",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "StartTimeStr",
            "description": "Specify a start time in the format \"YYYY-MM-DDTHH:MM:SSZ\"",
            "name": "start-time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "EndTimeStr",
            "description": "Specify an end time in the format \"YYYY-MM-DDTHH:MM:SSZ\"",
            "name": "end-time",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listNetworksResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/notification_email/resend_verification": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Resend verification email for an unverified email address.",
        "operationId": "resendVerificationEmail",
        "parameters": [
          {
            "description": "Email address to resend verification for",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "emailAddress": {
                  "type": "string",
                  "x-go-name": "EmailAddress"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/resendVerificationEmail"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/notification_email/verify": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Verify an email address using a verification code.",
        "operationId": "verifyEmail",
        "parameters": [
          {
            "description": "Email address and verification code to verify",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "emailAddress": {
                  "type": "string",
                  "x-go-name": "EmailAddress"
                },
                "verificationCode": {
                  "type": "string",
                  "x-go-name": "VerificationCode"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/verifyEmail"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/notification_event/{event_id}/retry": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Immediately retry a failed notification event, including permanently failed events.\n\nRequired RBAC Policy: team/[:teamid]/notification/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Retry a notification event.",
        "operationId": "retryNotificationEvent",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "EventID",
            "description": "Event identifier",
            "name": "event_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/responseOk"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/notification_event_types": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/types/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Search notification event types.",
        "operationId": "searchNotificationEventTypes",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "Q",
            "description": "Search query matching key, display name, description, or category.",
            "name": "q",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Limit",
            "description": "Optional maximum number of results to return. Must be between 1 and 100.",
            "name": "limit",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/searchNotificationEventTypesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/notification_events": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/events/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "List team notification delivery events.",
        "operationId": "listNotificationEvents",
        "parameters": [
          {
            "type": "integer",
            "format": "int64",
            "default": 20,
            "x-go-name": "PageSize",
            "description": "Page size",
            "name": "pageSize",
            "in": "query"
          },
          {
            "type": "integer",
            "format": "int64",
            "x-go-name": "CurrentPage",
            "description": "Current page",
            "name": "currentPage",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "Type",
            "description": "Filter by type prefix (e.g. customer., instance., release.)",
            "name": "type",
            "in": "query"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "EventTypes",
            "description": "Filter by event types",
            "name": "event_types",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SubscriptionID",
            "description": "Filter by subscription ID",
            "name": "subscription_id",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "SubscriptionType",
            "description": "Filter by subscription type: \"personal\" shows only the current user's events, \"team\" shows all team events",
            "name": "subscription_type",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "StartTimeStr",
            "description": "Filter events after this time (ISO 8601 format)",
            "name": "start_time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "EndTimeStr",
            "description": "Filter events before this time (ISO 8601 format)",
            "name": "end_time",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "Search",
            "description": "Search term to filter events by content",
            "name": "search",
            "in": "query"
          },
          {
            "type": "string",
            "x-go-name": "Status",
            "description": "Filter by computed status: success, pending, or failed",
            "name": "status",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listNotificationEventsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/notification_subscription": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Create a new notification subscription.\nNote: The webhook secret is stored but never returned in API responses for security.",
        "operationId": "createNotificationSubscription",
        "parameters": [
          {
            "description": "Create notification subscription parameters",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "customHeaders": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CustomHeaderInput"
                  },
                  "x-go-name": "CustomHeaders"
                },
                "emailAddress": {
                  "type": "string",
                  "x-go-name": "EmailAddress"
                },
                "eventConfigs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/NotificationEventConfig"
                  },
                  "x-go-name": "EventConfigs"
                },
                "events": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "Events"
                },
                "failureContact": {
                  "type": "string",
                  "x-go-name": "FailureContact"
                },
                "isEnabled": {
                  "type": "boolean",
                  "x-go-name": "IsEnabled"
                },
                "name": {
                  "type": "string",
                  "x-go-name": "Name"
                },
                "webhookSecret": {
                  "type": "string",
                  "x-go-name": "WebhookSecret"
                },
                "webhookUrl": {
                  "type": "string",
                  "x-go-name": "WebhookURL"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createNotificationSubscription"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/notification_subscription/{id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Retrieve a single notification subscription.",
        "operationId": "getNotificationSubscription",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ID",
            "description": "Notification subscription ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getNotificationSubscription"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Update a notification subscription.",
        "operationId": "updateNotificationSubscription",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ID",
            "description": "Notification subscription ID",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "Update notification subscription parameters",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "customHeaders": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CustomHeaderInput"
                  },
                  "x-go-name": "CustomHeaders"
                },
                "emailAddress": {
                  "type": "string",
                  "x-go-name": "EmailAddress"
                },
                "eventConfigs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/NotificationEventConfig"
                  },
                  "x-go-name": "EventConfigs"
                },
                "events": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "Events"
                },
                "failureContact": {
                  "type": "string",
                  "x-go-name": "FailureContact"
                },
                "isEnabled": {
                  "type": "boolean",
                  "x-go-name": "IsEnabled"
                },
                "name": {
                  "type": "string",
                  "x-go-name": "Name"
                },
                "webhookSecret": {
                  "type": "string",
                  "x-go-name": "WebhookSecret"
                },
                "webhookUrl": {
                  "type": "string",
                  "x-go-name": "WebhookURL"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateNotificationSubscription"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Remove a notification subscription.",
        "operationId": "deleteNotificationSubscription",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ID",
            "description": "Notification subscription ID",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/notification_subscription/{id}/events": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "List all events for a notification subscription.",
        "operationId": "listNotificationSubscriptionEvents",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "ID",
            "description": "The ID of the notification subscription",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listNotificationSubscriptionEvents"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/notification_subscriptions": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "List all notification subscriptions for the current team.",
        "operationId": "listNotificationSubscriptions",
        "responses": {
          "200": {
            "$ref": "#/responses/listNotificationSubscriptions"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/notification_webhook/test": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/notifications/subscriptions/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "notifications"
        ],
        "summary": "Test a webhook endpoint by sending a sample payload.",
        "operationId": "testWebhook",
        "parameters": [
          {
            "description": "Test webhook parameters",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "customHeaders": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CustomHeaderInput"
                  },
                  "x-go-name": "CustomHeaders"
                },
                "eventType": {
                  "type": "string",
                  "x-go-name": "EventType"
                },
                "webhookSecret": {
                  "type": "string",
                  "x-go-name": "WebhookSecret"
                },
                "webhookUrl": {
                  "type": "string",
                  "x-go-name": "WebhookURL"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/testWebhookResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/policies": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/policy/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "policy"
        ],
        "summary": "List RBAC policies.",
        "operationId": "listPolicies",
        "responses": {
          "200": {
            "$ref": "#/responses/listPoliciesResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/policy": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/policy/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "policy"
        ],
        "summary": "Create a RBAC policy.",
        "operationId": "createPolicy",
        "parameters": [
          {
            "description": "JSON payload",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "name",
                "description",
                "definition"
              ],
              "properties": {
                "definition": {
                  "type": "string",
                  "x-go-name": "Definition"
                },
                "description": {
                  "type": "string",
                  "x-go-name": "Description"
                },
                "name": {
                  "type": "string",
                  "x-go-name": "Name"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/createPolicyResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/policy/{policyId}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/policy/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "policy"
        ],
        "summary": "Get a RBAC policy.",
        "operationId": "getPolicy",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "PolicyId",
            "description": "PolicyID is the ID of the policy to get",
            "name": "policyId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getPolicyResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/policy/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "policy"
        ],
        "summary": "Update a RBAC policy.",
        "operationId": "updatePolicy",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "PolicyID",
            "description": "PolicyID is the ID of the policy to update",
            "name": "policyId",
            "in": "path",
            "required": true
          },
          {
            "description": "Body contains the update payload",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "name",
                "definition"
              ],
              "properties": {
                "definition": {
                  "type": "string",
                  "x-go-name": "Definition"
                },
                "description": {
                  "description": "Optional",
                  "type": "string",
                  "x-go-name": "Description"
                },
                "name": {
                  "type": "string",
                  "x-go-name": "Name"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updatePolicyResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/policy/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "policy"
        ],
        "summary": "Delete a RBAC policy.",
        "operationId": "deletePolicy",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "PolicyID",
            "description": "PolicyID is the ID of the policy to delete",
            "name": "policyId",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/upload-url": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Generate and return a presigned S3 URL for uploading a support bundle, along with a unique bundle ID to reference the upload in subsequent API calls.\n\nRequired RBAC Policy: team/support-issues/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get a presigned S3 support bundle upload URL + bundle ID.",
        "operationId": "getSupportBundleUploadURL",
        "responses": {
          "200": {
            "$ref": "#/responses/getSupportBundleUploadURL"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve the analysis results and metadata for a specific support bundle, including insights, a file tree, and a signed download URI if available.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get support bundle analysis results.",
        "operationId": "getSupportBundle",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getSupportBundle"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Delete a specific support bundle, removing it from the system and revoking access for all teams.\n\nRequired RBAC Policy: team/support-issues/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Delete a support bundle.",
        "operationId": "deleteSupportBundle",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteSupportBundle"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/analyze": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Re-trigger the analysis process for a previously uploaded support bundle.\nThe analysis will process the bundle and generate insights or results that can be retrieved later.\n\nRequired RBAC Policy: team/support-issues/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Trigger analysis of a support bundle.",
        "operationId": "analyzeSupportBundle",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/analyzeSupportBundle"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/download": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Returns a 302 redirect to a presigned S3 download URL for the support bundle.\nPass ?redirect=false to receive the URL as JSON instead of a redirect.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Download a support bundle.",
        "operationId": "downloadSupportBundle",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/downloadSupportBundleURL"
          },
          "302": {
            "description": " Redirect to presigned S3 URL"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/events": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve structured Kubernetes events from the cluster-resources data in a support bundle, with optional filtering by namespace and event type.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read — enforced via getBundleWithAuth",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get parsed Kubernetes events from a support bundle.",
        "operationId": "getEvents",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "The ID or slug of the support bundle.",
            "name": "bundle_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getEvents"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/files": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve specific files from a support bundle, such as logs or configuration files, for further analysis or troubleshooting.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get files from a support bundle.",
        "operationId": "getFiles",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Get files contents from support bundle.",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "filenames"
              ],
              "properties": {
                "filenames": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "Filenames"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getFiles"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/logs/{namespace}/{pod}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve log files for a specific pod from the cluster-resources data in a support bundle.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read — enforced via getBundleWithAuth",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get pod logs from a support bundle.",
        "operationId": "getLogs",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "The ID or slug of the support bundle.",
            "name": "bundle_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "Namespace",
            "description": "The Kubernetes namespace of the pod.",
            "name": "namespace",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "Pod",
            "description": "The name of the pod.",
            "name": "pod",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getLogs"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/name": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Set or clear the display name for a specific support bundle. Pass an empty string to clear the name.\n\nRequired RBAC Policy: team/support-issues/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Update a support bundle name.",
        "operationId": "updateSupportBundleName",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Update support bundle name parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "name": {
                  "description": "New name for the support bundle. Pass an empty string to clear the name.",
                  "type": "string",
                  "x-go-name": "Name"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateSupportBundleName"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/pod": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return details about a specific pod that was running in the cluster at the time the specified support bundle was collected.\nIt includes the pod's definition, events, and a list of containers with paths to their logs.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get details about a single pod running when a support bundle was collected.",
        "operationId": "getPodDetails",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getPodDetails"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/resources/{resource_type}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieve structured Kubernetes resources (pods, deployments, services, etc.) from the cluster-resources data in a support bundle.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read — enforced via getBundleWithAuth",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Get parsed Kubernetes resources from a support bundle.",
        "operationId": "getResources",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "The ID or slug of the support bundle.",
            "name": "bundle_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "ResourceType",
            "description": "The type of Kubernetes resource to retrieve.",
            "name": "resource_type",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getResources"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/share": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Allow the owner of a support bundle to share access with other teams by specifying their team IDs. Passing an empty list will remove all existing shares.\n\nRequired RBAC Policy: team/support-issues/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Share a support bundle with the requested teams.",
        "operationId": "shareSupportBundle",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Share support bundle parameters.",
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "teamIDs": {
                  "description": "Team IDs to share support bundle with. Leave empty to delete existing shares.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "x-go-name": "TeamIDs"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/shareSupportBundle"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundle/{bundle_id}/uploaded": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Mark a support bundle as uploaded using the bundle ID returned from /supportbundle/upload-url after uploading the support bundle to S3.\nIt links the uploaded support bundle to an app and/or a GitHub issue, if provided, and triggers an analysis of the bundle.\n\nRequired RBAC Policy: team/support-issues/write",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "Set that a support bundle has been successfully uploaded.",
        "operationId": "setSupportBundleUploaded",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "BundleID",
            "description": "SupportBundle identifier",
            "name": "bundle_id",
            "in": "path",
            "required": true
          },
          {
            "description": "Support bundle uploaded parameters.",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "required": [
                "app_id"
              ],
              "properties": {
                "app_id": {
                  "description": "ID of the app to link this support bundle to.",
                  "type": "string",
                  "x-go-name": "AppID"
                },
                "issue_url": {
                  "description": "URL of the Github issue to post support bundle analysis to.",
                  "type": "string",
                  "x-go-name": "IssueUrl"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/setSupportBundleUploaded"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/supportbundles": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a list of support bundles accessible to the requesting team, with optional filtering by app, customer, instance, date range or severity.\n\nRequired RBAC Policy: kots/app/[:appid]/supportbundle/read",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "supportBundle"
        ],
        "summary": "List support bundles.",
        "operationId": "supportbundles",
        "responses": {
          "200": {
            "$ref": "#/responses/listSupportBundles"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Get the current team.",
        "operationId": "getTeam",
        "responses": {
          "200": {
            "$ref": "#/responses/getTeamResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/default-app": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/default-app/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Set or clear the team's default application.",
        "operationId": "updateTeamDefaultApp",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "default_app_id": {
                  "type": "string",
                  "x-go-name": "DefaultAppID"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateDefaultAppResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/team/invite": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Creates a new pending invite for the team.\n\nRequired RBAC Policy: team/member/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Create a pending team invite.",
        "operationId": "createInvite",
        "parameters": [
          {
            "description": "The invite creation request body",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string",
                  "x-go-name": "Email"
                },
                "permissions": {
                  "type": "string",
                  "x-go-name": "Permissions"
                },
                "policy_id": {
                  "type": "string",
                  "x-go-name": "PolicyID"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/invite/{email}": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Deletes the pending invite with the given email.\n\nRequired RBAC Policy: team/member/delete",
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Delete a pending team invite.",
        "operationId": "deleteInvite",
        "parameters": [
          {
            "type": "string",
            "description": "The email of the invite to delete",
            "name": "email",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/invite/{id}": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Updates the pending invite with the given ID.\n\nRequired RBAC Policy: team/member/update",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Update a pending team invite.",
        "operationId": "updatePendingInvite",
        "parameters": [
          {
            "type": "string",
            "description": "The ID of the pending invite to update",
            "name": "id",
            "in": "path",
            "required": true
          },
          {
            "description": "The update request body",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UpdateTeamMemberRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/member/{id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Retrieves the team member with the given ID.\n\nRequired RBAC Policy: team/member/read",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Get a team member.",
        "operationId": "getTeamMember",
        "parameters": [
          {
            "type": "string",
            "description": "The ID of the team member to retrieve",
            "name": "id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getTeamMemberResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/members": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Return a list of all team members, with optional inclusion of pending invites.\nMembers are sorted by email address.\n\nRequired RBAC Policy: team/member/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "List team members.",
        "operationId": "listTeamMembers",
        "parameters": [
          {
            "type": "boolean",
            "x-go-name": "IncludeInvites",
            "description": "When set to true, pending invites will be included in the results. Default is false.",
            "name": "includeInvites",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listTeamMembersResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/serviceaccount": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/serviceaccount/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Remove a service account from a team.",
        "operationId": "removeServiceAccount",
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/team/serviceaccounts": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/serviceaccount/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "List service accounts for a team.",
        "operationId": "listServiceAccounts",
        "responses": {
          "200": {
            "$ref": "#/responses/listServiceAccountsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: team/serviceaccount/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "team"
        ],
        "summary": "Create a service account for a team.",
        "operationId": "createTeamServiceAccount",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "Name",
            "description": "Name is the name of the service account to create.",
            "name": "name",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "PolicyID",
            "description": "PolicyID is the ID of the policy to assign to the service account.",
            "name": "policy_id",
            "in": "query",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "Permissions",
            "description": "Permissions is whether the service account is read-only or not. Any value besides \"read-only\" will be treated as \"read-write\".\nOptional.",
            "name": "permissions",
            "in": "query"
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createTeamServiceAccountResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/user/token": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: user/token/create",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "user"
        ],
        "summary": "Create an API token for the current user.",
        "operationId": "createUserApiToken",
        "parameters": [
          {
            "description": "The API token creation request body",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateUserApiTokenRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createUserApiTokenResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: user/token/delete",
        "consumes": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "user"
        ],
        "summary": "Remove a user API token by name (body param).",
        "operationId": "removeUserApiToken",
        "parameters": [
          {
            "description": "The API token removal request body",
            "name": "Body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RemoveApiTokenRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/user/tokens": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: user/token/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "user"
        ],
        "summary": "List API tokens for the current user.",
        "operationId": "listUserApiTokens",
        "responses": {
          "200": {
            "$ref": "#/responses/listUserApiTokensResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          }
        }
      }
    },
    "/vm": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/create",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Create a test vm.",
        "operationId": "createVM",
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CreateVMParametersBody"
            }
          },
          {
            "type": "boolean",
            "name": "DryRun",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/createVMDryRunResponse"
          },
          "201": {
            "$ref": "#/responses/createVMResponse"
          },
          "400": {
            "$ref": "#/responses/createVMErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/versions": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "List vm versions.",
        "operationId": "listVMVersions",
        "responses": {
          "200": {
            "$ref": "#/responses/listVMVersionsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/{vm_id}": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/[:vmid]",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Get the details for a test vm.",
        "operationId": "getVM",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/getVMResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      },
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/[:vmid]/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Delete a test vm.",
        "operationId": "deleteVM",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/deleteVMResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/{vm_id}/addons/{addon_id}": {
      "delete": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/[:vmid]/addon/[:addonid]/delete",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vmAddons"
        ],
        "summary": "Deletes an addon from a vm.",
        "operationId": "deleteVMAddon",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          },
          {
            "type": "string",
            "x-go-name": "AddonID",
            "description": "Cluster addon identifier",
            "name": "addon_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "204": {
            "$ref": "#/responses/responseNoContent"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/{vm_id}/port": {
      "post": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/[:vmid]/port/expose",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Exposes a port on a vm.",
        "operationId": "createVMPort",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "required": [
                "port",
                "protocols"
              ],
              "properties": {
                "is_wildcard": {
                  "description": "IsWildcard",
                  "type": "boolean",
                  "x-go-name": "IsWildcard"
                },
                "port": {
                  "description": "Port Number",
                  "type": "integer",
                  "format": "int64",
                  "x-go-name": "Port"
                },
                "protocols": {
                  "description": "Protocols",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/PortProtocol"
                  },
                  "x-go-name": "Protocols"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/createVMPortResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/{vm_id}/ports": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/[:vmid]/port/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Lists ports for a vm.",
        "operationId": "listVMPorts",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/listVMPortsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/{vm_id}/tags": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/tag/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Update the tags for a vm.",
        "operationId": "updateVMTags",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "tags": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Tag"
                  },
                  "x-go-name": "Tags"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/updateVMTagsResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vm/{vm_id}/ttl": {
      "put": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/ttl/update",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "Update ttl for a VM.",
        "operationId": "updateVMTTL",
        "parameters": [
          {
            "type": "string",
            "x-go-name": "VMID",
            "description": "VM identifier",
            "name": "vm_id",
            "in": "path",
            "required": true
          },
          {
            "name": "Body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "ttl": {
                  "type": "string",
                  "x-go-name": "TTL"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/responses/updateVMTTLResponse"
          },
          "400": {
            "$ref": "#/responses/updateVMTTLErrorResponse"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    },
    "/vms": {
      "get": {
        "security": [
          {
            "api_key": []
          }
        ],
        "description": "Required RBAC Policy: kots/vm/list",
        "produces": [
          "application/json"
        ],
        "schemes": [
          "https"
        ],
        "tags": [
          "vms"
        ],
        "summary": "List test vms.",
        "operationId": "listVMs",
        "responses": {
          "200": {
            "$ref": "#/responses/listVMsResponse"
          },
          "400": {
            "$ref": "#/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/responses/responseErrNotFound"
          }
        }
      }
    }
  },
  "definitions": {
    "AWSElasticBlockStoreVolumeSource": {
      "description": "An AWS EBS disk must exist before mounting to a container. The disk\nmust also be in the same AWS zone as the kubelet. An AWS EBS disk\ncan only be mounted as read/write once. AWS EBS volumes support\nownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents a Persistent Disk resource in AWS.",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type of the volume that you want to mount.\nTip: Ensure that the filesystem type is supported by the host operating system.\nExamples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\nTODO: how do we prevent errors in the filesystem from compromising the machine\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "partition": {
          "description": "partition is the partition in the volume that you want to mount.\nIf omitted, the default is to mount by volume name.\nExamples: For volume /dev/sda1, you specify the partition as \"1\".\nSimilarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Partition"
        },
        "readOnly": {
          "description": "readOnly value true will force the readOnly setting in VolumeMounts.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "volumeID": {
          "description": "volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume).\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
          "type": "string",
          "x-go-name": "VolumeID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Actor": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "link": {
          "type": "string",
          "x-go-name": "Link"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Timestamp"
        },
        "type": {
          "type": "string",
          "x-go-name": "Type"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models/types"
    },
    "Affinity": {
      "type": "object",
      "title": "Affinity is a group of affinity scheduling rules.",
      "properties": {
        "nodeAffinity": {
          "$ref": "#/definitions/NodeAffinity"
        },
        "podAffinity": {
          "$ref": "#/definitions/PodAffinity"
        },
        "podAntiAffinity": {
          "$ref": "#/definitions/PodAntiAffinity"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "AirgapBuildSummary": {
      "type": "object",
      "title": "AirgapBuildSummary is a lightweight snapshot of a channel-release's airgap build state.",
      "properties": {
        "airgapBuildError": {
          "type": "string",
          "x-go-name": "AirgapBuildError"
        },
        "airgapBuildStatus": {
          "type": "string",
          "x-go-name": "AirgapBuildStatus"
        },
        "channelId": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "channelName": {
          "type": "string",
          "x-go-name": "ChannelName"
        },
        "channelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "fullAirgapBuild": {
          "description": "FullAirgapBuild is true when the channel-release is configured to produce\nor has completed with a full airgap bundle.\nWhen false, the worker may still run metadata generation for the\nchannel-release and that step can fail.",
          "type": "boolean",
          "x-go-name": "FullAirgapBuild"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "AllowedDomain": {
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "domain": {
          "type": "string",
          "x-go-name": "Domain"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "ApiToken": {
      "type": "object",
      "properties": {
        "access_token": {
          "type": "string",
          "x-go-name": "Token"
        },
        "last_active": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastActive"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "read_only": {
          "type": "boolean",
          "x-go-name": "ReadOnly"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "AppArmorProfile": {
      "description": "+union",
      "type": "object",
      "title": "AppArmorProfile defines a pod or container's AppArmor settings.",
      "properties": {
        "localhostProfile": {
          "description": "localhostProfile indicates a profile loaded on the node that should be used.\nThe profile must be preconfigured on the node to work.\nMust match the loaded name of the profile.\nMust be set if and only if type is \"Localhost\".\n+optional",
          "type": "string",
          "x-go-name": "LocalhostProfile"
        },
        "type": {
          "$ref": "#/definitions/AppArmorProfileType"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "AppArmorProfileType": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "AppRelease": {
      "type": "object",
      "properties": {
        "airgapBuilds": {
          "description": "AirgapBuilds is the full history of channel-releases for this release sequence,\nincluding prior re-promotes to the same channel. Populated by GetAppRelease via\nGetAirgapBuildStatusesForRelease. Use this for inspect / history views.\n\nFor \"what should I poll on\" after a fresh promote, prefer the top-level\nPromoteReleaseResponse.Body.AirgapBuilds, which contains only the channels just\nqueued by that promote call. The two fields can diverge for releases that have\nbeen promoted before.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/AirgapBuildSummary"
          },
          "x-go-name": "AirgapBuilds"
        },
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Channel"
          },
          "x-go-name": "Channels"
        },
        "charts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Chart"
          },
          "x-go-name": "Charts"
        },
        "compatibilityResults": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CompatibilityResult"
          },
          "x-go-name": "CompatibilityResults"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "createdBy": {
          "$ref": "#/definitions/Actor"
        },
        "hasKurlInstaller": {
          "type": "boolean",
          "x-go-name": "HasKurlInstaller"
        },
        "installationTypes": {
          "$ref": "#/definitions/InstallationTypes"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isHelmOnly": {
          "type": "boolean",
          "x-go-name": "IsHelmOnly"
        },
        "isReleaseNotEditable": {
          "type": "boolean",
          "x-go-name": "IsReleaseNotEditable"
        },
        "lintResult": {
          "$ref": "#/definitions/LintResult"
        },
        "mostRecentChannel": {
          "$ref": "#/definitions/KotsChannelRelease"
        },
        "rawSpec": {
          "type": "string",
          "x-go-name": "RawSpec"
        },
        "releaseNotes": {
          "type": "string",
          "x-go-name": "ReleaseNotes"
        },
        "sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Sequence"
        },
        "spec": {
          "type": "string",
          "x-go-name": "Spec"
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "updatedBy": {
          "$ref": "#/definitions/Actor"
        },
        "userAgent": {
          "type": "string",
          "x-go-name": "UserAgent"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "AppReleaseDraft": {
      "description": "AppReleaseDraft is a draft of a release before it is created",
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "rawSpec": {
          "type": "string",
          "x-go-name": "RawSpec"
        },
        "spec": {
          "type": "string",
          "x-go-name": "Spec"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "AppWithChannels": {
      "type": "object",
      "properties": {
        "activeEnterprisePortalTemplate": {
          "type": "string",
          "x-go-name": "ActiveEnterprisePortalTemplate"
        },
        "askAiEnabled": {
          "type": "boolean",
          "x-go-name": "AskAiEnabled"
        },
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Channel"
          },
          "x-go-name": "Channels"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "defaultFromEmail": {
          "type": "string",
          "x-go-name": "DefaultFromEmail"
        },
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "downloadPortalFqdnOverride": {
          "type": "string",
          "x-go-name": "DownloadPortalFQDNOverride"
        },
        "emailVerifiedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "EmailVerifiedAt"
        },
        "hideSupportBundleUploadEnabled": {
          "type": "boolean",
          "x-go-name": "HideSupportBundleUploadEnabled"
        },
        "iconUrl": {
          "type": "string",
          "x-go-name": "IconURL"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isKotsApp": {
          "type": "boolean",
          "x-go-name": "IsKotsApp"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "publicKeyPem": {
          "type": "string",
          "x-go-name": "PublicKeyPEM"
        },
        "renamedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RenamedAt"
        },
        "securityCenterEnabled": {
          "type": "boolean",
          "x-go-name": "SecurityCenterEnabled"
        },
        "slug": {
          "type": "string",
          "x-go-name": "Slug"
        },
        "supportBundleUploadEnabled": {
          "type": "boolean",
          "x-go-name": "SupportBundleUploadEnabled"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "trialSignupEnabled": {
          "type": "boolean",
          "x-go-name": "TrialSignupEnabled"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/apps"
    },
    "AzureDataDiskCachingMode": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "AzureDataDiskKind": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "AzureDiskVolumeSource": {
      "type": "object",
      "title": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.",
      "properties": {
        "cachingMode": {
          "$ref": "#/definitions/AzureDataDiskCachingMode"
        },
        "diskName": {
          "description": "diskName is the Name of the data disk in the blob storage",
          "type": "string",
          "x-go-name": "DiskName"
        },
        "diskURI": {
          "description": "diskURI is the URI of data disk in the blob storage",
          "type": "string",
          "x-go-name": "DataDiskURI"
        },
        "fsType": {
          "description": "fsType is Filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n+optional\n+default=\"ext4\"",
          "type": "string",
          "x-go-name": "FSType"
        },
        "kind": {
          "$ref": "#/definitions/AzureDataDiskKind"
        },
        "readOnly": {
          "description": "readOnly Defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional\n+default=false",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "AzureFileVolumeSource": {
      "type": "object",
      "title": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.",
      "properties": {
        "readOnly": {
          "description": "readOnly defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretName": {
          "description": "secretName is the  name of secret that contains Azure Storage Account Name and Key",
          "type": "string",
          "x-go-name": "SecretName"
        },
        "shareName": {
          "description": "shareName is the azure share Name",
          "type": "string",
          "x-go-name": "ShareName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "BatchArchiveInstance": {
      "type": "object",
      "properties": {
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "licenseId": {
          "type": "string",
          "x-go-name": "LicenseID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/customers"
    },
    "BuiltInDefaultLicenseField": {
      "type": "object",
      "properties": {
        "FieldName": {
          "type": "string"
        },
        "is_default": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "is_hidden": {
          "type": "boolean",
          "x-go-name": "IsHidden"
        },
        "is_locked": {
          "type": "boolean",
          "x-go-name": "IsLocked"
        },
        "is_required": {
          "type": "boolean",
          "x-go-name": "IsRequired"
        },
        "title": {
          "type": "string",
          "x-go-name": "Title"
        },
        "type": {
          "type": "string",
          "x-go-name": "Type"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/app/types"
    },
    "BundleEvent": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Count"
        },
        "firstTimestamp": {
          "type": "string",
          "x-go-name": "FirstTimestamp"
        },
        "lastTimestamp": {
          "type": "string",
          "x-go-name": "LastTimestamp"
        },
        "message": {
          "type": "string",
          "x-go-name": "Message"
        },
        "namespace": {
          "type": "string",
          "x-go-name": "Namespace"
        },
        "objectKind": {
          "type": "string",
          "x-go-name": "ObjectKind"
        },
        "objectName": {
          "type": "string",
          "x-go-name": "ObjectName"
        },
        "reason": {
          "type": "string",
          "x-go-name": "Reason"
        },
        "type": {
          "type": "string",
          "x-go-name": "Type"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/supportbundles"
    },
    "BundleScope": {
      "type": "object",
      "properties": {
        "deployments": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Deployments"
        },
        "events": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Events"
        },
        "has_cluster_resources": {
          "type": "boolean",
          "x-go-name": "HasClusterResources"
        },
        "has_host_collectors": {
          "type": "boolean",
          "x-go-name": "HasHostCollectors"
        },
        "namespaces": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Namespaces"
        },
        "nodes": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Nodes"
        },
        "pods": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Pods"
        },
        "pods_with_logs": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "PodsWithLogs"
        },
        "services": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Services"
        },
        "warning_events": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "WarningEvents"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/supportbundle"
    },
    "CMXHistory": {
      "description": "Any non-historical fields have been omitted.",
      "type": "object",
      "title": "CMXHistory represents shared fields of history for various DistributionTypes.",
      "properties": {
        "actor": {
          "$ref": "#/definitions/Actor"
        },
        "assigned_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AssignedAt"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "credits_per_hour": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CreditsPerHour"
        },
        "disk_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DiskGiB"
        },
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "distribution_type": {
          "$ref": "#/definitions/DistributionType"
        },
        "duration": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Duration"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "flat_fee": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "FlatFee"
        },
        "guid": {
          "type": "string",
          "x-go-name": "GUID"
        },
        "has_network_report": {
          "type": "boolean",
          "x-go-name": "HasNetworkReport"
        },
        "id": {
          "type": "string",
          "x-go-name": "ShortID"
        },
        "instance_type": {
          "type": "string",
          "x-go-name": "InstanceType"
        },
        "minutes_billed": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MinutesBilled"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "network_id": {
          "type": "string",
          "x-go-name": "NetworkID"
        },
        "node_groups": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NodeGroupCount"
        },
        "nodes": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ClusterNodeCount"
        },
        "running_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RunningAt"
        },
        "status": {
          "type": "string",
          "x-go-name": "Status"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "x-go-name": "Tags"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "terminated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "TerminatedAt"
        },
        "total_credits": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCredits"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "CMXQuota": {
      "type": "object",
      "properties": {
        "current_value": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CurrentValue"
        },
        "default_value": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DefaultValue"
        },
        "in_use": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InUse"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "queued": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Queued"
        },
        "unit": {
          "type": "string",
          "x-go-name": "Unit"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cmx"
    },
    "CSIVolumeSource": {
      "description": "Represents a source location of a volume to mount, managed by an external CSI driver",
      "type": "object",
      "properties": {
        "driver": {
          "description": "driver is the name of the CSI driver that handles this volume.\nConsult with your admin for the correct name as registered in the cluster.",
          "type": "string",
          "x-go-name": "Driver"
        },
        "fsType": {
          "description": "fsType to mount. Ex. \"ext4\", \"xfs\", \"ntfs\".\nIf not provided, the empty value is passed to the associated CSI driver\nwhich will determine the default filesystem to apply.\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "nodePublishSecretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "readOnly": {
          "description": "readOnly specifies a read-only configuration for the volume.\nDefaults to false (read/write).\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "volumeAttributes": {
          "description": "volumeAttributes stores driver-specific properties that are passed to the CSI\ndriver. Consult your driver's documentation for supported values.\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "VolumeAttributes"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Capabilities": {
      "type": "object",
      "title": "Adds and removes POSIX capabilities from running containers.",
      "properties": {
        "add": {
          "description": "Added capabilities\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Capability"
          },
          "x-go-name": "Add"
        },
        "drop": {
          "description": "Removed capabilities\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Capability"
          },
          "x-go-name": "Drop"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Capability": {
      "description": "Capability represent POSIX capabilities type",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "CephFSVolumeSource": {
      "description": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod\nCephfs volumes do not support ownership management or SELinux relabeling.",
      "type": "object",
      "properties": {
        "monitors": {
          "description": "monitors is Required: Monitors is a collection of Ceph monitors\nMore info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Monitors"
        },
        "path": {
          "description": "path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n+optional",
          "type": "string",
          "x-go-name": "Path"
        },
        "readOnly": {
          "description": "readOnly is Optional: Defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\nMore info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretFile": {
          "description": "secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret\nMore info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it\n+optional",
          "type": "string",
          "x-go-name": "SecretFile"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "user": {
          "description": "user is optional: User is the rados user name, default is admin\nMore info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it\n+optional",
          "type": "string",
          "x-go-name": "User"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Channel": {
      "type": "object",
      "properties": {
        "adoptionRate": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerAdoption"
          },
          "x-go-name": "AdoptionRate"
        },
        "airgapDiffBundlesEnabled": {
          "type": "boolean",
          "x-go-name": "AirgapDiffBundlesEnabled"
        },
        "airgapDockerRegistryFormatEnabled": {
          "type": "boolean",
          "x-go-name": "AirgapDockerRegistryFormatEnabled"
        },
        "allowPublishableKey": {
          "type": "boolean",
          "x-go-name": "AllowPublishableKey"
        },
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "appName": {
          "type": "string",
          "x-go-name": "AppName"
        },
        "appSlug": {
          "type": "string",
          "x-go-name": "AppSlug"
        },
        "buildAirgapAutomatically": {
          "type": "boolean",
          "x-go-name": "BuildAirgapAutomatically"
        },
        "channelIcon": {
          "type": "string",
          "x-go-name": "ChannelIcon"
        },
        "channelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "channelSlug": {
          "type": "string",
          "x-go-name": "Slug"
        },
        "chartReleases": {
          "description": "ChartReleases is a map of chart name -> []string of version labels",
          "type": "array",
          "items": {
            "$ref": "#/definitions/HelmChart"
          },
          "x-go-name": "ChartReleases"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Created"
        },
        "currentVersion": {
          "type": "string",
          "x-go-name": "CurrentVersion"
        },
        "customHostnameOverrides": {
          "$ref": "#/definitions/CustomHostnameOverrides"
        },
        "customers": {
          "$ref": "#/definitions/TotalActiveInactiveCustomers"
        },
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "embeddedClusterInstallCommand": {
          "type": "string",
          "x-go-name": "EmbeddedClusterInstallCommand"
        },
        "enterprisePartnerChannelID": {
          "type": "string",
          "x-go-name": "EnterprisePartnerChannelID"
        },
        "existingClusterInstallCommand": {
          "type": "string",
          "x-go-name": "ExistingClusterInstallCommand"
        },
        "extraLintRules": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ExtraLintRules"
          },
          "x-go-name": "ExtraLintRules"
        },
        "gitHubRef": {
          "$ref": "#/definitions/GitHubRef"
        },
        "hasKurlInstaller": {
          "description": "swager:ignore",
          "type": "boolean",
          "x-go-name": "HasKurlInstaller"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isDefault": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "isHelmOnly": {
          "type": "boolean",
          "x-go-name": "IsHelmOnly"
        },
        "latestChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "LatestChannelSequence"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "numActiveInstances": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NumActiveInstances"
        },
        "numReleases": {
          "type": "integer",
          "format": "int32",
          "x-go-name": "NumReleases"
        },
        "releaseNotes": {
          "type": "string",
          "x-go-name": "ReleaseNotes"
        },
        "releaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ReleaseSequence"
        },
        "releases": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/KotsChannelRelease"
          },
          "x-go-name": "Releases"
        },
        "replicatedRegistryDomain": {
          "type": "string",
          "x-go-name": "ReplicatedRegistryDomain"
        },
        "semverRequired": {
          "type": "boolean",
          "x-go-name": "SemverRequired"
        },
        "semverWarning": {
          "type": "string",
          "x-go-name": "SemverWarning"
        },
        "targetKotsVersion": {
          "type": "string",
          "x-go-name": "TargetKotsVersion"
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Updated"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "ChannelReleaseInstallCommands": {
      "type": "object",
      "properties": {
        "embeddedClusterInstallCommand": {
          "type": "string",
          "x-go-name": "EmbeddedClusterInstallCommand"
        },
        "existingClusterInstallCommand": {
          "type": "string",
          "x-go-name": "ExistingClusterInstallCommand"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/releases"
    },
    "Chart": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string",
          "x-go-name": "Error"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "status": {
          "$ref": "#/definitions/ChartStatus"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "ChartStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "CinderVolumeSource": {
      "description": "A Cinder volume must exist before mounting to a container.\nThe volume must also be in the same region as the kubelet.\nCinder volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents a cinder volume resource in Openstack.",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nExamples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\nMore info: https://examples.k8s.io/mysql-cinder-pd/README.md\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "readOnly": {
          "description": "readOnly defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\nMore info: https://examples.k8s.io/mysql-cinder-pd/README.md\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "volumeID": {
          "description": "volumeID used to identify the volume in cinder.\nMore info: https://examples.k8s.io/mysql-cinder-pd/README.md",
          "type": "string",
          "x-go-name": "VolumeID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Cluster": {
      "type": "object",
      "properties": {
        "actor": {
          "$ref": "#/definitions/Actor"
        },
        "addons": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ClusterAddon"
          },
          "x-go-name": "Addons"
        },
        "assigned_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AssignedAt"
        },
        "cluster_node": {
          "$ref": "#/definitions/ClusterNode"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "credits_per_hour_per_cluster": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CreditsPerHourPerCluster"
        },
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "flat_fee": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "FlatFee"
        },
        "guid": {
          "type": "string",
          "x-go-name": "GUID"
        },
        "id": {
          "type": "string",
          "x-go-name": "ShortID"
        },
        "installer_url": {
          "type": "string",
          "x-go-name": "InstallerURL"
        },
        "ip_family": {
          "type": "string",
          "x-go-name": "IPFamily"
        },
        "kubernetes_distribution": {
          "type": "string",
          "x-go-name": "KubernetesDistribution"
        },
        "kubernetes_version": {
          "type": "string",
          "x-go-name": "KubernetesVersion"
        },
        "last_scheduling_status": {
          "type": "string",
          "x-go-name": "LastSchedulingStatus"
        },
        "license_id": {
          "type": "string",
          "x-go-name": "LicenseID"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "network_id": {
          "type": "string",
          "x-go-name": "NetworkID"
        },
        "node_groups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NodeGroup"
          },
          "x-go-name": "NodeGroups"
        },
        "running_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RunningAt"
        },
        "status": {
          "$ref": "#/definitions/ClusterStatus"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "x-go-name": "Tags"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "total_credits": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCredits"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterAddon": {
      "type": "object",
      "properties": {
        "cluster_guid": {
          "type": "string",
          "x-go-name": "ClusterGUID"
        },
        "cluster_id": {
          "type": "string",
          "x-go-name": "ClusterShortID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "guid": {
          "type": "string",
          "x-go-name": "GUID"
        },
        "id": {
          "type": "string",
          "x-go-name": "ShortID"
        },
        "object_store": {
          "$ref": "#/definitions/ClusterAddonObjectStore"
        },
        "port": {
          "$ref": "#/definitions/ClusterAddonPort"
        },
        "ready_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ReadyAt"
        },
        "status": {
          "$ref": "#/definitions/ClusterAddonStatus"
        },
        "terminated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "TerminatedAt"
        },
        "total_credits": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCredits"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterAddonObjectStore": {
      "type": "object",
      "properties": {
        "bucket_name": {
          "type": "string",
          "x-go-name": "BucketName"
        },
        "bucket_prefix": {
          "type": "string",
          "x-go-name": "BucketPrefix"
        },
        "service_account_name": {
          "type": "string",
          "x-go-name": "ServiceAccountName"
        },
        "service_account_name_read_only": {
          "type": "string",
          "x-go-name": "ServiceAccountNameReadOnly"
        },
        "service_account_namespace": {
          "type": "string",
          "x-go-name": "ServiceAccountNamespace"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterAddonPort": {
      "type": "object",
      "properties": {
        "is_wildcard": {
          "type": "boolean",
          "x-go-name": "IsWildcard"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "protocol_http": {
          "type": "boolean",
          "x-go-name": "ProtocolHTTP"
        },
        "protocol_https": {
          "type": "boolean",
          "x-go-name": "ProtocolHTTPS"
        },
        "protocol_ws": {
          "type": "boolean",
          "x-go-name": "ProtocolWS"
        },
        "protocol_wss": {
          "type": "boolean",
          "x-go-name": "ProtocolWSS"
        },
        "upstream_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UpstreamPort"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterAddonStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterDetail": {
      "type": "object",
      "properties": {
        "channel_id": {
          "type": "string",
          "x-go-name": "ChannelId"
        },
        "channel_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "cloud_provider": {
          "type": "string",
          "x-go-name": "CloudProvider"
        },
        "is_airgap": {
          "type": "boolean",
          "x-go-name": "IsAirgap"
        },
        "is_kurl": {
          "type": "boolean",
          "x-go-name": "IsKurl"
        },
        "kots_version": {
          "type": "string",
          "x-go-name": "KotsVersion"
        },
        "kubernetes_distribution": {
          "type": "string",
          "x-go-name": "KubernetesDistribution"
        },
        "kubernetes_version": {
          "type": "string",
          "x-go-name": "KubernetesVersion"
        },
        "number_of_instances": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NumberOfInstances"
        },
        "version_label": {
          "type": "string",
          "x-go-name": "VersionLabel"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster"
    },
    "ClusterDistributionStatus": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "x-go-name": "Enabled"
        },
        "status": {
          "type": "string",
          "x-go-name": "Status"
        },
        "status_message": {
          "type": "string",
          "x-go-name": "StatusMessage"
        },
        "versions": {
          "type": "string",
          "x-go-name": "Versions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterExposedPort": {
      "type": "object",
      "properties": {
        "exposed_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ExposedPort"
        },
        "protocol": {
          "$ref": "#/definitions/PortProtocol"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterNode": {
      "type": "object",
      "properties": {
        "join_command": {
          "type": "string",
          "x-go-name": "JoinCommand"
        },
        "network_id": {
          "description": "Used by vxlan nodes",
          "type": "string",
          "x-go-name": "NetworkID"
        },
        "network_public_ips": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "NetworkPublicIPs"
        },
        "node_group_id": {
          "type": "string",
          "x-go-name": "NodeGroupID"
        },
        "node_index": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Index"
        },
        "node_type": {
          "$ref": "#/definitions/NodeType"
        },
        "ssh_endpoint": {
          "type": "string",
          "x-go-name": "SSHEndpoint"
        },
        "ssh_key": {
          "type": "string",
          "x-go-name": "SSHKey"
        },
        "ssh_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "SSHPort"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterPort": {
      "type": "object",
      "properties": {
        "addon_guid": {
          "type": "string",
          "x-go-name": "AddonGUID"
        },
        "addon_id": {
          "type": "string",
          "x-go-name": "AddonShortID"
        },
        "cluster_guid": {
          "type": "string",
          "x-go-name": "ClusterGUID"
        },
        "cluster_id": {
          "type": "string",
          "x-go-name": "ClusterShortID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "exposed_ports": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ClusterExposedPort"
          },
          "x-go-name": "ExposedPorts"
        },
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        },
        "is_wildcard": {
          "type": "boolean",
          "x-go-name": "IsWildcard"
        },
        "port_name": {
          "type": "string",
          "x-go-name": "PortName"
        },
        "state": {
          "$ref": "#/definitions/ClusterAddonStatus"
        },
        "upstream_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UpstreamPort"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterQuota": {
      "type": "object",
      "properties": {
        "current_value": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CurrentValue"
        },
        "default_value": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DefaultValue"
        },
        "in_use": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InUse"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "queued": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Queued"
        },
        "unit": {
          "type": "string",
          "x-go-name": "Unit"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cluster"
    },
    "ClusterStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "ClusterTrustBundleProjection": {
      "description": "ClusterTrustBundleProjection describes how to select a set of\nClusterTrustBundle objects and project their contents into the pod\nfilesystem.",
      "type": "object",
      "properties": {
        "labelSelector": {
          "$ref": "#/definitions/LabelSelector"
        },
        "name": {
          "description": "Select a single ClusterTrustBundle by object name.  Mutually-exclusive\nwith signerName and labelSelector.\n+optional",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "If true, don't block pod startup if the referenced ClusterTrustBundle(s)\naren't available.  If using name, then the named ClusterTrustBundle is\nallowed not to exist.  If using signerName, then the combination of\nsignerName and labelSelector is allowed to match zero\nClusterTrustBundles.\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        },
        "path": {
          "description": "Relative path from the volume root to write the bundle.",
          "type": "string",
          "x-go-name": "Path"
        },
        "signerName": {
          "description": "Select all ClusterTrustBundles that match this signer name.\nMutually-exclusive with name.  The contents of all selected\nClusterTrustBundles will be unified and deduplicated.\n+optional",
          "type": "string",
          "x-go-name": "SignerName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "CompatibilityResult": {
      "type": "object",
      "properties": {
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "failureAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "FailureAt"
        },
        "failureNotes": {
          "type": "string",
          "x-go-name": "FailureNotes"
        },
        "successAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "SuccessAt"
        },
        "successNotes": {
          "type": "string",
          "x-go-name": "SuccessNotes"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "ComplexityRequirements": {
      "type": "object",
      "properties": {
        "digit": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Digit"
        },
        "min": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Min"
        },
        "special": {
          "description": "Current data is like this: {\"min\":12,\"upperLower\":6,\"digit\":2,\"special\":2}",
          "type": "integer",
          "format": "int64",
          "x-go-name": "Special"
        },
        "upperLower": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UpperLower"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "ConditionStatus": {
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ConfigMapEnvSource": {
      "description": "The contents of the target ConfigMap's Data field will represent the\nkey-value pairs as environment variables.",
      "type": "object",
      "title": "ConfigMapEnvSource selects a ConfigMap to populate the environment\nvariables with.",
      "properties": {
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "Specify whether the ConfigMap must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ConfigMapKeySelector": {
      "description": "+structType=atomic",
      "type": "object",
      "title": "Selects a key from a ConfigMap.",
      "properties": {
        "key": {
          "description": "The key to select.",
          "type": "string",
          "x-go-name": "Key"
        },
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "Specify whether the ConfigMap or its key must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ConfigMapProjection": {
      "description": "The contents of the target ConfigMap's Data field will be presented in a\nprojected volume as files using the keys in the Data field as the file names,\nunless the items element is populated with specific mappings of keys to paths.\nNote that this is identical to a configmap volume source without the default\nmode.",
      "type": "object",
      "title": "Adapts a ConfigMap into a projected volume.",
      "properties": {
        "items": {
          "description": "items if unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/KeyToPath"
          },
          "x-go-name": "Items"
        },
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "optional specify whether the ConfigMap or its keys must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ConfigMapVolumeSource": {
      "description": "The contents of the target ConfigMap's Data field will be presented in a\nvolume as files using the keys in the Data field as the file names, unless\nthe items element is populated with specific mappings of keys to paths.\nConfigMap volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Adapts a ConfigMap into a volume.",
      "properties": {
        "defaultMode": {
          "description": "defaultMode is optional: mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0 and 511.\nYAML accepts both octal and decimal values, JSON requires decimal values for mode bits.\nDefaults to 0644.\nDirectories within the path are not affected by this setting.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "DefaultMode"
        },
        "items": {
          "description": "items if unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/KeyToPath"
          },
          "x-go-name": "Items"
        },
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "optional specify whether the ConfigMap or its keys must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Container": {
      "type": "object",
      "title": "A single application container that you want to run within a pod.",
      "properties": {
        "args": {
          "description": "Arguments to the entrypoint.\nThe container image's CMD is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Args"
        },
        "command": {
          "description": "Entrypoint array. Not executed within a shell.\nThe container image's ENTRYPOINT is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Command"
        },
        "env": {
          "description": "List of environment variables to set in the container.\nCannot be updated.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnvVar"
          },
          "x-go-name": "Env"
        },
        "envFrom": {
          "description": "List of sources to populate environment variables in the container.\nThe keys defined within a source may consist of any printable ASCII characters except '='.\nWhen a key exists in multiple\nsources, the value associated with the last source will take precedence.\nValues defined by an Env with a duplicate key will take precedence.\nCannot be updated.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnvFromSource"
          },
          "x-go-name": "EnvFrom"
        },
        "image": {
          "description": "Container image name.\nMore info: https://kubernetes.io/docs/concepts/containers/images\nThis field is optional to allow higher level config management to default or override\ncontainer images in workload controllers like Deployments and StatefulSets.\n+optional",
          "type": "string",
          "x-go-name": "Image"
        },
        "imagePullPolicy": {
          "$ref": "#/definitions/PullPolicy"
        },
        "lifecycle": {
          "$ref": "#/definitions/Lifecycle"
        },
        "livenessProbe": {
          "$ref": "#/definitions/Probe"
        },
        "name": {
          "description": "Name of the container specified as a DNS_LABEL.\nEach container in a pod must have a unique name (DNS_LABEL).\nCannot be updated.",
          "type": "string",
          "x-go-name": "Name"
        },
        "ports": {
          "description": "List of ports to expose from the container. Not specifying a port here\nDOES NOT prevent that port from being exposed. Any port which is\nlistening on the default \"0.0.0.0\" address inside a container will be\naccessible from the network.\nModifying this array with strategic merge patch may corrupt the data.\nFor more information See https://github.com/kubernetes/kubernetes/issues/108255.\nCannot be updated.\n+optional\n+patchMergeKey=containerPort\n+patchStrategy=merge\n+listType=map\n+listMapKey=containerPort\n+listMapKey=protocol",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerPort"
          },
          "x-go-name": "Ports"
        },
        "readinessProbe": {
          "$ref": "#/definitions/Probe"
        },
        "resizePolicy": {
          "description": "Resources resize policy for the container.\nThis field cannot be set on ephemeral containers.\n+featureGate=InPlacePodVerticalScaling\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerResizePolicy"
          },
          "x-go-name": "ResizePolicy"
        },
        "resources": {
          "$ref": "#/definitions/ResourceRequirements"
        },
        "restartPolicy": {
          "$ref": "#/definitions/ContainerRestartPolicy"
        },
        "restartPolicyRules": {
          "description": "Represents a list of rules to be checked to determine if the\ncontainer should be restarted on exit. The rules are evaluated in\norder. Once a rule matches a container exit condition, the remaining\nrules are ignored. If no rule matches the container exit condition,\nthe Container-level restart policy determines the whether the container\nis restarted or not. Constraints on the rules:\nAt most 20 rules are allowed.\nRules can have the same action.\nIdentical rules are not forbidden in validations.\nWhen rules are specified, container MUST set RestartPolicy explicitly\neven it if matches the Pod's RestartPolicy.\n+featureGate=ContainerRestartRules\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerRestartRule"
          },
          "x-go-name": "RestartPolicyRules"
        },
        "securityContext": {
          "$ref": "#/definitions/SecurityContext"
        },
        "startupProbe": {
          "$ref": "#/definitions/Probe"
        },
        "stdin": {
          "description": "Whether this container should allocate a buffer for stdin in the container runtime. If this\nis not set, reads from stdin in the container will always result in EOF.\nDefault is false.\n+optional",
          "type": "boolean",
          "x-go-name": "Stdin"
        },
        "stdinOnce": {
          "description": "Whether the container runtime should close the stdin channel after it has been opened by\na single attach. When stdin is true the stdin stream will remain open across multiple attach\nsessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the\nfirst client attaches to stdin, and then remains open and accepts data until the client disconnects,\nat which time stdin is closed and remains closed until the container is restarted. If this\nflag is false, a container processes that reads from stdin will never receive an EOF.\nDefault is false\n+optional",
          "type": "boolean",
          "x-go-name": "StdinOnce"
        },
        "terminationMessagePath": {
          "description": "Optional: Path at which the file to which the container's termination message\nwill be written is mounted into the container's filesystem.\nMessage written is intended to be brief final status, such as an assertion failure message.\nWill be truncated by the node if greater than 4096 bytes. The total message length across\nall containers will be limited to 12kb.\nDefaults to /dev/termination-log.\nCannot be updated.\n+optional",
          "type": "string",
          "x-go-name": "TerminationMessagePath"
        },
        "terminationMessagePolicy": {
          "$ref": "#/definitions/TerminationMessagePolicy"
        },
        "tty": {
          "description": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.\nDefault is false.\n+optional",
          "type": "boolean",
          "x-go-name": "TTY"
        },
        "volumeDevices": {
          "description": "volumeDevices is the list of block devices to be used by the container.\n+patchMergeKey=devicePath\n+patchStrategy=merge\n+listType=map\n+listMapKey=devicePath\n+optional",
          "type": "array",
          "items": {
            "$ref": "#/definitions/VolumeDevice"
          },
          "x-go-name": "VolumeDevices"
        },
        "volumeMounts": {
          "description": "Pod volumes to mount into the container's filesystem.\nCannot be updated.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge\n+listType=map\n+listMapKey=mountPath",
          "type": "array",
          "items": {
            "$ref": "#/definitions/VolumeMount"
          },
          "x-go-name": "VolumeMounts"
        },
        "workingDir": {
          "description": "Container's working directory.\nIf not specified, the container runtime's default will be used, which\nmight be configured in the container image.\nCannot be updated.\n+optional",
          "type": "string",
          "x-go-name": "WorkingDir"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerExtendedResourceRequest": {
      "description": "extended resource name to the device request name.",
      "type": "object",
      "title": "ContainerExtendedResourceRequest has the mapping of container name,",
      "properties": {
        "containerName": {
          "description": "The name of the container requesting resources.",
          "type": "string",
          "x-go-name": "ContainerName"
        },
        "requestName": {
          "description": "The name of the request in the special ResourceClaim which corresponds to the extended resource.",
          "type": "string",
          "x-go-name": "RequestName"
        },
        "resourceName": {
          "description": "The name of the extended resource in that container which gets backed by DRA.",
          "type": "string",
          "x-go-name": "ResourceName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerPort": {
      "type": "object",
      "title": "ContainerPort represents a network port in a single container.",
      "properties": {
        "containerPort": {
          "description": "Number of port to expose on the pod's IP address.\nThis must be a valid port number, 0 < x < 65536.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "ContainerPort"
        },
        "hostIP": {
          "description": "What host IP to bind the external port to.\n+optional",
          "type": "string",
          "x-go-name": "HostIP"
        },
        "hostPort": {
          "description": "Number of port to expose on the host.\nIf specified, this must be a valid port number, 0 < x < 65536.\nIf HostNetwork is specified, this must match ContainerPort.\nMost containers do not need this.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "HostPort"
        },
        "name": {
          "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each\nnamed port in a pod must have a unique name. Name for the port that can be\nreferred to by services.\n+optional",
          "type": "string",
          "x-go-name": "Name"
        },
        "protocol": {
          "$ref": "#/definitions/Protocol"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerResizePolicy": {
      "type": "object",
      "title": "ContainerResizePolicy represents resource resize policy for the container.",
      "properties": {
        "resourceName": {
          "$ref": "#/definitions/ResourceName"
        },
        "restartPolicy": {
          "$ref": "#/definitions/ResourceResizeRestartPolicy"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerRestartPolicy": {
      "description": "The only allowed values are \"Always\", \"Never\", and \"OnFailure\".",
      "type": "string",
      "title": "ContainerRestartPolicy is the restart policy for a single container.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerRestartRule": {
      "type": "object",
      "title": "ContainerRestartRule describes how a container exit is handled.",
      "properties": {
        "action": {
          "$ref": "#/definitions/ContainerRestartRuleAction"
        },
        "exitCodes": {
          "$ref": "#/definitions/ContainerRestartRuleOnExitCodes"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerRestartRuleAction": {
      "description": "ContainerRestartRuleAction describes the action to take when the\ncontainer exits.",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerRestartRuleOnExitCodes": {
      "description": "ContainerRestartRuleOnExitCodes describes the condition\nfor handling an exited container based on its exit codes.",
      "type": "object",
      "properties": {
        "operator": {
          "$ref": "#/definitions/ContainerRestartRuleOnExitCodesOperator"
        },
        "values": {
          "description": "Specifies the set of values to check for container exit codes.\nAt most 255 elements are allowed.\n+optional\n+listType=set",
          "type": "array",
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "x-go-name": "Values"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerRestartRuleOnExitCodesOperator": {
      "description": "ContainerRestartRuleOnExitCodesOperator describes the operator\nto take for the exit codes.",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerState": {
      "description": "Only one of its members may be specified.\nIf none of them is specified, the default one is ContainerStateWaiting.",
      "type": "object",
      "title": "ContainerState holds a possible state of container.",
      "properties": {
        "running": {
          "$ref": "#/definitions/ContainerStateRunning"
        },
        "terminated": {
          "$ref": "#/definitions/ContainerStateTerminated"
        },
        "waiting": {
          "$ref": "#/definitions/ContainerStateWaiting"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerStateRunning": {
      "type": "object",
      "title": "ContainerStateRunning is a running state of a container.",
      "properties": {
        "startedAt": {
          "description": "Time at which the container was last (re-)started\n+optional",
          "type": "string",
          "x-go-name": "StartedAt",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerStateTerminated": {
      "type": "object",
      "title": "ContainerStateTerminated is a terminated state of a container.",
      "properties": {
        "containerID": {
          "description": "Container's ID in the format '<type>://<container_id>'\n+optional",
          "type": "string",
          "x-go-name": "ContainerID"
        },
        "exitCode": {
          "description": "Exit status from the last termination of the container",
          "type": "integer",
          "format": "int32",
          "x-go-name": "ExitCode"
        },
        "finishedAt": {
          "description": "Time at which the container last terminated\n+optional",
          "type": "string",
          "x-go-name": "FinishedAt",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "message": {
          "description": "Message regarding the last termination of the container\n+optional",
          "type": "string",
          "x-go-name": "Message"
        },
        "reason": {
          "description": "(brief) reason from the last termination of the container\n+optional",
          "type": "string",
          "x-go-name": "Reason"
        },
        "signal": {
          "description": "Signal from the last termination of the container\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Signal"
        },
        "startedAt": {
          "description": "Time at which previous execution of the container started\n+optional",
          "type": "string",
          "x-go-name": "StartedAt",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerStateWaiting": {
      "type": "object",
      "title": "ContainerStateWaiting is a waiting state of a container.",
      "properties": {
        "message": {
          "description": "Message regarding why the container is not yet running.\n+optional",
          "type": "string",
          "x-go-name": "Message"
        },
        "reason": {
          "description": "(brief) reason the container is not yet running.\n+optional",
          "type": "string",
          "x-go-name": "Reason"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerStatus": {
      "type": "object",
      "title": "ContainerStatus contains details for the current status of this container.",
      "properties": {
        "allocatedResources": {
          "$ref": "#/definitions/ResourceList"
        },
        "allocatedResourcesStatus": {
          "description": "AllocatedResourcesStatus represents the status of various resources\nallocated for this Pod.\n+featureGate=ResourceHealthStatus\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ResourceStatus"
          },
          "x-go-name": "AllocatedResourcesStatus"
        },
        "containerID": {
          "description": "ContainerID is the ID of the container in the format '<type>://<container_id>'.\nWhere type is a container runtime identifier, returned from Version call of CRI API\n(for example \"containerd\").\n+optional",
          "type": "string",
          "x-go-name": "ContainerID"
        },
        "image": {
          "description": "Image is the name of container image that the container is running.\nThe container image may not match the image used in the PodSpec,\nas it may have been resolved by the runtime.\nMore info: https://kubernetes.io/docs/concepts/containers/images.",
          "type": "string",
          "x-go-name": "Image"
        },
        "imageID": {
          "description": "ImageID is the image ID of the container's image. The image ID may not\nmatch the image ID of the image used in the PodSpec, as it may have been\nresolved by the runtime.",
          "type": "string",
          "x-go-name": "ImageID"
        },
        "lastState": {
          "$ref": "#/definitions/ContainerState"
        },
        "name": {
          "description": "Name is a DNS_LABEL representing the unique name of the container.\nEach container in a pod must have a unique name across all container types.\nCannot be updated.",
          "type": "string",
          "x-go-name": "Name"
        },
        "ready": {
          "description": "Ready specifies whether the container is currently passing its readiness check.\nThe value will change as readiness probes keep executing. If no readiness\nprobes are specified, this field defaults to true once the container is\nfully started (see Started field).\n\nThe value is typically used to determine whether a container is ready to\naccept traffic.",
          "type": "boolean",
          "x-go-name": "Ready"
        },
        "resources": {
          "$ref": "#/definitions/ResourceRequirements"
        },
        "restartCount": {
          "description": "RestartCount holds the number of times the container has been restarted.\nKubelet makes an effort to always increment the value, but there\nare cases when the state may be lost due to node restarts and then the value\nmay be reset to 0. The value is never negative.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "RestartCount"
        },
        "started": {
          "description": "Started indicates whether the container has finished its postStart lifecycle hook\nand passed its startup probe.\nInitialized as false, becomes true after startupProbe is considered\nsuccessful. Resets to false when the container is restarted, or if kubelet\nloses state temporarily. In both cases, startup probes will run again.\nIs always true when no startupProbe is defined and container is running and\nhas passed the postStart lifecycle hook. The null value must be treated the\nsame as false.\n+optional",
          "type": "boolean",
          "x-go-name": "Started"
        },
        "state": {
          "$ref": "#/definitions/ContainerState"
        },
        "stopSignal": {
          "$ref": "#/definitions/Signal"
        },
        "user": {
          "$ref": "#/definitions/ContainerUser"
        },
        "volumeMounts": {
          "description": "Status of volume mounts.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge\n+listType=map\n+listMapKey=mountPath",
          "type": "array",
          "items": {
            "$ref": "#/definitions/VolumeMountStatus"
          },
          "x-go-name": "VolumeMounts"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContainerUser": {
      "description": "ContainerUser represents user identity information",
      "type": "object",
      "properties": {
        "linux": {
          "$ref": "#/definitions/LinuxContainerUser"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ContentVersion": {
      "type": "object",
      "properties": {
        "branch": {
          "type": "string",
          "x-go-name": "Branch"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "last_sync_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastSyncAt"
        },
        "last_sync_commit": {
          "type": "string",
          "x-go-name": "LastSyncCommit"
        },
        "last_sync_error": {
          "type": "string",
          "x-go-name": "LastSyncError"
        },
        "last_sync_notice": {
          "type": "string",
          "x-go-name": "LastSyncNotice"
        },
        "repo_id": {
          "type": "string",
          "x-go-name": "RepoID"
        },
        "source_version_id": {
          "type": "string",
          "x-go-name": "SourceVersionID"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "CreateClusterError": {
      "type": "object",
      "properties": {
        "maxAKS": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxAKS"
        },
        "maxDiskGiB": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxDiskGiB"
        },
        "maxEKS": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxEKS"
        },
        "maxGKE": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxGKE"
        },
        "maxMemoryGiB": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxMemoryGiB"
        },
        "maxOKE": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxOKE"
        },
        "maxVCPUs": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxVCPUs"
        },
        "message": {
          "type": "string",
          "x-go-name": "Message"
        },
        "validationError": {
          "$ref": "#/definitions/ValidationError"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cluster"
    },
    "CreateClusterParametersBody": {
      "type": "object",
      "properties": {
        "additional_node_groups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CreateNodeGroupParameters"
          },
          "x-go-name": "AdditionalNodeGroups"
        },
        "default_node_group": {
          "$ref": "#/definitions/CreateNodeGroupParameters"
        },
        "disk_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DiskGiB"
        },
        "instance_type": {
          "description": "following params are deprecated but remain to support cli versions <= 0.72.0\nthis handler will construct everything into DefaultNodeGroup and AdditionalNodeGroups\nin the Bind method",
          "type": "string",
          "x-go-name": "InstanceType"
        },
        "ip_family": {
          "type": "string",
          "x-go-name": "IPFamily"
        },
        "kubernetes_distribution": {
          "type": "string",
          "x-go-name": "KubernetesDistribution"
        },
        "kubernetes_version": {
          "type": "string",
          "x-go-name": "KubernetesVersion"
        },
        "license_id": {
          "type": "string",
          "x-go-name": "LicenseID"
        },
        "max_node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxNodeCount"
        },
        "min_node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MinNodeCount"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "network_policy": {
          "type": "string",
          "x-go-name": "NetworkPolicy"
        },
        "node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NodeCount"
        },
        "node_groups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CreateNodeGroupParameters"
          },
          "x-go-name": "NodeGroups"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "x-go-name": "Tags"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cluster"
    },
    "CreateCustomHostnameParams": {
      "type": "object",
      "properties": {
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/custom_hostnames"
    },
    "CreateNetworkError": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "x-go-name": "Message"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/network"
    },
    "CreateNetworkParametersBody": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "policy": {
          "type": "string",
          "x-go-name": "Policy"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/network"
    },
    "CreateNodeGroupParameters": {
      "type": "object",
      "properties": {
        "disk_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DiskGiB"
        },
        "instance_type": {
          "type": "string",
          "x-go-name": "InstanceType"
        },
        "max_node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxNodeCount"
        },
        "min_node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MinNodeCount"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NodeCount"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cluster"
    },
    "CreateUserApiTokenRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "read_only": {
          "type": "boolean",
          "x-go-name": "ReadOnly"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/schema"
    },
    "CreateVMError": {
      "type": "object",
      "properties": {
        "maxDiskGiB": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxDiskGiB"
        },
        "maxMemoryGiB": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxMemoryGiB"
        },
        "maxVCPUs": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxVCPUs"
        },
        "message": {
          "type": "string",
          "x-go-name": "Message"
        },
        "validationError": {
          "$ref": "#/definitions/VMValidationError"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/vm"
    },
    "CreateVMParametersBody": {
      "type": "object",
      "properties": {
        "anthropic_api_key": {
          "description": "OpenClaw VM credentials — required when Distribution == \"openclaw\"",
          "type": "string",
          "x-go-name": "AnthropicAPIKey"
        },
        "count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Count"
        },
        "disk_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DiskGiB"
        },
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "instance_type": {
          "type": "string",
          "x-go-name": "InstanceType"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "network_id": {
          "type": "string",
          "x-go-name": "NetworkID"
        },
        "network_policy": {
          "type": "string",
          "x-go-name": "NetworkPolicy"
        },
        "overlayfs": {
          "description": "Overlayfs enables overlay filesystem management for the VM rootfs on the host.\nGated by the cmx_overlayfs feature flag.",
          "type": "boolean",
          "x-go-name": "Overlayfs"
        },
        "public_keys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "PublicKeys"
        },
        "rbac_policy_id": {
          "description": "RBACPolicyID is the ID of an existing RBAC policy to assign to the VM.\nWhen set, OIDC client credentials are generated and injected into the VM via\nthe Firecracker metadata service (MMDS), enabling the replicated CLI inside\nthe VM to authenticate with vendor-api automatically.",
          "type": "string",
          "x-go-name": "RBACPolicyID"
        },
        "replicated_api_key": {
          "description": "ReplicatedAPIKey is a vendor-api token for the replicated CLI inside the VM.\nRequired for openclaw VMs when rbac_policy_id is not set. Mutually exclusive\nwith rbac_policy_id — exactly one must be provided for openclaw VMs.",
          "type": "string",
          "x-go-name": "ReplicatedAPIKey"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "x-go-name": "Tags"
        },
        "telegram_bot_token": {
          "type": "string",
          "x-go-name": "TelegramBotToken"
        },
        "telegram_user_id": {
          "type": "string",
          "x-go-name": "TelegramUserID"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/vm"
    },
    "CustomHeaderInput": {
      "description": "CustomHeaderInput represents a custom HTTP header provided by the user (name + plaintext value)",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/types"
    },
    "CustomHeaderMasked": {
      "description": "CustomHeaderMasked represents a custom HTTP header with its value masked for API responses",
      "type": "object",
      "properties": {
        "maskedValue": {
          "type": "string",
          "x-go-name": "MaskedValue"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/types"
    },
    "CustomHostnameOverride": {
      "type": "object",
      "properties": {
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "CustomHostnameOverrides": {
      "type": "object",
      "properties": {
        "downloadPortal": {
          "$ref": "#/definitions/CustomHostnameOverride"
        },
        "proxy": {
          "$ref": "#/definitions/CustomHostnameOverride"
        },
        "registry": {
          "$ref": "#/definitions/CustomHostnameOverride"
        },
        "replicatedApp": {
          "$ref": "#/definitions/CustomHostnameOverride"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "CustomInstructions": {
      "description": "CustomInstructions represents customizable install instructions per channel\nThe presence of a record indicates MDX mode; absence means use legacy format",
      "type": "object",
      "properties": {
        "channel_id": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "enabled": {
          "type": "boolean",
          "x-go-name": "Enabled"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "mdx_template": {
          "type": "string",
          "x-go-name": "MDXTemplate"
        },
        "renderer_version": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "RendererVersion"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "CustomSignupFieldDefinition": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "label": {
          "type": "string",
          "x-go-name": "Label"
        },
        "placeholder": {
          "type": "string",
          "x-go-name": "Placeholder"
        },
        "required": {
          "type": "boolean",
          "x-go-name": "Required"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "Customer": {
      "type": "object",
      "properties": {
        "actions": {
          "$ref": "#/definitions/CustomerActions"
        },
        "activeInstances": {
          "$ref": "#/definitions/InstancePreview"
        },
        "airgap": {
          "type": "boolean",
          "x-go-name": "IsAirgapEnabled"
        },
        "airgapDownloadedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AirgapDownloadedAt"
        },
        "airgapDownloadedChannelId": {
          "type": "string",
          "x-go-name": "AirgapDownloadedChannelID"
        },
        "airgapDownloadedChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "AirgapDownloadedChannelSequence"
        },
        "airgapDownloadedReleaseLabel": {
          "type": "string",
          "x-go-name": "AirgapDownloadedReleaseLabel"
        },
        "airgapDownloadedReleaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "AirgapDownloadedReleaseSequence"
        },
        "appType": {
          "type": "string",
          "x-go-name": "AppType"
        },
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerChannelWithDetail"
          },
          "x-go-name": "Channels"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "createdBy": {
          "$ref": "#/definitions/Actor"
        },
        "customId": {
          "type": "string",
          "x-go-name": "CustomID"
        },
        "downloadPortalUrl": {
          "type": "string",
          "x-go-name": "DownloadPortalURL"
        },
        "email": {
          "type": "string",
          "x-go-name": "Email"
        },
        "enterprise_portal": {
          "$ref": "#/definitions/EnterprisePortalInfo"
        },
        "entitlements": {
          "$ref": "#/definitions/EntitlementValues"
        },
        "esInstances": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerESInstance"
          },
          "x-go-name": "ESInstances"
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "inactiveInstances": {
          "$ref": "#/definitions/InstancePreview"
        },
        "installationId": {
          "type": "string",
          "x-go-name": "InstallationID"
        },
        "installationVersion": {
          "type": "string",
          "x-go-name": "InstallationVersion"
        },
        "installedReleaseLabel": {
          "type": "string",
          "x-go-name": "InstalledReleaseLabel"
        },
        "installedReleaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InstalledReleaseSequence"
        },
        "instances": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerInstance"
          },
          "x-go-name": "Instances"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isDevModeEnabled": {
          "type": "boolean",
          "x-go-name": "IsDevModeEnabled"
        },
        "isDisasterRecoverySupported": {
          "type": "boolean",
          "x-go-name": "IsDisasterRecoverySupported"
        },
        "isEmbeddedClusterDownloadEnabled": {
          "type": "boolean",
          "x-go-name": "IsEmbeddedClusterDownloadEnabled"
        },
        "isEmbeddedClusterMultiNodeEnabled": {
          "type": "boolean",
          "x-go-name": "IsEmbeddedClusterMultiNodeEnabled"
        },
        "isEnterprisePortalEnabled": {
          "type": "boolean",
          "x-go-name": "IsEnterprisePortalEnabled"
        },
        "isGeoaxisSupported": {
          "type": "boolean",
          "x-go-name": "IsGeoaxisSupported"
        },
        "isGitopsSupported": {
          "type": "boolean",
          "x-go-name": "IsGitopsSupported"
        },
        "isHelmAirgapEnabled": {
          "type": "boolean",
          "x-go-name": "IsHelmAirgapEnabled"
        },
        "isHelmInstallEnabled": {
          "type": "boolean",
          "x-go-name": "IsHelmInstallEnabled"
        },
        "isIdentityServiceSupported": {
          "type": "boolean",
          "x-go-name": "IsIdentityServiceSupported"
        },
        "isInstallerSupportEnabled": {
          "type": "boolean",
          "x-go-name": "IsInstallerSupportEnabled"
        },
        "isInstancesLimited": {
          "type": "boolean",
          "x-go-name": "IsInstancesLimited"
        },
        "isKotsInstallEnabled": {
          "type": "boolean",
          "x-go-name": "IsKotsInstallEnabled"
        },
        "isKurlInstallEnabled": {
          "type": "boolean",
          "x-go-name": "IsKurlInstallEnabled"
        },
        "isSecurityCenterEnabled": {
          "type": "boolean",
          "x-go-name": "IsSecurityCenterEnabled"
        },
        "isSnapshotSupported": {
          "type": "boolean",
          "x-go-name": "IsSnapshotSupported"
        },
        "isSupportBundleUploadEnabled": {
          "type": "boolean",
          "x-go-name": "IsSupportBundleUploadEnabled"
        },
        "lastActive": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastActive"
        },
        "lowercaseName": {
          "description": "Lowercase fields for ES customer sorting",
          "type": "string",
          "x-go-name": "LowercaseName"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "pinnedChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "PinnedChannelSequence"
        },
        "samlAllowed": {
          "description": "SAML configuration",
          "type": "boolean",
          "x-go-name": "SamlAllowed"
        },
        "shipInstallStatus": {
          "$ref": "#/definitions/ShipInstallStatus"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "type": {
          "$ref": "#/definitions/LicenseType"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "updatedBy": {
          "$ref": "#/definitions/Actor"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerActions": {
      "type": "object",
      "properties": {
        "shipApply": {
          "type": "string",
          "x-go-name": "ShipApply"
        },
        "shipApplyDocker": {
          "type": "string",
          "x-go-name": "ShipApplyDocker"
        },
        "shipInitCloud": {
          "type": "string",
          "x-go-name": "ShipInitCloud"
        },
        "shipInitHomebrew": {
          "type": "string",
          "x-go-name": "ShipInitHomebrew"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerAdoption": {
      "type": "object",
      "properties": {
        "channelId": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Count"
        },
        "percent": {
          "type": "number",
          "format": "double",
          "x-go-name": "Percent"
        },
        "releaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ReleaseSequence"
        },
        "semver": {
          "type": "string",
          "x-go-name": "Semver"
        },
        "totalOnChannel": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalOnChannel"
        },
        "versionsFromLatest": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "VersionsFromLatest"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/sharedtypes"
    },
    "CustomerChannel": {
      "type": "object",
      "properties": {
        "channel_id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "is_default_for_customer": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "pinned_channel_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "PinnedChannelSequence"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerChannelWithDetail": {
      "type": "object",
      "properties": {
        "adoptionRate": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerAdoption"
          },
          "x-go-name": "AdoptionRate"
        },
        "airgapDiffBundlesEnabled": {
          "type": "boolean",
          "x-go-name": "AirgapDiffBundlesEnabled"
        },
        "airgapDockerRegistryFormatEnabled": {
          "type": "boolean",
          "x-go-name": "AirgapDockerRegistryFormatEnabled"
        },
        "allowPublishableKey": {
          "type": "boolean",
          "x-go-name": "AllowPublishableKey"
        },
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "appName": {
          "type": "string",
          "x-go-name": "AppName"
        },
        "appSlug": {
          "type": "string",
          "x-go-name": "AppSlug"
        },
        "buildAirgapAutomatically": {
          "type": "boolean",
          "x-go-name": "BuildAirgapAutomatically"
        },
        "channelIcon": {
          "type": "string",
          "x-go-name": "ChannelIcon"
        },
        "channelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "channelSlug": {
          "type": "string",
          "x-go-name": "Slug"
        },
        "channel_id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "chartReleases": {
          "description": "ChartReleases is a map of chart name -> []string of version labels",
          "type": "array",
          "items": {
            "$ref": "#/definitions/HelmChart"
          },
          "x-go-name": "ChartReleases"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Created"
        },
        "currentVersion": {
          "type": "string",
          "x-go-name": "CurrentVersion"
        },
        "customHostnameOverrides": {
          "$ref": "#/definitions/CustomHostnameOverrides"
        },
        "customers": {
          "$ref": "#/definitions/TotalActiveInactiveCustomers"
        },
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "embeddedClusterInstallCommand": {
          "type": "string",
          "x-go-name": "EmbeddedClusterInstallCommand"
        },
        "enterprisePartnerChannelID": {
          "type": "string",
          "x-go-name": "EnterprisePartnerChannelID"
        },
        "existingClusterInstallCommand": {
          "type": "string",
          "x-go-name": "ExistingClusterInstallCommand"
        },
        "extraLintRules": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ExtraLintRules"
          },
          "x-go-name": "ExtraLintRules"
        },
        "gitHubRef": {
          "$ref": "#/definitions/GitHubRef"
        },
        "hasKurlInstaller": {
          "description": "swager:ignore",
          "type": "boolean",
          "x-go-name": "HasKurlInstaller"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isDefault": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "isHelmOnly": {
          "type": "boolean",
          "x-go-name": "IsHelmOnly"
        },
        "is_default_for_customer": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "latestChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "LatestChannelSequence"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "numActiveInstances": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NumActiveInstances"
        },
        "numReleases": {
          "type": "integer",
          "format": "int32",
          "x-go-name": "NumReleases"
        },
        "pinned_channel_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "PinnedChannelSequence"
        },
        "releaseNotes": {
          "type": "string",
          "x-go-name": "ReleaseNotes"
        },
        "releaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ReleaseSequence"
        },
        "releases": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/KotsChannelRelease"
          },
          "x-go-name": "Releases"
        },
        "replicatedRegistryDomain": {
          "type": "string",
          "x-go-name": "ReplicatedRegistryDomain"
        },
        "semverRequired": {
          "type": "boolean",
          "x-go-name": "SemverRequired"
        },
        "semverWarning": {
          "type": "string",
          "x-go-name": "SemverWarning"
        },
        "targetKotsVersion": {
          "type": "string",
          "x-go-name": "TargetKotsVersion"
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Updated"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerESInstance": {
      "type": "object",
      "title": "Instance data saved in ES along with customer license. Only active instances are saved.",
      "properties": {
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "downstreamChannelId": {
          "type": "string",
          "x-go-name": "DownstreamChannelID"
        },
        "downstreamChannelName": {
          "type": "string",
          "x-go-name": "DownstreamChannelName"
        },
        "downstreamChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DownstreamChannelSequence"
        },
        "installedReleaseLabel": {
          "type": "string",
          "x-go-name": "InstalledReleaseLabel"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "tags": {
          "$ref": "#/definitions/InstanceTags"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerEntitlement": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/customers"
    },
    "CustomerInstallOptions": {
      "type": "object",
      "properties": {
        "admin_console_url": {
          "type": "string",
          "x-go-name": "AdminConsoleURL"
        },
        "assets_downloaded_at": {
          "description": "New fields for tracking installation progress",
          "type": "string",
          "format": "date-time",
          "x-go-name": "AssetsDownloadedAt"
        },
        "browser_install_completed_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "BrowserInstallCompletedAt"
        },
        "channel_id": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "channel_release_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "customer_email": {
          "type": "string",
          "x-go-name": "CustomerEmail"
        },
        "customer_id": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "images_pulled_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ImagesPulledAt"
        },
        "install_type": {
          "type": "string",
          "x-go-name": "InstallType"
        },
        "installation_completed_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "InstallationCompletedAt"
        },
        "instance_id": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "instance_name": {
          "type": "string",
          "x-go-name": "InstanceName"
        },
        "is_multi_node": {
          "type": "boolean",
          "x-go-name": "IsMultiNode"
        },
        "kubernetes_distribution": {
          "type": "string",
          "x-go-name": "KubernetesDistribution"
        },
        "license_id": {
          "type": "string",
          "x-go-name": "LicenseID"
        },
        "network_availability": {
          "type": "string",
          "x-go-name": "NetworkAvailability"
        },
        "os_distro": {
          "type": "string",
          "x-go-name": "OSDistro"
        },
        "os_version": {
          "type": "string",
          "x-go-name": "OSVersion"
        },
        "registry_authenticated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RegistryAuthenticatedAt"
        },
        "registry_availability": {
          "type": "string",
          "x-go-name": "RegistryAvailability"
        },
        "service_account_id": {
          "type": "string",
          "x-go-name": "ServiceAccountID"
        },
        "service_account_token": {
          "type": "string",
          "x-go-name": "ServiceAccountToken"
        },
        "started_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "StartedAt"
        },
        "status": {
          "type": "string",
          "x-go-name": "Status"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "CustomerInstance": {
      "type": "object",
      "properties": {
        "active": {
          "type": "boolean",
          "x-go-name": "Active"
        },
        "appStatus": {
          "type": "string",
          "x-go-name": "AppStatus"
        },
        "client": {
          "type": "string",
          "x-go-name": "Client"
        },
        "cloud": {
          "type": "string",
          "x-go-name": "Cloud"
        },
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "embeddedClusterVersion": {
          "type": "string",
          "x-go-name": "EmbeddedClusterVersion"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "isAirgap": {
          "type": "boolean",
          "x-go-name": "IsAirgap"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isDummyInstance": {
          "type": "boolean",
          "x-go-name": "IsDummyInstance"
        },
        "isEmbeddedCluster": {
          "type": "boolean",
          "x-go-name": "IsEmbeddedCluster"
        },
        "isKurl": {
          "type": "boolean",
          "x-go-name": "IsKurl"
        },
        "k8sVersion": {
          "type": "string",
          "x-go-name": "K8sVersion"
        },
        "kotsVersion": {
          "type": "string",
          "x-go-name": "KotsVersion"
        },
        "kurlNodeCountReady": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "KurlNodeCountReady"
        },
        "kurlNodeCountTotal": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "KurlNodeCountTotal"
        },
        "lastActive": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastActive"
        },
        "licenseId": {
          "type": "string",
          "x-go-name": "LicenseID"
        },
        "replicatedSdkVersion": {
          "type": "string",
          "x-go-name": "ReplicatedSDKVersion"
        },
        "securitySummary": {
          "$ref": "#/definitions/InstanceSecuritySummary"
        },
        "serviceAccountId": {
          "type": "string",
          "x-go-name": "ServiceAccountID"
        },
        "tags": {
          "$ref": "#/definitions/InstanceTags"
        },
        "versionHistory": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerInstanceVersionHistory"
          },
          "x-go-name": "VersionHistory"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerInstanceVersionHistory": {
      "type": "object",
      "properties": {
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "downstreamChannelId": {
          "type": "string",
          "x-go-name": "DownstreamChannelID"
        },
        "downstreamReleaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DownstreamReleaseSequence"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "intervalLast": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "IntervalLast"
        },
        "intervalStart": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "IntervalStart"
        },
        "nativeHelmCount": {
          "type": "integer",
          "format": "int32",
          "x-go-name": "NativeHelmCount"
        },
        "replHelmCount": {
          "type": "integer",
          "format": "int32",
          "x-go-name": "ReplHelmCount"
        },
        "versionLabel": {
          "type": "string",
          "x-go-name": "VersionLabel"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "CustomerInvite": {
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "appSlug": {
          "type": "string",
          "x-go-name": "AppSlug"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "customerName": {
          "type": "string",
          "x-go-name": "CustomerName"
        },
        "emailAddress": {
          "type": "string",
          "x-go-name": "EmailAddress"
        },
        "expireAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpireAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "inviteNonce": {
          "type": "string",
          "x-go-name": "Nonce"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "CustomerUser": {
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "customerName": {
          "type": "string",
          "x-go-name": "CustomerName"
        },
        "emailAddress": {
          "type": "string",
          "x-go-name": "EmailAddress"
        },
        "firstAccessedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "FirstAccessedAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "invitedAt": {
          "type": "string",
          "x-go-name": "InvitedAt"
        },
        "lastAccessedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastAccessedAt"
        },
        "pendingInvite": {
          "type": "boolean",
          "x-go-name": "PendingInvite"
        },
        "role": {
          "type": "string",
          "x-go-name": "Role"
        },
        "viewCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ViewCount"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "DNSPolicy": {
      "description": "+enum",
      "type": "string",
      "title": "DNSPolicy defines how a pod's DNS will be configured.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "DeleteCustomHostnameParams": {
      "type": "object",
      "properties": {
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/custom_hostnames"
    },
    "DistributionType": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "Documentation": {
      "type": "object",
      "properties": {
        "embedded_cluster_install_url": {
          "type": "string",
          "x-go-name": "EmbeddedClusterInstallURL"
        },
        "embedded_cluster_post_install": {
          "type": "string",
          "x-go-name": "EmbeddedClusterPostInstall"
        },
        "embedded_cluster_pre_install": {
          "type": "string",
          "x-go-name": "EmbeddedClusterPreInstall"
        },
        "helm_install_url": {
          "type": "string",
          "x-go-name": "HelmInstallURL"
        },
        "helm_post_install": {
          "type": "string",
          "x-go-name": "HelmPostInstall"
        },
        "helm_pre_install": {
          "type": "string",
          "x-go-name": "HelmPreInstall"
        },
        "kots_install_url": {
          "type": "string",
          "x-go-name": "KOTSInstallURL"
        },
        "kurl_install_url": {
          "type": "string",
          "x-go-name": "KURLInstallURL"
        },
        "values_override_url": {
          "type": "string",
          "x-go-name": "ValuesOverrideURL"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "DownwardAPIProjection": {
      "description": "Note that this is identical to a downwardAPI volume source without the default\nmode.",
      "type": "object",
      "title": "Represents downward API info for projecting into a projected volume.",
      "properties": {
        "items": {
          "description": "Items is a list of DownwardAPIVolume file\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DownwardAPIVolumeFile"
          },
          "x-go-name": "Items"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "DownwardAPIVolumeFile": {
      "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field",
      "type": "object",
      "properties": {
        "fieldRef": {
          "$ref": "#/definitions/ObjectFieldSelector"
        },
        "mode": {
          "description": "Optional: mode bits used to set permissions on this file, must be an octal value\nbetween 0000 and 0777 or a decimal value between 0 and 511.\nYAML accepts both octal and decimal values, JSON requires decimal values for mode bits.\nIf not specified, the volume defaultMode will be used.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Mode"
        },
        "path": {
          "description": "Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'",
          "type": "string",
          "x-go-name": "Path"
        },
        "resourceFieldRef": {
          "$ref": "#/definitions/ResourceFieldSelector"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "DownwardAPIVolumeSource": {
      "description": "Downward API volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "DownwardAPIVolumeSource represents a volume containing downward API info.",
      "properties": {
        "defaultMode": {
          "description": "Optional: mode bits to use on created files by default. Must be a\nOptional: mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0 and 511.\nYAML accepts both octal and decimal values, JSON requires decimal values for mode bits.\nDefaults to 0644.\nDirectories within the path are not affected by this setting.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "DefaultMode"
        },
        "items": {
          "description": "Items is a list of downward API volume file\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/DownwardAPIVolumeFile"
          },
          "x-go-name": "Items"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EPAccessMilestoneInfo": {
      "type": "object",
      "title": "EPAccessMilestoneInfo is the per-license-type EP access milestone exposed in the API.",
      "properties": {
        "access_granted_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AccessGrantedAt"
        },
        "access_method": {
          "type": "string",
          "x-go-name": "AccessMethod"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "ESCustomer": {
      "type": "object",
      "properties": {
        "actions": {
          "$ref": "#/definitions/CustomerActions"
        },
        "activeInstances": {
          "$ref": "#/definitions/InstancePreview"
        },
        "airgap": {
          "type": "boolean",
          "x-go-name": "IsAirgapEnabled"
        },
        "airgapDownloadedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AirgapDownloadedAt"
        },
        "airgapDownloadedChannelId": {
          "type": "string",
          "x-go-name": "AirgapDownloadedChannelID"
        },
        "airgapDownloadedChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "AirgapDownloadedChannelSequence"
        },
        "airgapDownloadedReleaseLabel": {
          "type": "string",
          "x-go-name": "AirgapDownloadedReleaseLabel"
        },
        "airgapDownloadedReleaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "AirgapDownloadedReleaseSequence"
        },
        "airgapInstancesCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "AirgapInstancesCount"
        },
        "appType": {
          "type": "string",
          "x-go-name": "AppType"
        },
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerChannelWithDetail"
          },
          "x-go-name": "Channels"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "createdBy": {
          "$ref": "#/definitions/Actor"
        },
        "customId": {
          "type": "string",
          "x-go-name": "CustomID"
        },
        "downloadPortalUrl": {
          "type": "string",
          "x-go-name": "DownloadPortalURL"
        },
        "email": {
          "type": "string",
          "x-go-name": "Email"
        },
        "enterprise_portal": {
          "$ref": "#/definitions/EnterprisePortalInfo"
        },
        "entitlements": {
          "$ref": "#/definitions/EntitlementValues"
        },
        "esInstances": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerESInstance"
          },
          "x-go-name": "ESInstances"
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "inactiveInstances": {
          "$ref": "#/definitions/InstancePreview"
        },
        "inactiveInstancesCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InactiveInstancesCount"
        },
        "installationId": {
          "type": "string",
          "x-go-name": "InstallationID"
        },
        "installationVersion": {
          "type": "string",
          "x-go-name": "InstallationVersion"
        },
        "installedReleaseLabel": {
          "type": "string",
          "x-go-name": "InstalledReleaseLabel"
        },
        "installedReleaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InstalledReleaseSequence"
        },
        "instances": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerInstance"
          },
          "x-go-name": "Instances"
        },
        "isActive": {
          "type": "boolean",
          "x-go-name": "IsActive"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isDevModeEnabled": {
          "type": "boolean",
          "x-go-name": "IsDevModeEnabled"
        },
        "isDisasterRecoverySupported": {
          "type": "boolean",
          "x-go-name": "IsDisasterRecoverySupported"
        },
        "isEmbeddedClusterDownloadEnabled": {
          "type": "boolean",
          "x-go-name": "IsEmbeddedClusterDownloadEnabled"
        },
        "isEmbeddedClusterMultiNodeEnabled": {
          "type": "boolean",
          "x-go-name": "IsEmbeddedClusterMultiNodeEnabled"
        },
        "isEnterprisePortalEnabled": {
          "type": "boolean",
          "x-go-name": "IsEnterprisePortalEnabled"
        },
        "isGeoaxisSupported": {
          "type": "boolean",
          "x-go-name": "IsGeoaxisSupported"
        },
        "isGitopsSupported": {
          "type": "boolean",
          "x-go-name": "IsGitopsSupported"
        },
        "isHelmAirgapEnabled": {
          "type": "boolean",
          "x-go-name": "IsHelmAirgapEnabled"
        },
        "isHelmInstallEnabled": {
          "type": "boolean",
          "x-go-name": "IsHelmInstallEnabled"
        },
        "isIdentityServiceSupported": {
          "type": "boolean",
          "x-go-name": "IsIdentityServiceSupported"
        },
        "isInstallerSupportEnabled": {
          "type": "boolean",
          "x-go-name": "IsInstallerSupportEnabled"
        },
        "isInstancesLimited": {
          "type": "boolean",
          "x-go-name": "IsInstancesLimited"
        },
        "isKotsInstallEnabled": {
          "type": "boolean",
          "x-go-name": "IsKotsInstallEnabled"
        },
        "isKurlInstallEnabled": {
          "type": "boolean",
          "x-go-name": "IsKurlInstallEnabled"
        },
        "isSecurityCenterEnabled": {
          "type": "boolean",
          "x-go-name": "IsSecurityCenterEnabled"
        },
        "isSnapshotSupported": {
          "type": "boolean",
          "x-go-name": "IsSnapshotSupported"
        },
        "isSupportBundleUploadEnabled": {
          "type": "boolean",
          "x-go-name": "IsSupportBundleUploadEnabled"
        },
        "lastActive": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastActive"
        },
        "lowercaseName": {
          "description": "Lowercase fields for ES customer sorting",
          "type": "string",
          "x-go-name": "LowercaseName"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "onlineActiveInstancesCount": {
          "description": "Server-computed instance counts for hybrid view",
          "type": "integer",
          "format": "int64",
          "x-go-name": "OnlineActiveInstancesCount"
        },
        "pinnedChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "PinnedChannelSequence"
        },
        "samlAllowed": {
          "description": "SAML configuration",
          "type": "boolean",
          "x-go-name": "SamlAllowed"
        },
        "shipInstallStatus": {
          "$ref": "#/definitions/ShipInstallStatus"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "totalInstancesCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalInstancesCount"
        },
        "type": {
          "$ref": "#/definitions/LicenseType"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "updatedBy": {
          "$ref": "#/definitions/Actor"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer"
    },
    "EmailHistoryItem": {
      "description": "EmailHistoryItem represents an email with its latest status for display",
      "type": "object",
      "properties": {
        "bounceType": {
          "type": "string",
          "x-go-name": "BounceType"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "customerName": {
          "type": "string",
          "x-go-name": "CustomerName"
        },
        "emailType": {
          "type": "string",
          "x-go-name": "EmailType"
        },
        "fromEmail": {
          "type": "string",
          "x-go-name": "FromEmail"
        },
        "latestEventAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LatestEventAt"
        },
        "latestStatus": {
          "type": "string",
          "x-go-name": "LatestStatus"
        },
        "messageId": {
          "type": "string",
          "x-go-name": "MessageID"
        },
        "sentAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "SentAt"
        },
        "subject": {
          "type": "string",
          "x-go-name": "Subject"
        },
        "templateName": {
          "type": "string",
          "x-go-name": "TemplateName"
        },
        "toEmail": {
          "type": "string",
          "x-go-name": "ToEmail"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "EmptyDirVolumeSource": {
      "description": "Empty directory volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents an empty directory for a pod.",
      "properties": {
        "medium": {
          "$ref": "#/definitions/StorageMedium"
        },
        "sizeLimit": {
          "$ref": "#/definitions/Quantity"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EnterprisePortalInfo": {
      "description": "EnterprisePortalInfo contains Enterprise Portal status and timestamps for a customer",
      "type": "object",
      "properties": {
        "access_granted_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AccessGrantedAt"
        },
        "access_granted_by": {
          "description": "AccessGrantedBy is the email address of the first user who activated EP access for this customer.",
          "type": "string",
          "x-go-name": "AccessGrantedBy"
        },
        "access_method": {
          "type": "string",
          "x-go-name": "AccessMethod"
        },
        "access_milestones": {
          "description": "AccessMilestones maps license_type → first access info for that license type.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/EPAccessMilestoneInfo"
          },
          "x-go-name": "AccessMilestones"
        },
        "enabled": {
          "type": "boolean",
          "x-go-name": "Enabled"
        },
        "first_invite_sent_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "FirstInviteSentAt"
        },
        "first_software_pulled_asset_type": {
          "description": "FirstSoftwarePulledAssetType is the type of asset pulled first.\nPossible values: \"helm_chart\", \"embedded_cluster_bundle\", \"proxy_image\".",
          "type": "string",
          "x-go-name": "FirstSoftwarePulledAssetType"
        },
        "first_software_pulled_asset_version": {
          "description": "FirstSoftwarePulledAssetVersion is the version/tag of the asset pulled first.",
          "type": "string",
          "x-go-name": "FirstSoftwarePulledAssetVersion"
        },
        "first_software_pulled_at": {
          "description": "FirstSoftwarePulledAt is the timestamp of the customer's first completed software pull\n(Helm chart, Embedded Cluster bundle, or proxy registry image). Null for customers\nwhose first pull occurred before this feature was introduced (forward-only tracking).",
          "type": "string",
          "format": "date-time",
          "x-go-name": "FirstSoftwarePulledAt"
        },
        "last_software_pulled_asset_type": {
          "description": "LastSoftwarePulledAssetType is the type of the most recently pulled asset.",
          "type": "string",
          "x-go-name": "LastSoftwarePulledAssetType"
        },
        "last_software_pulled_asset_version": {
          "description": "LastSoftwarePulledAssetVersion is the version/tag of the most recently pulled asset.",
          "type": "string",
          "x-go-name": "LastSoftwarePulledAssetVersion"
        },
        "last_software_pulled_at": {
          "description": "LastSoftwarePulledAt is the timestamp of the customer's most recent completed software pull.\nOverwritten on every pull. Null until the customer's first pull after this feature was introduced.",
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastSoftwarePulledAt"
        },
        "software_pull_milestones": {
          "description": "SoftwarePullMilestones maps license_type → first pull info for that license type.",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/SoftwarePullMilestoneInfo"
          },
          "x-go-name": "SoftwarePullMilestones"
        },
        "total_active_users": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalActiveUsers"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "EnterprisePortalSettings": {
      "type": "object",
      "properties": {
        "allowedDomainsEnabled": {
          "type": "boolean",
          "x-go-name": "AllowedDomainsEnabled"
        },
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "portalVersion": {
          "type": "string",
          "x-go-name": "PortalVersion"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "EntitlementField": {
      "type": "object",
      "properties": {
        "default": {
          "type": "string",
          "x-go-name": "Default"
        },
        "enumOptions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "EnumOptions"
        },
        "hidden": {
          "type": "boolean",
          "x-go-name": "Hidden"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "required": {
          "type": "boolean",
          "x-go-name": "Required"
        },
        "title": {
          "type": "string",
          "x-go-name": "Title"
        },
        "type": {
          "$ref": "#/definitions/EntitlementValueType"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "EntitlementValue": {
      "type": "object",
      "properties": {
        "isDefault": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "EntitlementValueType": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "EntitlementValues": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/EntitlementValue"
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "EnvFromSource": {
      "description": "EnvFromSource represents the source of a set of ConfigMaps or Secrets",
      "type": "object",
      "properties": {
        "configMapRef": {
          "$ref": "#/definitions/ConfigMapEnvSource"
        },
        "prefix": {
          "description": "Optional text to prepend to the name of each environment variable.\nMay consist of any printable ASCII characters except '='.\n+optional",
          "type": "string",
          "x-go-name": "Prefix"
        },
        "secretRef": {
          "$ref": "#/definitions/SecretEnvSource"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EnvVar": {
      "type": "object",
      "title": "EnvVar represents an environment variable present in a Container.",
      "properties": {
        "name": {
          "description": "Name of the environment variable.\nMay consist of any printable ASCII characters except '='.",
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "description": "Variable references $(VAR_NAME) are expanded\nusing the previously defined environment variables in the container and\nany service environment variables. If a variable cannot be resolved,\nthe reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.\n\"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\".\nEscaped references will never be expanded, regardless of whether the variable\nexists or not.\nDefaults to \"\".\n+optional",
          "type": "string",
          "x-go-name": "Value"
        },
        "valueFrom": {
          "$ref": "#/definitions/EnvVarSource"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EnvVarSource": {
      "type": "object",
      "title": "EnvVarSource represents a source for the value of an EnvVar.",
      "properties": {
        "configMapKeyRef": {
          "$ref": "#/definitions/ConfigMapKeySelector"
        },
        "fieldRef": {
          "$ref": "#/definitions/ObjectFieldSelector"
        },
        "fileKeyRef": {
          "$ref": "#/definitions/FileKeySelector"
        },
        "resourceFieldRef": {
          "$ref": "#/definitions/ResourceFieldSelector"
        },
        "secretKeyRef": {
          "$ref": "#/definitions/SecretKeySelector"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EphemeralContainer": {
      "description": "To add an ephemeral container, use the ephemeralcontainers subresource of an existing\nPod. Ephemeral containers may not be removed or restarted.",
      "type": "object",
      "title": "An EphemeralContainer is a temporary container that you may add to an existing Pod for\nuser-initiated activities such as debugging. Ephemeral containers have no resource or\nscheduling guarantees, and they will not be restarted when they exit or when a Pod is\nremoved or restarted. The kubelet may evict a Pod if an ephemeral container causes the\nPod to exceed its resource allocation.",
      "properties": {
        "args": {
          "description": "Arguments to the entrypoint.\nThe image's CMD is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Args"
        },
        "command": {
          "description": "Entrypoint array. Not executed within a shell.\nThe image's ENTRYPOINT is used if this is not provided.\nVariable references $(VAR_NAME) are expanded using the container's environment. If a variable\ncannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will\nproduce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless\nof whether the variable exists or not. Cannot be updated.\nMore info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Command"
        },
        "env": {
          "description": "List of environment variables to set in the container.\nCannot be updated.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnvVar"
          },
          "x-go-name": "Env"
        },
        "envFrom": {
          "description": "List of sources to populate environment variables in the container.\nThe keys defined within a source may consist of any printable ASCII characters except '='.\nWhen a key exists in multiple\nsources, the value associated with the last source will take precedence.\nValues defined by an Env with a duplicate key will take precedence.\nCannot be updated.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnvFromSource"
          },
          "x-go-name": "EnvFrom"
        },
        "image": {
          "description": "Container image name.\nMore info: https://kubernetes.io/docs/concepts/containers/images",
          "type": "string",
          "x-go-name": "Image"
        },
        "imagePullPolicy": {
          "$ref": "#/definitions/PullPolicy"
        },
        "lifecycle": {
          "$ref": "#/definitions/Lifecycle"
        },
        "livenessProbe": {
          "$ref": "#/definitions/Probe"
        },
        "name": {
          "description": "Name of the ephemeral container specified as a DNS_LABEL.\nThis name must be unique among all containers, init containers and ephemeral containers.",
          "type": "string",
          "x-go-name": "Name"
        },
        "ports": {
          "description": "Ports are not allowed for ephemeral containers.\n+optional\n+patchMergeKey=containerPort\n+patchStrategy=merge\n+listType=map\n+listMapKey=containerPort\n+listMapKey=protocol",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerPort"
          },
          "x-go-name": "Ports"
        },
        "readinessProbe": {
          "$ref": "#/definitions/Probe"
        },
        "resizePolicy": {
          "description": "Resources resize policy for the container.\n+featureGate=InPlacePodVerticalScaling\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerResizePolicy"
          },
          "x-go-name": "ResizePolicy"
        },
        "resources": {
          "$ref": "#/definitions/ResourceRequirements"
        },
        "restartPolicy": {
          "$ref": "#/definitions/ContainerRestartPolicy"
        },
        "restartPolicyRules": {
          "description": "Represents a list of rules to be checked to determine if the\ncontainer should be restarted on exit. You cannot set this field on\nephemeral containers.\n+featureGate=ContainerRestartRules\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerRestartRule"
          },
          "x-go-name": "RestartPolicyRules"
        },
        "securityContext": {
          "$ref": "#/definitions/SecurityContext"
        },
        "startupProbe": {
          "$ref": "#/definitions/Probe"
        },
        "stdin": {
          "description": "Whether this container should allocate a buffer for stdin in the container runtime. If this\nis not set, reads from stdin in the container will always result in EOF.\nDefault is false.\n+optional",
          "type": "boolean",
          "x-go-name": "Stdin"
        },
        "stdinOnce": {
          "description": "Whether the container runtime should close the stdin channel after it has been opened by\na single attach. When stdin is true the stdin stream will remain open across multiple attach\nsessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the\nfirst client attaches to stdin, and then remains open and accepts data until the client disconnects,\nat which time stdin is closed and remains closed until the container is restarted. If this\nflag is false, a container processes that reads from stdin will never receive an EOF.\nDefault is false\n+optional",
          "type": "boolean",
          "x-go-name": "StdinOnce"
        },
        "targetContainerName": {
          "description": "If set, the name of the container from PodSpec that this ephemeral container targets.\nThe ephemeral container will be run in the namespaces (IPC, PID, etc) of this container.\nIf not set then the ephemeral container uses the namespaces configured in the Pod spec.\n\nThe container runtime must implement support for this feature. If the runtime does not\nsupport namespace targeting then the result of setting this field is undefined.\n+optional",
          "type": "string",
          "x-go-name": "TargetContainerName"
        },
        "terminationMessagePath": {
          "description": "Optional: Path at which the file to which the container's termination message\nwill be written is mounted into the container's filesystem.\nMessage written is intended to be brief final status, such as an assertion failure message.\nWill be truncated by the node if greater than 4096 bytes. The total message length across\nall containers will be limited to 12kb.\nDefaults to /dev/termination-log.\nCannot be updated.\n+optional",
          "type": "string",
          "x-go-name": "TerminationMessagePath"
        },
        "terminationMessagePolicy": {
          "$ref": "#/definitions/TerminationMessagePolicy"
        },
        "tty": {
          "description": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.\nDefault is false.\n+optional",
          "type": "boolean",
          "x-go-name": "TTY"
        },
        "volumeDevices": {
          "description": "volumeDevices is the list of block devices to be used by the container.\n+patchMergeKey=devicePath\n+patchStrategy=merge\n+listType=map\n+listMapKey=devicePath\n+optional",
          "type": "array",
          "items": {
            "$ref": "#/definitions/VolumeDevice"
          },
          "x-go-name": "VolumeDevices"
        },
        "volumeMounts": {
          "description": "Pod volumes to mount into the container's filesystem. Subpath mounts are not allowed for ephemeral containers.\nCannot be updated.\n+optional\n+patchMergeKey=mountPath\n+patchStrategy=merge\n+listType=map\n+listMapKey=mountPath",
          "type": "array",
          "items": {
            "$ref": "#/definitions/VolumeMount"
          },
          "x-go-name": "VolumeMounts"
        },
        "workingDir": {
          "description": "Container's working directory.\nIf not specified, the container runtime's default will be used, which\nmight be configured in the container image.\nCannot be updated.\n+optional",
          "type": "string",
          "x-go-name": "WorkingDir"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EphemeralVolumeSource": {
      "type": "object",
      "title": "Represents an ephemeral volume that is handled by a normal storage driver.",
      "properties": {
        "volumeClaimTemplate": {
          "$ref": "#/definitions/PersistentVolumeClaimTemplate"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Event": {
      "description": "Event is a report of an event somewhere in the cluster.  Events\nhave a limited retention time and triggers and messages may evolve\nwith time.  Event consumers should not rely on the timing of an event\nwith a given Reason reflecting a consistent underlying trigger, or the\ncontinued existence of events with that Reason.  Events should be\ntreated as informative, best-effort, supplemental data.",
      "type": "object",
      "properties": {
        "action": {
          "description": "What action was taken/failed regarding to the Regarding object.\n+optional",
          "type": "string",
          "x-go-name": "Action"
        },
        "annotations": {
          "description": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Annotations"
        },
        "apiVersion": {
          "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n+optional",
          "type": "string",
          "x-go-name": "APIVersion"
        },
        "count": {
          "description": "The number of times this event has occurred.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Count"
        },
        "creationTimestamp": {
          "description": "CreationTimestamp is a timestamp representing the server time when this object was\ncreated. It is not guaranteed to be set in happens-before order across separate operations.\nClients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system.\nRead-only.\nNull for lists.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional",
          "type": "string",
          "x-go-name": "CreationTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "deletionGracePeriodSeconds": {
          "description": "Number of seconds allowed for this object to gracefully terminate before\nit will be removed from the system. Only set when deletionTimestamp is also set.\nMay only be shortened.\nRead-only.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "DeletionGracePeriodSeconds"
        },
        "deletionTimestamp": {
          "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This\nfield is set by the server when a graceful deletion is requested by the user, and is not\ndirectly settable by a client. The resource is expected to be deleted (no longer visible\nfrom resource lists, and not reachable by name) after the time in this field, once the\nfinalizers list is empty. As long as the finalizers list contains items, deletion is blocked.\nOnce the deletionTimestamp is set, this value may not be unset or be set further into the\nfuture, although it may be shortened or the resource may be deleted prior to this time.\nFor example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react\nby sending a graceful termination signal to the containers in the pod. After that 30 seconds,\nthe Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup,\nremove the pod from the API. In the presence of network partitions, this object may still\nexist after this timestamp, until an administrator or automated process can determine the\nresource is fully terminated.\nIf not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested.\nRead-only.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional",
          "type": "string",
          "x-go-name": "DeletionTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "eventTime": {
          "description": "Time when this Event was first observed.\n+optional",
          "type": "string",
          "x-go-name": "EventTime",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"
        },
        "finalizers": {
          "description": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\nFinalizers may be processed and removed in any order.  Order is NOT enforced\nbecause it introduces significant risk of stuck finalizers.\nfinalizers is a shared field, any actor with permission can reorder it.\nIf the finalizer list is processed in order, then this can lead to a situation\nin which the component responsible for the first finalizer in the list is\nwaiting for a signal (field value, external system, or other) produced by a\ncomponent responsible for a finalizer later in the list, resulting in a deadlock.\nWithout enforced ordering finalizers are free to order amongst themselves and\nare not vulnerable to ordering changes in the list.\n+optional\n+patchStrategy=merge\n+listType=set",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Finalizers"
        },
        "firstTimestamp": {
          "description": "The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)\n+optional",
          "type": "string",
          "x-go-name": "FirstTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "generateName": {
          "description": "GenerateName is an optional prefix, used by the server, to generate a unique\nname ONLY IF the Name field has not been provided.\nIf this field is used, the name returned to the client will be different\nthan the name passed. This value will also be combined with a unique suffix.\nThe provided value has the same validation rules as the Name field,\nand may be truncated by the length of the suffix required to make the value\nunique on the server.\n\nIf this field is specified and the generated name exists, the server will return a 409.\n\nApplied only if Name is not specified.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency\n+optional",
          "type": "string",
          "x-go-name": "GenerateName"
        },
        "generation": {
          "description": "A sequence number representing a specific generation of the desired state.\nPopulated by the system. Read-only.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "Generation"
        },
        "involvedObject": {
          "$ref": "#/definitions/ObjectReference"
        },
        "kind": {
          "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional",
          "type": "string",
          "x-go-name": "Kind"
        },
        "labels": {
          "description": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Labels"
        },
        "lastTimestamp": {
          "description": "The time at which the most recent occurrence of this event was recorded.\n+optional",
          "type": "string",
          "x-go-name": "LastTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "managedFields": {
          "description": "ManagedFields maps workflow-id and version to the set of fields\nthat are managed by that workflow. This is mostly for internal\nhousekeeping, and users typically shouldn't need to set or\nunderstand this field. A workflow can be the user's name, a\ncontroller's name, or the name of a specific apply path like\n\"ci-cd\". The set of fields is always in the version that the\nworkflow used when modifying the object.\n\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ManagedFieldsEntry"
          },
          "x-go-name": "ManagedFields"
        },
        "message": {
          "description": "A human-readable description of the status of this operation.\nTODO: decide on maximum length.\n+optional",
          "type": "string",
          "x-go-name": "Message"
        },
        "name": {
          "description": "Name must be unique within a namespace. Is required when creating resources, although\nsome resources may allow a client to request the generation of an appropriate name\nautomatically. Name is primarily intended for creation idempotence and configuration\ndefinition.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names\n+optional",
          "type": "string",
          "x-go-name": "Name"
        },
        "namespace": {
          "description": "Namespace defines the space within which each name must be unique. An empty namespace is\nequivalent to the \"default\" namespace, but \"default\" is the canonical representation.\nNot all objects are required to be scoped to a namespace - the value of this field for\nthose objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces\n+optional",
          "type": "string",
          "x-go-name": "Namespace"
        },
        "ownerReferences": {
          "description": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge\n+listType=map\n+listMapKey=uid",
          "type": "array",
          "items": {
            "$ref": "#/definitions/OwnerReference"
          },
          "x-go-name": "OwnerReferences"
        },
        "reason": {
          "description": "This should be a short, machine understandable string that gives the reason\nfor the transition into the object's current status.\nTODO: provide exact specification for format.\n+optional",
          "type": "string",
          "x-go-name": "Reason"
        },
        "related": {
          "$ref": "#/definitions/ObjectReference"
        },
        "reportingComponent": {
          "description": "Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.\n+optional",
          "type": "string",
          "x-go-name": "ReportingController"
        },
        "reportingInstance": {
          "description": "ID of the controller instance, e.g. `kubelet-xyzf`.\n+optional",
          "type": "string",
          "x-go-name": "ReportingInstance"
        },
        "resourceVersion": {
          "description": "An opaque value that represents the internal version of this object that can\nbe used by clients to determine when objects have changed. May be used for optimistic\nconcurrency, change detection, and the watch operation on a resource or set of resources.\nClients must treat these values as opaque and passed unmodified back to the server.\nThey may only be valid for a particular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\n+optional",
          "type": "string",
          "x-go-name": "ResourceVersion"
        },
        "selfLink": {
          "description": "Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.\n+optional",
          "type": "string",
          "x-go-name": "SelfLink"
        },
        "series": {
          "$ref": "#/definitions/EventSeries"
        },
        "source": {
          "$ref": "#/definitions/EventSource"
        },
        "type": {
          "description": "Type of this event (Normal, Warning), new types could be added in the future\n+optional",
          "type": "string",
          "x-go-name": "Type"
        },
        "uid": {
          "$ref": "#/definitions/UID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EventSeries": {
      "description": "EventSeries contain information on series of events, i.e. thing that was/is happening\ncontinuously for some time.",
      "type": "object",
      "properties": {
        "count": {
          "description": "Number of occurrences in this series up to the last heartbeat time",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Count"
        },
        "lastObservedTime": {
          "description": "Time of the last occurrence observed",
          "type": "string",
          "x-go-name": "LastObservedTime",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EventSource": {
      "type": "object",
      "title": "EventSource contains information for an event.",
      "properties": {
        "component": {
          "description": "Component from which the event is generated.\n+optional",
          "type": "string",
          "x-go-name": "Component"
        },
        "host": {
          "description": "Node name on which the event is generated.\n+optional",
          "type": "string",
          "x-go-name": "Host"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "EventTypeResponse": {
      "description": "EventTypeResponse represents the JSON response for an event type",
      "type": "object",
      "properties": {
        "category": {
          "type": "string",
          "x-go-name": "Category"
        },
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "displayName": {
          "type": "string",
          "x-go-name": "DisplayName"
        },
        "filters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FilterField"
          },
          "x-go-name": "Filters"
        },
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "webhookPayloadFormat": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PayloadField"
          },
          "x-go-name": "WebhookPayloadFormat"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/notifications"
    },
    "ExecAction": {
      "type": "object",
      "title": "ExecAction describes a \"run in container\" action.",
      "properties": {
        "command": {
          "description": "Command is the command line to execute inside the container, the working directory for the\ncommand  is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Command"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ExternalRegistry": {
      "type": "object",
      "properties": {
        "appIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "AppIDs"
        },
        "authType": {
          "type": "string",
          "x-go-name": "AuthType"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "endpoint": {
          "type": "string",
          "x-go-name": "Endpoint"
        },
        "isReplicated": {
          "type": "boolean",
          "x-go-name": "IsReplicated"
        },
        "provider": {
          "type": "string",
          "x-go-name": "Provider"
        },
        "slug": {
          "type": "string",
          "x-go-name": "Slug"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "username": {
          "type": "string",
          "x-go-name": "Username"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/kots"
    },
    "ExternalRegistryLog": {
      "type": "object",
      "properties": {
        "action": {
          "type": "string",
          "x-go-name": "Action"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customerName": {
          "type": "string",
          "x-go-name": "CustomerName"
        },
        "endpoint": {
          "type": "string",
          "x-go-name": "Endpoint"
        },
        "image": {
          "type": "string",
          "x-go-name": "Image"
        },
        "isSuccess": {
          "type": "boolean",
          "x-go-name": "IsSuccess"
        },
        "slug": {
          "type": "string",
          "x-go-name": "Slug"
        },
        "statusCode": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "StatusCode"
        },
        "tag": {
          "type": "string",
          "x-go-name": "Tag"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/kots"
    },
    "ExtraLintRules": {
      "type": "object",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "FCVolumeSource": {
      "description": "Fibre Channel volumes can only be mounted as read/write once.\nFibre Channel volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents a Fibre Channel volume.",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\nTODO: how do we prevent errors in the filesystem from compromising the machine\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "lun": {
          "description": "lun is Optional: FC target lun number\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Lun"
        },
        "readOnly": {
          "description": "readOnly is Optional: Defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "targetWWNs": {
          "description": "targetWWNs is Optional: FC target worldwide names (WWNs)\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "TargetWWNs"
        },
        "wwids": {
          "description": "wwids Optional: FC volume world wide identifiers (wwids)\nEither wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "WWIDs"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "FailedLoginAttempt": {
      "description": "FailedLoginAttempt represents a failed login attempt record",
      "type": "object",
      "properties": {
        "app_id": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "email_address": {
          "type": "string",
          "x-go-name": "EmailAddress"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "ip_address": {
          "type": "string",
          "x-go-name": "IPAddress"
        },
        "login_url": {
          "type": "string",
          "x-go-name": "LoginURL"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "FieldsV1": {
      "description": "Each key is either a '.' representing the field itself, and will always map to an empty set,\nor a string representing a sub-field or item. The string will follow one of these four formats:\n'f:<name>', where <name> is the name of a field in a struct, or key in a map\n'v:<value>', where <value> is the exact json formatted value of a list item\n'i:<index>', where <index> is position of a item in a list\n'k:<keys>', where <keys> is a map of  a list item's key fields to their unique values\nIf a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff\n+protobuf.options.(gogoproto.goproto_stringer)=false",
      "type": "object",
      "title": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.",
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "FileKeySelector": {
      "description": "+structType=atomic",
      "type": "object",
      "title": "FileKeySelector selects a key of the env file.",
      "properties": {
        "key": {
          "description": "The key within the env file. An invalid key will prevent the pod from starting.\nThe keys defined within a source may consist of any printable ASCII characters except '='.\nDuring Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.\n+required",
          "type": "string",
          "x-go-name": "Key"
        },
        "optional": {
          "description": "Specify whether the file or its key must be defined. If the file or key\ndoes not exist, then the env var is not published.\nIf optional is set to true and the specified key does not exist,\nthe environment variable will not be set in the Pod's containers.\n\nIf optional is set to false and the specified key does not exist,\nan error will be returned during Pod creation.\n+optional\n+default=false",
          "type": "boolean",
          "x-go-name": "Optional"
        },
        "path": {
          "description": "The path within the volume from which to select the file.\nMust be relative and may not contain the '..' path or start with '..'.\n+required",
          "type": "string",
          "x-go-name": "Path"
        },
        "volumeName": {
          "description": "The name of the volume mount containing the env file.\n+required",
          "type": "string",
          "x-go-name": "VolumeName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "FilterField": {
      "description": "FilterField represents a filter field for an event type",
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "label": {
          "type": "string",
          "x-go-name": "Label"
        },
        "options": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Option"
          },
          "x-go-name": "Options"
        },
        "placeholder": {
          "type": "string",
          "x-go-name": "Placeholder"
        },
        "required": {
          "type": "boolean",
          "x-go-name": "Required"
        },
        "type": {
          "type": "string",
          "x-go-name": "Type"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/events"
    },
    "FlexVolumeSource": {
      "description": "FlexVolume represents a generic volume resource that is\nprovisioned/attached using an exec based plugin.",
      "type": "object",
      "properties": {
        "driver": {
          "description": "driver is the name of the driver to use for this volume.",
          "type": "string",
          "x-go-name": "Driver"
        },
        "fsType": {
          "description": "fsType is the filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "options": {
          "description": "options is Optional: this field holds extra command options if any.\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Options"
        },
        "readOnly": {
          "description": "readOnly is Optional: defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "FlockerVolumeSource": {
      "description": "One and only one of datasetName and datasetUUID should be set.\nFlocker volumes do not support ownership management or SELinux relabeling.",
      "type": "object",
      "title": "Represents a Flocker volume mounted by the Flocker agent.",
      "properties": {
        "datasetName": {
          "description": "datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker\nshould be considered as deprecated\n+optional",
          "type": "string",
          "x-go-name": "DatasetName"
        },
        "datasetUUID": {
          "description": "datasetUUID is the UUID of the dataset. This is unique identifier of a Flocker dataset\n+optional",
          "type": "string",
          "x-go-name": "DatasetUUID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "GCEPersistentDiskVolumeSource": {
      "description": "A GCE PD must exist before mounting to a container. The disk must\nalso be in the same GCE project and zone as the kubelet. A GCE PD\ncan only be mounted as read/write once or read-only many times. GCE\nPDs support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents a Persistent Disk resource in Google Compute Engine.",
      "properties": {
        "fsType": {
          "description": "fsType is filesystem type of the volume that you want to mount.\nTip: Ensure that the filesystem type is supported by the host operating system.\nExamples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\nTODO: how do we prevent errors in the filesystem from compromising the machine\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "partition": {
          "description": "partition is the partition in the volume that you want to mount.\nIf omitted, the default is to mount by volume name.\nExamples: For volume /dev/sda1, you specify the partition as \"1\".\nSimilarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Partition"
        },
        "pdName": {
          "description": "pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
          "type": "string",
          "x-go-name": "PDName"
        },
        "readOnly": {
          "description": "readOnly here will force the ReadOnly setting in VolumeMounts.\nDefaults to false.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "GRPCAction": {
      "type": "object",
      "title": "GRPCAction specifies an action involving a GRPC service.",
      "properties": {
        "port": {
          "description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Port"
        },
        "service": {
          "description": "Service is the name of the service to place in the gRPC HealthCheckRequest\n(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).\n\nIf this is not specified, the default behavior is defined by gRPC.\n+optional\n+default=\"\"",
          "type": "string",
          "x-go-name": "Service"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "GitHubRef": {
      "type": "object",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "GitRepoVolumeSource": {
      "description": "DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an\nEmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir\ninto the Pod's container.",
      "type": "object",
      "title": "Represents a volume that is populated with the contents of a git repository.\nGit repo volumes do not support ownership management.\nGit repo volumes support SELinux relabeling.",
      "properties": {
        "directory": {
          "description": "directory is the target directory name.\nMust not contain or start with '..'.  If '.' is supplied, the volume directory will be the\ngit repository.  Otherwise, if specified, the volume will contain the git repository in\nthe subdirectory with the given name.\n+optional",
          "type": "string",
          "x-go-name": "Directory"
        },
        "repository": {
          "description": "repository is the URL",
          "type": "string",
          "x-go-name": "Repository"
        },
        "revision": {
          "description": "revision is the commit hash for the specified revision.\n+optional",
          "type": "string",
          "x-go-name": "Revision"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "GlusterfsVolumeSource": {
      "description": "Glusterfs volumes do not support ownership management or SELinux relabeling.",
      "type": "object",
      "title": "Represents a Glusterfs mount that lasts the lifetime of a pod.",
      "properties": {
        "endpoints": {
          "description": "endpoints is the endpoint name that details Glusterfs topology.",
          "type": "string",
          "x-go-name": "EndpointsName"
        },
        "path": {
          "description": "path is the Glusterfs volume path.\nMore info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
          "type": "string",
          "x-go-name": "Path"
        },
        "readOnly": {
          "description": "readOnly here will force the Glusterfs volume to be mounted with read-only permissions.\nDefaults to false.\nMore info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "HTTPGetAction": {
      "type": "object",
      "title": "HTTPGetAction describes an action based on HTTP Get requests.",
      "properties": {
        "host": {
          "description": "Host name to connect to, defaults to the pod IP. You probably want to set\n\"Host\" in httpHeaders instead.\n+optional",
          "type": "string",
          "x-go-name": "Host"
        },
        "httpHeaders": {
          "description": "Custom headers to set in the request. HTTP allows repeated headers.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/HTTPHeader"
          },
          "x-go-name": "HTTPHeaders"
        },
        "path": {
          "description": "Path to access on the HTTP server.\n+optional",
          "type": "string",
          "x-go-name": "Path"
        },
        "port": {
          "$ref": "#/definitions/IntOrString"
        },
        "scheme": {
          "$ref": "#/definitions/URIScheme"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "HTTPHeader": {
      "description": "HTTPHeader describes a custom header to be used in HTTP probes",
      "type": "object",
      "properties": {
        "name": {
          "description": "The header field name.\nThis will be canonicalized upon output, so case-variant names will be understood as the same header.",
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "description": "The header field value",
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "HelmChart": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string",
          "x-go-name": "Error"
        },
        "hasPreflightSpec": {
          "type": "boolean",
          "x-go-name": "HasPreflightSpec"
        },
        "isKotsInstallerOnly": {
          "type": "boolean",
          "x-go-name": "IsKotsInstallerOnly"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        },
        "weight": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Weight"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "HelmInstallabilityIssue": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "x-go-name": "Message"
        },
        "resources": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/HelmUnavailableResource"
          },
          "x-go-name": "Resources"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "HelmUnavailableResource": {
      "type": "object",
      "properties": {
        "filePath": {
          "type": "string",
          "x-go-name": "FilePath"
        },
        "identifier": {
          "type": "string",
          "x-go-name": "Identifier"
        },
        "kind": {
          "type": "string",
          "x-go-name": "Kind"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "HostAlias": {
      "description": "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the\npod's hosts file.",
      "type": "object",
      "properties": {
        "hostnames": {
          "description": "Hostnames for the above IP address.\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Hostnames"
        },
        "ip": {
          "description": "IP address of the host file entry.\n+required",
          "type": "string",
          "x-go-name": "IP"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "HostIP": {
      "type": "object",
      "title": "HostIP represents a single IP address allocated to the host.",
      "properties": {
        "ip": {
          "description": "IP is the IP address assigned to the host\n+required",
          "type": "string",
          "x-go-name": "IP"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "HostPathType": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "HostPathVolumeSource": {
      "description": "Host path volumes do not support ownership management or SELinux relabeling.",
      "type": "object",
      "title": "Represents a host path mapped into a pod.",
      "properties": {
        "path": {
          "description": "path of the directory on the host.\nIf the path is a symlink, it will follow the link to the real path.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
          "type": "string",
          "x-go-name": "Path"
        },
        "type": {
          "$ref": "#/definitions/HostPathType"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ISCSIVolumeSource": {
      "description": "ISCSI volumes can only be mounted as read/write once.\nISCSI volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents an ISCSI disk.",
      "properties": {
        "chapAuthDiscovery": {
          "description": "chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication\n+optional",
          "type": "boolean",
          "x-go-name": "DiscoveryCHAPAuth"
        },
        "chapAuthSession": {
          "description": "chapAuthSession defines whether support iSCSI Session CHAP authentication\n+optional",
          "type": "boolean",
          "x-go-name": "SessionCHAPAuth"
        },
        "fsType": {
          "description": "fsType is the filesystem type of the volume that you want to mount.\nTip: Ensure that the filesystem type is supported by the host operating system.\nExamples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\nTODO: how do we prevent errors in the filesystem from compromising the machine\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "initiatorName": {
          "description": "initiatorName is the custom iSCSI Initiator Name.\nIf initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface\n<target portal>:<volume name> will be created for the connection.\n+optional",
          "type": "string",
          "x-go-name": "InitiatorName"
        },
        "iqn": {
          "description": "iqn is the target iSCSI Qualified Name.",
          "type": "string",
          "x-go-name": "IQN"
        },
        "iscsiInterface": {
          "description": "iscsiInterface is the interface Name that uses an iSCSI transport.\nDefaults to 'default' (tcp).\n+optional\n+default=\"default\"",
          "type": "string",
          "x-go-name": "ISCSIInterface"
        },
        "lun": {
          "description": "lun represents iSCSI Target Lun number.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Lun"
        },
        "portals": {
          "description": "portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port\nis other than default (typically TCP ports 860 and 3260).\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Portals"
        },
        "readOnly": {
          "description": "readOnly here will force the ReadOnly setting in VolumeMounts.\nDefaults to false.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "targetPortal": {
          "description": "targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port\nis other than default (typically TCP ports 860 and 3260).",
          "type": "string",
          "x-go-name": "TargetPortal"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ImageSource": {
      "type": "object",
      "properties": {
        "chart_name": {
          "type": "string",
          "x-go-name": "ChartName"
        },
        "is_installer_only": {
          "type": "boolean",
          "x-go-name": "IsInstallerOnly"
        },
        "resource_kind": {
          "type": "string",
          "x-go-name": "ResourceKind"
        },
        "resource_name": {
          "type": "string",
          "x-go-name": "ResourceName"
        },
        "resource_namespace": {
          "type": "string",
          "x-go-name": "ResourceNamespace"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "ImageVolumeSource": {
      "type": "object",
      "title": "ImageVolumeSource represents a image volume resource.",
      "properties": {
        "pullPolicy": {
          "$ref": "#/definitions/PullPolicy"
        },
        "reference": {
          "description": "Required: Image or artifact reference to be used.\nBehaves in the same way as pod.spec.containers[*].image.\nPull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets.\nMore info: https://kubernetes.io/docs/concepts/containers/images\nThis field is optional to allow higher level config management to default or override\ncontainer images in workload controllers like Deployments and StatefulSets.\n+optional",
          "type": "string",
          "x-go-name": "Reference"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ImageVulnCounts": {
      "type": "object",
      "properties": {
        "counts": {
          "$ref": "#/definitions/VulnCounts"
        },
        "digest": {
          "type": "string",
          "x-go-name": "Digest"
        },
        "digest_first_seen_at": {
          "type": "string",
          "x-go-name": "DigestFirstSeenAt"
        },
        "image_size_bytes": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ImageSizeBytes"
        },
        "input": {
          "type": "string",
          "x-go-name": "Input"
        },
        "installation_phase": {
          "description": "InstallationPhase indicates the Embedded Cluster phase for the image (\"\", \"online\", or \"airgap\").\nApplication images have the phase \"\".\nInfrastructure images used for Embedded Cluster in both online and airgap have the phase \"online\" or \"airgap\".\nInfrastructure images used for Embedded Cluster only in airgap have the phase \"airgap\".",
          "type": "string",
          "x-go-name": "InstallationPhase"
        },
        "last_scanned_at": {
          "type": "string",
          "x-go-name": "LastScannedAt"
        },
        "not_found": {
          "type": "boolean",
          "x-go-name": "NotFound"
        },
        "sbom_status": {
          "description": "SBOM status tracking",
          "type": "string",
          "x-go-name": "SBOMStatus"
        },
        "sbom_status_message": {
          "type": "string",
          "x-go-name": "SBOMStatusMessage"
        },
        "sbom_status_updated_at": {
          "type": "string",
          "x-go-name": "SBOMStatusUpdatedAt"
        },
        "scan_status": {
          "description": "Scan status tracking",
          "type": "string",
          "x-go-name": "ScanStatus"
        },
        "scan_status_message": {
          "type": "string",
          "x-go-name": "ScanStatusMessage"
        },
        "scan_status_updated_at": {
          "type": "string",
          "x-go-name": "ScanStatusUpdatedAt"
        },
        "scanned_images": {
          "description": "Scan completeness tracking",
          "type": "integer",
          "format": "int64",
          "x-go-name": "ScannedImages"
        },
        "total_images": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalImages"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "IncreaseQuotaRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "requested_value": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "RequestedValue"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cluster"
    },
    "InstallAttempt": {
      "description": "InstallAttempt extends CustomerInstallOptions with calculated or joined fields to represent an installation attempt",
      "type": "object",
      "properties": {
        "admin_console_url": {
          "description": "The admin console URL of the installation attempt",
          "type": "string",
          "x-go-name": "AdminConsoleURL"
        },
        "assets_downloaded_at": {
          "description": "New fields for tracking installation progress",
          "type": "string",
          "format": "date-time",
          "x-go-name": "AssetsDownloadedAt"
        },
        "browser_install_completed_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "BrowserInstallCompletedAt"
        },
        "channel_id": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "channel_release_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "customer_email": {
          "type": "string",
          "x-go-name": "CustomerEmail"
        },
        "customer_id": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "ec_version": {
          "description": "The embedded cluster version (if applicable)",
          "type": "string",
          "x-go-name": "ECVersion"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "images_pulled_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ImagesPulledAt"
        },
        "install_type": {
          "type": "string",
          "x-go-name": "InstallType"
        },
        "installation_completed_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "InstallationCompletedAt"
        },
        "instance_id": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "instance_name": {
          "type": "string",
          "x-go-name": "InstanceName"
        },
        "is_multi_node": {
          "type": "boolean",
          "x-go-name": "IsMultiNode"
        },
        "kubernetes_distribution": {
          "type": "string",
          "x-go-name": "KubernetesDistribution"
        },
        "license_id": {
          "type": "string",
          "x-go-name": "LicenseID"
        },
        "network_availability": {
          "type": "string",
          "x-go-name": "NetworkAvailability"
        },
        "os_distro": {
          "type": "string",
          "x-go-name": "OSDistro"
        },
        "os_version": {
          "type": "string",
          "x-go-name": "OSVersion"
        },
        "registry_authenticated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RegistryAuthenticatedAt"
        },
        "registry_availability": {
          "type": "string",
          "x-go-name": "RegistryAvailability"
        },
        "release_sequence": {
          "description": "The sequence number of the release in the channel",
          "type": "integer",
          "format": "int64",
          "x-go-name": "ReleaseSequence"
        },
        "service_account_email_address": {
          "description": "The email address of the service account used for the installation attempt",
          "type": "string",
          "x-go-name": "ServiceAccountEmailAddress"
        },
        "service_account_id": {
          "type": "string",
          "x-go-name": "ServiceAccountID"
        },
        "service_account_token": {
          "type": "string",
          "x-go-name": "ServiceAccountToken"
        },
        "started_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "StartedAt"
        },
        "status": {
          "description": "Status of the installation attempt",
          "type": "string",
          "enum": [
            "in_progress",
            "succeeded",
            "stalled",
            "discarded",
            "obsolete",
            "setup_complete",
            "all"
          ],
          "x-go-name": "Status"
        },
        "version_label": {
          "description": "The version label of the release",
          "type": "string",
          "x-go-name": "VersionLabel"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "InstallInstructionsResponse": {
      "type": "object",
      "title": "InstallInstructionsResponse represents the complete set of installation instructions for a given install id.",
      "properties": {
        "context": {
          "description": "MDX context with all template variables",
          "x-go-name": "Context"
        },
        "format": {
          "description": "Version format (\"basic\" for legacy JSON, \"mdx\" for custom instructions)",
          "type": "string",
          "x-go-name": "Format"
        },
        "install_type": {
          "description": "Installation type (\"linux\", \"helm\", or \"embedded-cluster\")",
          "type": "string",
          "x-go-name": "InstallType"
        },
        "mdx_template": {
          "description": "MDX format fields (only present when format == \"mdx\")\nMDX template content",
          "type": "string",
          "x-go-name": "MDXTemplate"
        },
        "renderer_version": {
          "description": "Renderer version for frontend compatibility",
          "type": "integer",
          "format": "int64",
          "x-go-name": "RendererVersion"
        },
        "steps": {
          "description": "Sequential list of installation steps (legacy format only)\nNote that the number and order will vary based on the install type and the install options themselves.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/InstallStepResponse"
          },
          "x-go-name": "Steps"
        },
        "title": {
          "description": "Overall installation title (legacy format only)",
          "type": "string",
          "x-go-name": "Title"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "InstallStepResponse": {
      "type": "object",
      "title": "InstallStepResponse represents a single step in the installation process.",
      "properties": {
        "commands": {
          "description": "List of shell commands to execute (one per entry)",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Commands"
        },
        "description": {
          "description": "Optional detailed description\nThe contents of this field may change.",
          "type": "string",
          "x-go-name": "Description"
        },
        "download_url": {
          "description": "Optional browser download URL (for airgap installs)",
          "type": "string",
          "x-go-name": "DownloadURL"
        },
        "step_name": {
          "description": "Machine-readable step identifier (e.g., \"download_assets\")",
          "type": "string",
          "x-go-name": "StepName"
        },
        "step_number": {
          "description": "Sequential step number (e.g., 2, 3, 4)",
          "type": "integer",
          "format": "int64",
          "x-go-name": "StepNumber"
        },
        "title": {
          "description": "Human-readable step title (e.g., \"Download the installation assets\")\nThe contents of this field may change. For a persistent identifier, use the StepName field.",
          "type": "string",
          "x-go-name": "Title"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "InstallationTypeKurl": {
      "type": "object",
      "properties": {
        "installerVersion": {
          "type": "string",
          "x-go-name": "InstallerVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallationTypes": {
      "type": "object",
      "properties": {
        "embeddedCluster": {
          "$ref": "#/definitions/InstallerTypeEmbeddedCluster"
        },
        "helm": {
          "$ref": "#/definitions/InstallerTypeHelm"
        },
        "helmInstallabilityIssue": {
          "$ref": "#/definitions/HelmInstallabilityIssue"
        },
        "kots": {
          "$ref": "#/definitions/InstallerTypeKots"
        },
        "kotsConfig": {
          "$ref": "#/definitions/InstallerTypeKotsConfig"
        },
        "kurl": {
          "$ref": "#/definitions/InstallationTypeKurl"
        },
        "preflight": {
          "$ref": "#/definitions/InstallerTypePreflight"
        },
        "replicatedSDK": {
          "$ref": "#/definitions/InstallerTypeReplicatedSDK"
        },
        "supportBundle": {
          "$ref": "#/definitions/InstallerTypeSupportBundle"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypeEmbeddedCluster": {
      "type": "object",
      "properties": {
        "proxyRegistryDomain": {
          "type": "string",
          "x-go-name": "ProxyRegistryDomain"
        },
        "replicatedAppDomain": {
          "type": "string",
          "x-go-name": "ReplicatedAppDomain"
        },
        "replicatedRegistryDomain": {
          "type": "string",
          "x-go-name": "ReplicatedRegistryDomain"
        },
        "version": {
          "type": "string",
          "x-go-name": "InstallerVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypeHelm": {
      "type": "object",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypeKots": {
      "type": "object",
      "properties": {
        "minKotsVersion": {
          "type": "string",
          "x-go-name": "MinKotsVersion"
        },
        "targetKotsVersion": {
          "type": "string",
          "x-go-name": "TargetKotsVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypeKotsConfig": {
      "type": "object",
      "properties": {
        "apiVersion": {
          "type": "string",
          "x-go-name": "APIVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypePreflight": {
      "type": "object",
      "properties": {
        "apiVersion": {
          "type": "string",
          "x-go-name": "APIVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypeReplicatedSDK": {
      "type": "object",
      "properties": {
        "sdkVersion": {
          "type": "string",
          "x-go-name": "SDKVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstallerTypeSupportBundle": {
      "type": "object",
      "properties": {
        "apiVersion": {
          "type": "string",
          "x-go-name": "APIVersion"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "Instance": {
      "type": "object",
      "properties": {
        "appStatus": {
          "type": "string",
          "x-go-name": "AppStatus"
        },
        "channelId": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "channelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "embeddedClusterId": {
          "type": "string",
          "x-go-name": "EmbeddedClusterID"
        },
        "embeddedClusterVersion": {
          "type": "string",
          "x-go-name": "EmbeddedClusterVersion"
        },
        "firstCheckin": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "FirstCheckin"
        },
        "firstReadyAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "FirstReadyAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "installType": {
          "description": "InstallType is the canonical observed install type, derived once\nserver-side from the instance's identity signals: one of \"linux\"\n(embedded cluster), \"kurl\", \"kots\", or \"helm\". Clients read this\ndirectly instead of re-deriving; collapse to a binary install method\nwith installType == \"helm\" ? \"helm\" : \"linux\" where needed.",
          "type": "string",
          "x-go-name": "InstallType"
        },
        "isAirgap": {
          "type": "boolean",
          "x-go-name": "IsAirgap"
        },
        "k8sDistribution": {
          "type": "string",
          "x-go-name": "K8sDistribution"
        },
        "k8sVersion": {
          "type": "string",
          "x-go-name": "K8sVersion"
        },
        "kotsInstallId": {
          "type": "string",
          "x-go-name": "KotsInstallID"
        },
        "kurlInstallId": {
          "type": "string",
          "x-go-name": "KurlInstallID"
        },
        "lastCheckin": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastCheckin"
        },
        "releaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ReleaseSequence"
        },
        "resourceStates": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/InstanceResourceState"
          },
          "x-go-name": "ResourceStates"
        },
        "serviceAccountId": {
          "type": "string",
          "x-go-name": "ServiceAccountID"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/InstanceTag"
          },
          "x-go-name": "Tags"
        },
        "versionLabel": {
          "type": "string",
          "x-go-name": "VersionLabel"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "InstancePreview": {
      "type": "object",
      "properties": {
        "instances": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomerInstance"
          },
          "x-go-name": "Instances"
        },
        "moreAvailable": {
          "type": "boolean",
          "x-go-name": "MoreAvailable"
        },
        "totalCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCount"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "InstanceResourceState": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "x-go-name": "Kind"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "namespace": {
          "type": "string",
          "x-go-name": "Namespace"
        },
        "state": {
          "type": "string",
          "x-go-name": "State"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "InstanceSecuritySummary": {
      "description": "InstanceSecuritySummary represents aggregated security information for an instance",
      "type": "object",
      "properties": {
        "imageCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ImageCount"
        },
        "lastScannedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastScannedAt"
        },
        "vulnerabilityCounts": {
          "$ref": "#/definitions/VulnCounts"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "InstanceTag": {
      "type": "object",
      "properties": {
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceId"
        },
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "origin": {
          "type": "string",
          "x-go-name": "Origin"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "InstanceTagDTO": {
      "description": "InstanceTagDTO is a response-only shape without instanceId",
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "origin": {
          "type": "string",
          "x-go-name": "Origin"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/customers"
    },
    "InstanceTags": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/InstanceTag"
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "InstanceTrends": {
      "type": "object",
      "properties": {
        "activeInstancesBefore": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ActiveInstancesBefore"
        },
        "activeInstancesToday": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ActiveInstancesToday"
        },
        "completedUpgradesPreviousPeriod": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CompletedUpgradesPreviousPeriod"
        },
        "completedUpgradesThisPeriod": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CompletedUpgradesThisPeriod"
        },
        "lastThreeVersionsPercentageBefore": {
          "type": "number",
          "format": "double",
          "x-go-name": "LastThreeVersionsPercentageBefore"
        },
        "lastThreeVersionsPercentageToday": {
          "type": "number",
          "format": "double",
          "x-go-name": "LastThreeVersionsPercentageToday"
        },
        "medianInstanceAgeBefore": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MedianInstanceAgeBefore"
        },
        "medianInstanceAgeToday": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MedianInstanceAgeToday"
        },
        "uniqueVersionsBefore": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UniqueVersionsBefore"
        },
        "uniqueVersionsToday": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UniqueVersionsToday"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "InstanceTypeSpec": {
      "type": "object",
      "properties": {
        "memory_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MemoryGiB"
        },
        "vcpus": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "VCPUs"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "IntOrString": {
      "description": "+protobuf=true\n+protobuf.options.(gogoproto.goproto_stringer)=false\n+k8s:openapi-gen=true\n+k8s:openapi-model-package=io.k8s.apimachinery.pkg.util.intstr",
      "type": "object",
      "title": "IntOrString is a type that can hold an int32 or a string.  When used in\nJSON or YAML marshalling and unmarshalling, it produces or consumes the\ninner type.  This allows you to have, for example, a JSON field that can\naccept a name or number.\nTODO: Rename to Int32OrString",
      "properties": {
        "IntVal": {
          "type": "integer",
          "format": "int32"
        },
        "StrVal": {
          "type": "string"
        },
        "Type": {
          "$ref": "#/definitions/Type"
        }
      },
      "x-go-package": "k8s.io/apimachinery/pkg/util/intstr"
    },
    "KeyToPath": {
      "type": "object",
      "title": "Maps a string key to a path within a volume.",
      "properties": {
        "key": {
          "description": "key is the key to project.",
          "type": "string",
          "x-go-name": "Key"
        },
        "mode": {
          "description": "mode is Optional: mode bits used to set permissions on this file.\nMust be an octal value between 0000 and 0777 or a decimal value between 0 and 511.\nYAML accepts both octal and decimal values, JSON requires decimal values for mode bits.\nIf not specified, the volume defaultMode will be used.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Mode"
        },
        "path": {
          "description": "path is the relative path of the file to map the key to.\nMay not be an absolute path.\nMay not contain the path element '..'.\nMay not start with the string '..'.",
          "type": "string",
          "x-go-name": "Path"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "KotsAppCustomHostname": {
      "description": "KotsAppCustomHostname represents a custom hostname configured for a kots app",
      "type": "object",
      "properties": {
        "app_id": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "cloudflare_custom_hostname_id": {
          "type": "string",
          "x-go-name": "CloudflareCustomHostnameID"
        },
        "cloudflare_worker_route_id": {
          "type": "string",
          "x-go-name": "CloudflareWorkerRouteID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "domain_txt_record_name": {
          "type": "string",
          "x-go-name": "DomainTxtRecordName"
        },
        "domain_txt_record_value": {
          "type": "string",
          "x-go-name": "DomainTxtRecordValue"
        },
        "domain_verification_status": {
          "type": "string",
          "x-go-name": "DomainVerificationStatus"
        },
        "domain_verification_type": {
          "type": "string",
          "x-go-name": "DomainVerificationType"
        },
        "failure_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "FailureCount"
        },
        "failure_reason": {
          "type": "string",
          "x-go-name": "FailureReason"
        },
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        },
        "is_default": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "origin_server": {
          "type": "string",
          "x-go-name": "OriginServer"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "tls_txt_record_name": {
          "type": "string",
          "x-go-name": "TLSTxtRecordName"
        },
        "tls_txt_record_value": {
          "type": "string",
          "x-go-name": "TLSTxtRecordValue"
        },
        "tls_verification_status": {
          "type": "string",
          "x-go-name": "TLSVerificationStatus"
        },
        "tls_verification_type": {
          "type": "string",
          "x-go-name": "TLSVerificationType"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "verification_errors": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "VerificationErrors"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customhostname"
    },
    "KotsChannelRelease": {
      "type": "object",
      "properties": {
        "airgapBuildError": {
          "type": "string",
          "x-go-name": "AirgapBuildError"
        },
        "airgapBuildStatus": {
          "type": "string",
          "x-go-name": "AirgapBuildStatus"
        },
        "airgapBundleImages": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "AirgapBundleImages"
        },
        "channelIcon": {
          "type": "string",
          "x-go-name": "ChannelIcon"
        },
        "channelId": {
          "type": "string",
          "x-go-name": "ChannelID"
        },
        "channelName": {
          "type": "string",
          "x-go-name": "ChannelName"
        },
        "channelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ChannelSequence"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Created"
        },
        "createdBy": {
          "$ref": "#/definitions/Actor"
        },
        "customResourceError": {
          "type": "string",
          "x-go-name": "CustomResourceError"
        },
        "customResourceWarnings": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "CustomResourceWarnings"
        },
        "demotedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "DemotedAt"
        },
        "embeddedClusterVersion": {
          "type": "string",
          "x-go-name": "EmbeddedClusterVersion"
        },
        "hasECInstaller": {
          "type": "boolean",
          "x-go-name": "HasECInstaller"
        },
        "hasKurlInstaller": {
          "type": "boolean",
          "x-go-name": "HasKurlInstaller"
        },
        "imageSecurityInfo": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ImageVulnCounts"
          },
          "x-go-name": "ImageSecurityInfo"
        },
        "imageSecuritySums": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ImageVulnCounts"
          },
          "x-go-name": "ImageSecuritySums"
        },
        "installationTypes": {
          "$ref": "#/definitions/InstallationTypes"
        },
        "isDemoted": {
          "type": "boolean",
          "x-go-name": "IsDemoted"
        },
        "isRequired": {
          "type": "boolean",
          "x-go-name": "IsRequired"
        },
        "kurlInstallerID": {
          "type": "string",
          "x-go-name": "KurlInstallerID"
        },
        "lintResult": {
          "$ref": "#/definitions/LintResult"
        },
        "proxyRegistryDomain": {
          "type": "string",
          "x-go-name": "ProxyRegistryDomain"
        },
        "registrySecret": {
          "type": "string",
          "x-go-name": "RegistrySecret"
        },
        "releaseNotes": {
          "type": "string",
          "x-go-name": "ReleaseNotes"
        },
        "releasedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ReleasedAt"
        },
        "replicatedRegistryDomain": {
          "type": "string",
          "x-go-name": "ReplicatedRegistryDomain"
        },
        "semver": {
          "type": "string",
          "x-go-name": "Semver"
        },
        "sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Sequence"
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Updated"
        },
        "updatedBy": {
          "$ref": "#/definitions/Actor"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "LabelSelector": {
      "description": "A label selector is a label query over a set of resources. The result of matchLabels and\nmatchExpressions are ANDed. An empty label selector matches all objects. A null\nlabel selector matches no objects.\n+structType=atomic",
      "type": "object",
      "properties": {
        "matchExpressions": {
          "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/LabelSelectorRequirement"
          },
          "x-go-name": "MatchExpressions"
        },
        "matchLabels": {
          "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "MatchLabels"
        }
      },
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "LabelSelectorOperator": {
      "type": "string",
      "title": "A label selector operator is the set of operators that can be used in a selector requirement.",
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "LabelSelectorRequirement": {
      "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
      "type": "object",
      "properties": {
        "key": {
          "description": "key is the label key that the selector applies to.",
          "type": "string",
          "x-go-name": "Key"
        },
        "operator": {
          "$ref": "#/definitions/LabelSelectorOperator"
        },
        "values": {
          "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Values"
        }
      },
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "LicenseType": {
      "type": "string",
      "title": "Can be set to \"dev\", \"trial\", \"prod\", \"community\", \"test\", or \"paid\"",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "Lifecycle": {
      "description": "Lifecycle describes actions that the management system should take in response to container lifecycle\nevents. For the PostStart and PreStop lifecycle handlers, management of the container blocks\nuntil the action is complete, unless the container process fails, in which case the handler is aborted.",
      "type": "object",
      "properties": {
        "postStart": {
          "$ref": "#/definitions/LifecycleHandler"
        },
        "preStop": {
          "$ref": "#/definitions/LifecycleHandler"
        },
        "stopSignal": {
          "$ref": "#/definitions/Signal"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "LifecycleHandler": {
      "description": "LifecycleHandler defines a specific action that should be taken in a lifecycle\nhook. One and only one of the fields, except TCPSocket must be specified.",
      "type": "object",
      "properties": {
        "exec": {
          "$ref": "#/definitions/ExecAction"
        },
        "httpGet": {
          "$ref": "#/definitions/HTTPGetAction"
        },
        "sleep": {
          "$ref": "#/definitions/SleepAction"
        },
        "tcpSocket": {
          "$ref": "#/definitions/TCPSocketAction"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "LintExpression": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string",
          "x-go-name": "Message"
        },
        "path": {
          "type": "string",
          "x-go-name": "Path"
        },
        "rule": {
          "type": "string",
          "x-go-name": "Rule"
        },
        "type": {
          "type": "string",
          "x-go-name": "Type"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/release"
    },
    "LintResult": {
      "type": "object",
      "properties": {
        "isLintingComplete": {
          "type": "boolean",
          "x-go-name": "IsLintingComplete"
        },
        "lintExpressions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LintExpression"
          },
          "x-go-name": "LintExpressions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/lint"
    },
    "LinuxContainerUser": {
      "description": "LinuxContainerUser represents user identity information in Linux containers",
      "type": "object",
      "properties": {
        "gid": {
          "description": "GID is the primary gid initially attached to the first process in the container",
          "type": "integer",
          "format": "int64",
          "x-go-name": "GID"
        },
        "supplementalGroups": {
          "description": "SupplementalGroups are the supplemental groups initially attached to the first process in the container\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "integer",
            "format": "int64"
          },
          "x-go-name": "SupplementalGroups"
        },
        "uid": {
          "description": "UID is the primary uid initially attached to the first process in the container",
          "type": "integer",
          "format": "int64",
          "x-go-name": "UID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "LocalObjectReference": {
      "description": "New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs.\n1. Invalid usage help.  It is impossible to add specific help for individual usage.  In most embedded usages, there are particular\nrestrictions like, \"must refer only to types A and B\" or \"UID not honored\" or \"name must be restricted\".\nThose cannot be well described when embedded.\n2. Inconsistent validation.  Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen.\n3. We cannot easily change it.  Because this type is embedded in many locations, updates to this type\nwill affect numerous schemas.  Don't make new APIs embed an underspecified API type they do not control.\n\nInstead of using this type, create a locally provided and used type that is well-focused on your reference.\nFor example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .\n+structType=atomic",
      "type": "object",
      "title": "LocalObjectReference contains enough information to let you locate the\nreferenced object inside the same namespace.",
      "properties": {
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "LogEntry": {
      "type": "object",
      "properties": {
        "logs": {
          "type": "string",
          "x-go-name": "Logs"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/supportbundles"
    },
    "ManagedFieldsEntry": {
      "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource\nthat the fieldset applies to.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "APIVersion defines the version of this resource that this field set\napplies to. The format is \"group/version\" just like the top-level\nAPIVersion field. It is necessary to track the version of a field\nset because it cannot be automatically converted.",
          "type": "string",
          "x-go-name": "APIVersion"
        },
        "fieldsType": {
          "description": "FieldsType is the discriminator for the different fields format and version.\nThere is currently only one possible value: \"FieldsV1\"",
          "type": "string",
          "x-go-name": "FieldsType"
        },
        "fieldsV1": {
          "$ref": "#/definitions/FieldsV1"
        },
        "manager": {
          "description": "Manager is an identifier of the workflow managing these fields.",
          "type": "string",
          "x-go-name": "Manager"
        },
        "operation": {
          "$ref": "#/definitions/ManagedFieldsOperationType"
        },
        "subresource": {
          "description": "Subresource is the name of the subresource used to update that object, or\nempty string if the object was updated through the main resource. The\nvalue of this field is used to distinguish between managers, even if they\nshare the same name. For example, a status update will be distinct from a\nregular update using the same manager name.\nNote that the APIVersion field is not related to the Subresource field and\nit always corresponds to the version of the main resource.",
          "type": "string",
          "x-go-name": "Subresource"
        },
        "time": {
          "description": "Time is the timestamp of when the ManagedFields entry was added. The\ntimestamp will also be updated if a field is added, the manager\nchanges any of the owned fields value or removes a field. The\ntimestamp does not update when a field is removed from the entry\nbecause another manager took it over.\n+optional",
          "type": "string",
          "x-go-name": "Time",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        }
      },
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "ManagedFieldsOperationType": {
      "type": "string",
      "title": "ManagedFieldsOperationType is the type of operation which lead to a ManagedFieldsEntry being created.",
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "MountPropagationMode": {
      "description": "+enum",
      "type": "string",
      "title": "MountPropagationMode describes mount propagation.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NFSVolumeSource": {
      "description": "NFS volumes do not support ownership management or SELinux relabeling.",
      "type": "object",
      "title": "Represents an NFS mount that lasts the lifetime of a pod.",
      "properties": {
        "path": {
          "description": "path that is exported by the NFS server.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
          "type": "string",
          "x-go-name": "Path"
        },
        "readOnly": {
          "description": "readOnly here will force the NFS export to be mounted with read-only permissions.\nDefaults to false.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "server": {
          "description": "server is the hostname or IP address of the NFS server.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
          "type": "string",
          "x-go-name": "Server"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Network": {
      "type": "object",
      "properties": {
        "assigned_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AssignedAt"
        },
        "collect_report": {
          "type": "boolean",
          "x-go-name": "CollectReport"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "guid": {
          "type": "string",
          "x-go-name": "GUID"
        },
        "has_report": {
          "type": "boolean",
          "x-go-name": "HasReport"
        },
        "id": {
          "type": "string",
          "x-go-name": "ShortID"
        },
        "last_scheduling_status": {
          "type": "string",
          "x-go-name": "LastSchedulingStatus"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "policy": {
          "type": "string",
          "x-go-name": "Policy"
        },
        "resources": {
          "description": "Resources contains the clusters and VMs associated with this network",
          "type": "array",
          "items": {
            "$ref": "#/definitions/NetworkResource"
          },
          "x-go-name": "Resources"
        },
        "running_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RunningAt"
        },
        "status": {
          "$ref": "#/definitions/NetworkStatus"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/network/types"
    },
    "NetworkReportSummaryDestination": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Count"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "ip": {
          "type": "string",
          "x-go-name": "IP"
        },
        "port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Port"
        },
        "protocol": {
          "type": "string",
          "x-go-name": "Protocol"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NetworkReportSummarySource"
          },
          "x-go-name": "Sources"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "NetworkReportSummaryDomain": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Count"
        },
        "domain": {
          "type": "string",
          "x-go-name": "Domain"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "NetworkReportSummarySource": {
      "type": "object",
      "properties": {
        "command": {
          "type": "string",
          "x-go-name": "Command"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "ip": {
          "type": "string",
          "x-go-name": "IP"
        },
        "pod": {
          "type": "string",
          "x-go-name": "Pod"
        },
        "service": {
          "type": "string",
          "x-go-name": "Service"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "NetworkResource": {
      "type": "object",
      "properties": {
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/network/types"
    },
    "NetworkStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/network/types"
    },
    "NodeAffinity": {
      "type": "object",
      "title": "Node affinity is a group of node affinity scheduling rules.",
      "properties": {
        "preferredDuringSchedulingIgnoredDuringExecution": {
          "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions; the\nnode(s) with the highest sum are the most preferred.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PreferredSchedulingTerm"
          },
          "x-go-name": "PreferredDuringSchedulingIgnoredDuringExecution"
        },
        "requiredDuringSchedulingIgnoredDuringExecution": {
          "$ref": "#/definitions/NodeSelector"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NodeGroup": {
      "type": "object",
      "properties": {
        "cluster_guid": {
          "type": "string",
          "x-go-name": "ClusterGUID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "credits_per_hour": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CreditsPerHour"
        },
        "disk_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DiskGiB"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "instance_type": {
          "type": "string",
          "x-go-name": "InstanceType"
        },
        "is_default": {
          "type": "boolean",
          "x-go-name": "IsDefault"
        },
        "max_node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MaxNodeCount"
        },
        "min_node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MinNodeCount"
        },
        "minutes_billed": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "MinutesBilled"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "node_count": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NodeCount"
        },
        "nodes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ClusterNode"
          },
          "x-go-name": "ClusterNodes"
        },
        "running_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RunningAt"
        },
        "total_credits": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCredits"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "NodeInclusionPolicy": {
      "description": "NodeInclusionPolicy defines the type of node inclusion policy\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NodeSelector": {
      "description": "A node selector represents the union of the results of one or more label queries\nover a set of nodes; that is, it represents the OR of the selectors represented\nby the node selector terms.\n+structType=atomic",
      "type": "object",
      "properties": {
        "nodeSelectorTerms": {
          "description": "Required. A list of node selector terms. The terms are ORed.\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/NodeSelectorTerm"
          },
          "x-go-name": "NodeSelectorTerms"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NodeSelectorOperator": {
      "description": "A node selector operator is the set of operators that can be used in\na node selector requirement.\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NodeSelectorRequirement": {
      "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.",
      "type": "object",
      "properties": {
        "key": {
          "description": "The label key that the selector applies to.",
          "type": "string",
          "x-go-name": "Key"
        },
        "operator": {
          "$ref": "#/definitions/NodeSelectorOperator"
        },
        "values": {
          "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Values"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NodeSelectorTerm": {
      "description": "A null or empty node selector term matches no objects. The requirements of\nthem are ANDed.\nThe TopologySelectorTerm type implements a subset of the NodeSelectorTerm.\n+structType=atomic",
      "type": "object",
      "properties": {
        "matchExpressions": {
          "description": "A list of node selector requirements by node's labels.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/NodeSelectorRequirement"
          },
          "x-go-name": "MatchExpressions"
        },
        "matchFields": {
          "description": "A list of node selector requirements by node's fields.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/NodeSelectorRequirement"
          },
          "x-go-name": "MatchFields"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "NodeType": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "NotificationEventAttempt": {
      "description": "NotificationEventAttempt represents a delivery attempt for a notification event",
      "type": "object",
      "properties": {
        "attemptedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AttemptedAt"
        },
        "durationMs": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DurationMs"
        },
        "errorMessage": {
          "type": "string",
          "x-go-name": "ErrorMessage"
        },
        "eventId": {
          "type": "string",
          "x-go-name": "EventID"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "requestBody": {
          "type": "object",
          "x-go-name": "RequestBody"
        },
        "requestHeaders": {
          "type": "object",
          "x-go-name": "RequestHeaders"
        },
        "responseBody": {
          "type": "string",
          "x-go-name": "ResponseBody"
        },
        "responseHeaders": {
          "type": "object",
          "x-go-name": "ResponseHeaders"
        },
        "statusCode": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "StatusCode"
        },
        "success": {
          "type": "boolean",
          "x-go-name": "Success"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications"
    },
    "NotificationEventConfig": {
      "description": "NotificationEventConfig represents an event configuration within a subscription",
      "type": "object",
      "properties": {
        "eventType": {
          "type": "string",
          "x-go-name": "EventType"
        },
        "filters": {
          "type": "object",
          "additionalProperties": {},
          "x-go-name": "Filters"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/types"
    },
    "NotificationEventWithAttempts": {
      "description": "NotificationEventWithAttempts includes event details and all delivery attempts",
      "type": "object",
      "properties": {
        "attempts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NotificationEventAttempt"
          },
          "x-go-name": "Attempts"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "eventData": {
          "type": "object",
          "x-go-name": "EventData"
        },
        "eventType": {
          "type": "string",
          "x-go-name": "EventType"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "lastError": {
          "type": "string",
          "x-go-name": "LastError"
        },
        "nextRetryAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "NextRetryAt"
        },
        "payload": {
          "type": "object",
          "x-go-name": "Payload"
        },
        "payloadType": {
          "type": "string",
          "x-go-name": "PayloadType"
        },
        "retryCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "RetryCount"
        },
        "sentAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "SentAt"
        },
        "status": {
          "description": "Computed fields",
          "type": "string",
          "x-go-name": "Status"
        },
        "subscriptionId": {
          "type": "string",
          "x-go-name": "NotificationSubscriptionID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications"
    },
    "NotificationSubscription": {
      "description": "NotificationSubscription represents a notification subscription",
      "type": "object",
      "properties": {
        "activeMutesCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ActiveMutesCount"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "createdBy": {
          "$ref": "#/definitions/Actor"
        },
        "customHeaders": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomHeaderMasked"
          },
          "x-go-name": "CustomHeaders"
        },
        "deletedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "DeletedAt"
        },
        "emailAddress": {
          "type": "string",
          "x-go-name": "EmailAddress"
        },
        "emailVerified": {
          "type": "boolean",
          "x-go-name": "EmailVerified"
        },
        "eventConfigs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NotificationEventConfig"
          },
          "x-go-name": "EventConfigs"
        },
        "failureContact": {
          "type": "string",
          "x-go-name": "FailureContact"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "isEnabled": {
          "type": "boolean",
          "x-go-name": "IsEnabled"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "readonly": {
          "type": "boolean",
          "x-go-name": "Readonly"
        },
        "requiresVerification": {
          "type": "boolean",
          "x-go-name": "RequiresVerification"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "userId": {
          "type": "string",
          "x-go-name": "UserID"
        },
        "webhookUrl": {
          "type": "string",
          "x-go-name": "WebhookURL"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/types"
    },
    "OSName": {
      "type": "string",
      "title": "OSName is the set of OS'es that can be used in OS.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ObjectFieldSelector": {
      "description": "+structType=atomic",
      "type": "object",
      "title": "ObjectFieldSelector selects an APIVersioned field of an object.",
      "properties": {
        "apiVersion": {
          "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".\n+optional",
          "type": "string",
          "x-go-name": "APIVersion"
        },
        "fieldPath": {
          "description": "Path of the field to select in the specified API version.",
          "type": "string",
          "x-go-name": "FieldPath"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ObjectReference": {
      "description": "New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs.\n1. Ignored fields.  It includes many fields which are not generally honored.  For instance, ResourceVersion and FieldPath are both very rarely valid in actual usage.\n2. Invalid usage help.  It is impossible to add specific help for individual usage.  In most embedded usages, there are particular\nrestrictions like, \"must refer only to types A and B\" or \"UID not honored\" or \"name must be restricted\".\nThose cannot be well described when embedded.\n3. Inconsistent validation.  Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen.\n4. The fields are both imprecise and overly precise.  Kind is not a precise mapping to a URL. This can produce ambiguity\nduring interpretation and require a REST mapping.  In most cases, the dependency is on the group,resource tuple\nand the version of the actual struct is irrelevant.\n5. We cannot easily change it.  Because this type is embedded in many locations, updates to this type\nwill affect numerous schemas.  Don't make new APIs embed an underspecified API type they do not control.\n\nInstead of using this type, create a locally provided and used type that is well-focused on your reference.\nFor example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .\n+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object\n+structType=atomic",
      "type": "object",
      "title": "ObjectReference contains enough information to let you inspect or modify the referred object.",
      "properties": {
        "apiVersion": {
          "description": "API version of the referent.\n+optional",
          "type": "string",
          "x-go-name": "APIVersion"
        },
        "fieldPath": {
          "description": "If referring to a piece of an object instead of an entire object, this string\nshould contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].\nFor example, if the object reference is to a container within a pod, this would take on a value like:\n\"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered\nthe event) or if no container name is specified \"spec.containers[2]\" (container with\nindex 2 in this pod). This syntax is chosen only to have some well-defined way of\nreferencing a part of an object.\nTODO: this design is not final and this field is subject to change in the future.\n+optional",
          "type": "string",
          "x-go-name": "FieldPath"
        },
        "kind": {
          "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional",
          "type": "string",
          "x-go-name": "Kind"
        },
        "name": {
          "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional",
          "type": "string",
          "x-go-name": "Name"
        },
        "namespace": {
          "description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n+optional",
          "type": "string",
          "x-go-name": "Namespace"
        },
        "resourceVersion": {
          "description": "Specific resourceVersion to which this reference is made, if any.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\n+optional",
          "type": "string",
          "x-go-name": "ResourceVersion"
        },
        "uid": {
          "$ref": "#/definitions/UID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Option": {
      "description": "Option represents an option for select/multiselect fields",
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "label": {
          "type": "string",
          "x-go-name": "Label"
        },
        "metricType": {
          "type": "string",
          "x-go-name": "MetricType"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/events"
    },
    "OwnerReference": {
      "description": "OwnerReference contains enough information to let you identify an owning\nobject. An owning object must be in the same namespace as the dependent, or\nbe cluster-scoped, so there is no namespace field.\n+structType=atomic",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "API version of the referent.",
          "type": "string",
          "x-go-name": "APIVersion"
        },
        "blockOwnerDeletion": {
          "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then\nthe owner cannot be deleted from the key-value store until this\nreference is removed.\nSee https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion\nfor how the garbage collector interacts with this field and enforces the foreground deletion.\nDefaults to false.\nTo set this field, a user needs \"delete\" permission of the owner,\notherwise 422 (Unprocessable Entity) will be returned.\n+optional",
          "type": "boolean",
          "x-go-name": "BlockOwnerDeletion"
        },
        "controller": {
          "description": "If true, this reference points to the managing controller.\n+optional",
          "type": "boolean",
          "x-go-name": "Controller"
        },
        "kind": {
          "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
          "type": "string",
          "x-go-name": "Kind"
        },
        "name": {
          "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names",
          "type": "string",
          "x-go-name": "Name"
        },
        "uid": {
          "$ref": "#/definitions/UID"
        }
      },
      "x-go-package": "k8s.io/apimachinery/pkg/apis/meta/v1"
    },
    "PayloadField": {
      "description": "Fields are returned as an ordered slice to preserve display order in the UI.",
      "type": "object",
      "title": "PayloadField describes a single field in the webhook payload's \"data\" object.",
      "properties": {
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "type": {
          "type": "string",
          "x-go-name": "Type"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications/events"
    },
    "PersistentVolumeAccessMode": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PersistentVolumeClaimSpec": {
      "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices\nand allows a Source for provider-specific attributes",
      "type": "object",
      "properties": {
        "accessModes": {
          "description": "accessModes contains the desired access modes the volume should have.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PersistentVolumeAccessMode"
          },
          "x-go-name": "AccessModes"
        },
        "dataSource": {
          "$ref": "#/definitions/TypedLocalObjectReference"
        },
        "dataSourceRef": {
          "$ref": "#/definitions/TypedObjectReference"
        },
        "resources": {
          "$ref": "#/definitions/VolumeResourceRequirements"
        },
        "selector": {
          "$ref": "#/definitions/LabelSelector"
        },
        "storageClassName": {
          "description": "storageClassName is the name of the StorageClass required by the claim.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\n+optional",
          "type": "string",
          "x-go-name": "StorageClassName"
        },
        "volumeAttributesClassName": {
          "description": "volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.\nIf specified, the CSI driver will create or update the volume with the attributes defined\nin the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,\nit can be changed after the claim is created. An empty string or nil value indicates that no\nVolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state,\nthis field can be reset to its previous value (including nil) to cancel the modification.\nIf the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be\nset to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource\nexists.\nMore info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/\n+featureGate=VolumeAttributesClass\n+optional",
          "type": "string",
          "x-go-name": "VolumeAttributesClassName"
        },
        "volumeMode": {
          "$ref": "#/definitions/PersistentVolumeMode"
        },
        "volumeName": {
          "description": "volumeName is the binding reference to the PersistentVolume backing this claim.\n+optional",
          "type": "string",
          "x-go-name": "VolumeName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PersistentVolumeClaimTemplate": {
      "description": "PersistentVolumeClaimTemplate is used to produce\nPersistentVolumeClaim objects as part of an EphemeralVolumeSource.",
      "type": "object",
      "properties": {
        "annotations": {
          "description": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Annotations"
        },
        "creationTimestamp": {
          "description": "CreationTimestamp is a timestamp representing the server time when this object was\ncreated. It is not guaranteed to be set in happens-before order across separate operations.\nClients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system.\nRead-only.\nNull for lists.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional",
          "type": "string",
          "x-go-name": "CreationTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "deletionGracePeriodSeconds": {
          "description": "Number of seconds allowed for this object to gracefully terminate before\nit will be removed from the system. Only set when deletionTimestamp is also set.\nMay only be shortened.\nRead-only.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "DeletionGracePeriodSeconds"
        },
        "deletionTimestamp": {
          "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This\nfield is set by the server when a graceful deletion is requested by the user, and is not\ndirectly settable by a client. The resource is expected to be deleted (no longer visible\nfrom resource lists, and not reachable by name) after the time in this field, once the\nfinalizers list is empty. As long as the finalizers list contains items, deletion is blocked.\nOnce the deletionTimestamp is set, this value may not be unset or be set further into the\nfuture, although it may be shortened or the resource may be deleted prior to this time.\nFor example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react\nby sending a graceful termination signal to the containers in the pod. After that 30 seconds,\nthe Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup,\nremove the pod from the API. In the presence of network partitions, this object may still\nexist after this timestamp, until an administrator or automated process can determine the\nresource is fully terminated.\nIf not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested.\nRead-only.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional",
          "type": "string",
          "x-go-name": "DeletionTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "finalizers": {
          "description": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\nFinalizers may be processed and removed in any order.  Order is NOT enforced\nbecause it introduces significant risk of stuck finalizers.\nfinalizers is a shared field, any actor with permission can reorder it.\nIf the finalizer list is processed in order, then this can lead to a situation\nin which the component responsible for the first finalizer in the list is\nwaiting for a signal (field value, external system, or other) produced by a\ncomponent responsible for a finalizer later in the list, resulting in a deadlock.\nWithout enforced ordering finalizers are free to order amongst themselves and\nare not vulnerable to ordering changes in the list.\n+optional\n+patchStrategy=merge\n+listType=set",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Finalizers"
        },
        "generateName": {
          "description": "GenerateName is an optional prefix, used by the server, to generate a unique\nname ONLY IF the Name field has not been provided.\nIf this field is used, the name returned to the client will be different\nthan the name passed. This value will also be combined with a unique suffix.\nThe provided value has the same validation rules as the Name field,\nand may be truncated by the length of the suffix required to make the value\nunique on the server.\n\nIf this field is specified and the generated name exists, the server will return a 409.\n\nApplied only if Name is not specified.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency\n+optional",
          "type": "string",
          "x-go-name": "GenerateName"
        },
        "generation": {
          "description": "A sequence number representing a specific generation of the desired state.\nPopulated by the system. Read-only.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "Generation"
        },
        "labels": {
          "description": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Labels"
        },
        "managedFields": {
          "description": "ManagedFields maps workflow-id and version to the set of fields\nthat are managed by that workflow. This is mostly for internal\nhousekeeping, and users typically shouldn't need to set or\nunderstand this field. A workflow can be the user's name, a\ncontroller's name, or the name of a specific apply path like\n\"ci-cd\". The set of fields is always in the version that the\nworkflow used when modifying the object.\n\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ManagedFieldsEntry"
          },
          "x-go-name": "ManagedFields"
        },
        "name": {
          "description": "Name must be unique within a namespace. Is required when creating resources, although\nsome resources may allow a client to request the generation of an appropriate name\nautomatically. Name is primarily intended for creation idempotence and configuration\ndefinition.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names\n+optional",
          "type": "string",
          "x-go-name": "Name"
        },
        "namespace": {
          "description": "Namespace defines the space within which each name must be unique. An empty namespace is\nequivalent to the \"default\" namespace, but \"default\" is the canonical representation.\nNot all objects are required to be scoped to a namespace - the value of this field for\nthose objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces\n+optional",
          "type": "string",
          "x-go-name": "Namespace"
        },
        "ownerReferences": {
          "description": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge\n+listType=map\n+listMapKey=uid",
          "type": "array",
          "items": {
            "$ref": "#/definitions/OwnerReference"
          },
          "x-go-name": "OwnerReferences"
        },
        "resourceVersion": {
          "description": "An opaque value that represents the internal version of this object that can\nbe used by clients to determine when objects have changed. May be used for optimistic\nconcurrency, change detection, and the watch operation on a resource or set of resources.\nClients must treat these values as opaque and passed unmodified back to the server.\nThey may only be valid for a particular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\n+optional",
          "type": "string",
          "x-go-name": "ResourceVersion"
        },
        "selfLink": {
          "description": "Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.\n+optional",
          "type": "string",
          "x-go-name": "SelfLink"
        },
        "spec": {
          "$ref": "#/definitions/PersistentVolumeClaimSpec"
        },
        "uid": {
          "$ref": "#/definitions/UID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PersistentVolumeClaimVolumeSource": {
      "description": "This volume finds the bound PV and mounts that volume for the pod. A\nPersistentVolumeClaimVolumeSource is, essentially, a wrapper around another\ntype of volume that is owned by someone else (the system).",
      "type": "object",
      "title": "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.",
      "properties": {
        "claimName": {
          "description": "claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims",
          "type": "string",
          "x-go-name": "ClaimName"
        },
        "readOnly": {
          "description": "readOnly Will force the ReadOnly setting in VolumeMounts.\nDefault false.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PersistentVolumeMode": {
      "description": "+enum",
      "type": "string",
      "title": "PersistentVolumeMode describes how a volume is intended to be consumed, either Block or Filesystem.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PhotonPersistentDiskVolumeSource": {
      "type": "object",
      "title": "Represents a Photon Controller persistent disk resource.",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
          "type": "string",
          "x-go-name": "FSType"
        },
        "pdID": {
          "description": "pdID is the ID that identifies Photon Controller persistent disk",
          "type": "string",
          "x-go-name": "PdID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Pod": {
      "description": "Pod is a collection of containers that can run on a host. This resource is created\nby clients and scheduled onto hosts.",
      "type": "object",
      "properties": {
        "annotations": {
          "description": "Annotations is an unstructured key value map stored with a resource that may be\nset by external tools to store and retrieve arbitrary metadata. They are not\nqueryable and should be preserved when modifying objects.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Annotations"
        },
        "apiVersion": {
          "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources\n+optional",
          "type": "string",
          "x-go-name": "APIVersion"
        },
        "creationTimestamp": {
          "description": "CreationTimestamp is a timestamp representing the server time when this object was\ncreated. It is not guaranteed to be set in happens-before order across separate operations.\nClients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system.\nRead-only.\nNull for lists.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional",
          "type": "string",
          "x-go-name": "CreationTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "deletionGracePeriodSeconds": {
          "description": "Number of seconds allowed for this object to gracefully terminate before\nit will be removed from the system. Only set when deletionTimestamp is also set.\nMay only be shortened.\nRead-only.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "DeletionGracePeriodSeconds"
        },
        "deletionTimestamp": {
          "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This\nfield is set by the server when a graceful deletion is requested by the user, and is not\ndirectly settable by a client. The resource is expected to be deleted (no longer visible\nfrom resource lists, and not reachable by name) after the time in this field, once the\nfinalizers list is empty. As long as the finalizers list contains items, deletion is blocked.\nOnce the deletionTimestamp is set, this value may not be unset or be set further into the\nfuture, although it may be shortened or the resource may be deleted prior to this time.\nFor example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react\nby sending a graceful termination signal to the containers in the pod. After that 30 seconds,\nthe Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup,\nremove the pod from the API. In the presence of network partitions, this object may still\nexist after this timestamp, until an administrator or automated process can determine the\nresource is fully terminated.\nIf not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested.\nRead-only.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional",
          "type": "string",
          "x-go-name": "DeletionTimestamp",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "finalizers": {
          "description": "Must be empty before the object is deleted from the registry. Each entry\nis an identifier for the responsible component that will remove the entry\nfrom the list. If the deletionTimestamp of the object is non-nil, entries\nin this list can only be removed.\nFinalizers may be processed and removed in any order.  Order is NOT enforced\nbecause it introduces significant risk of stuck finalizers.\nfinalizers is a shared field, any actor with permission can reorder it.\nIf the finalizer list is processed in order, then this can lead to a situation\nin which the component responsible for the first finalizer in the list is\nwaiting for a signal (field value, external system, or other) produced by a\ncomponent responsible for a finalizer later in the list, resulting in a deadlock.\nWithout enforced ordering finalizers are free to order amongst themselves and\nare not vulnerable to ordering changes in the list.\n+optional\n+patchStrategy=merge\n+listType=set",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Finalizers"
        },
        "generateName": {
          "description": "GenerateName is an optional prefix, used by the server, to generate a unique\nname ONLY IF the Name field has not been provided.\nIf this field is used, the name returned to the client will be different\nthan the name passed. This value will also be combined with a unique suffix.\nThe provided value has the same validation rules as the Name field,\nand may be truncated by the length of the suffix required to make the value\nunique on the server.\n\nIf this field is specified and the generated name exists, the server will return a 409.\n\nApplied only if Name is not specified.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency\n+optional",
          "type": "string",
          "x-go-name": "GenerateName"
        },
        "generation": {
          "description": "A sequence number representing a specific generation of the desired state.\nPopulated by the system. Read-only.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "Generation"
        },
        "kind": {
          "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional",
          "type": "string",
          "x-go-name": "Kind"
        },
        "labels": {
          "description": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels\n+optional",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Labels"
        },
        "managedFields": {
          "description": "ManagedFields maps workflow-id and version to the set of fields\nthat are managed by that workflow. This is mostly for internal\nhousekeeping, and users typically shouldn't need to set or\nunderstand this field. A workflow can be the user's name, a\ncontroller's name, or the name of a specific apply path like\n\"ci-cd\". The set of fields is always in the version that the\nworkflow used when modifying the object.\n\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ManagedFieldsEntry"
          },
          "x-go-name": "ManagedFields"
        },
        "name": {
          "description": "Name must be unique within a namespace. Is required when creating resources, although\nsome resources may allow a client to request the generation of an appropriate name\nautomatically. Name is primarily intended for creation idempotence and configuration\ndefinition.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names\n+optional",
          "type": "string",
          "x-go-name": "Name"
        },
        "namespace": {
          "description": "Namespace defines the space within which each name must be unique. An empty namespace is\nequivalent to the \"default\" namespace, but \"default\" is the canonical representation.\nNot all objects are required to be scoped to a namespace - the value of this field for\nthose objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces\n+optional",
          "type": "string",
          "x-go-name": "Namespace"
        },
        "ownerReferences": {
          "description": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is managed by a controller,\nthen an entry in this list will point to this controller, with the controller field set to true.\nThere cannot be more than one managing controller.\n+optional\n+patchMergeKey=uid\n+patchStrategy=merge\n+listType=map\n+listMapKey=uid",
          "type": "array",
          "items": {
            "$ref": "#/definitions/OwnerReference"
          },
          "x-go-name": "OwnerReferences"
        },
        "resourceVersion": {
          "description": "An opaque value that represents the internal version of this object that can\nbe used by clients to determine when objects have changed. May be used for optimistic\nconcurrency, change detection, and the watch operation on a resource or set of resources.\nClients must treat these values as opaque and passed unmodified back to the server.\nThey may only be valid for a particular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\n+optional",
          "type": "string",
          "x-go-name": "ResourceVersion"
        },
        "selfLink": {
          "description": "Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.\n+optional",
          "type": "string",
          "x-go-name": "SelfLink"
        },
        "spec": {
          "$ref": "#/definitions/PodSpec"
        },
        "status": {
          "$ref": "#/definitions/PodStatus"
        },
        "uid": {
          "$ref": "#/definitions/UID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodAffinity": {
      "type": "object",
      "title": "Pod affinity is a group of inter pod affinity scheduling rules.",
      "properties": {
        "preferredDuringSchedulingIgnoredDuringExecution": {
          "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/WeightedPodAffinityTerm"
          },
          "x-go-name": "PreferredDuringSchedulingIgnoredDuringExecution"
        },
        "requiredDuringSchedulingIgnoredDuringExecution": {
          "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodAffinityTerm"
          },
          "x-go-name": "RequiredDuringSchedulingIgnoredDuringExecution"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodAffinityTerm": {
      "description": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key <topologyKey> matches that of any node on which\na pod of the set of pods is running",
      "type": "object",
      "properties": {
        "labelSelector": {
          "$ref": "#/definitions/LabelSelector"
        },
        "matchLabelKeys": {
          "description": "MatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both matchLabelKeys and labelSelector.\nAlso, matchLabelKeys cannot be set when labelSelector isn't set.\n\n+listType=atomic\n+optional",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "MatchLabelKeys"
        },
        "mismatchLabelKeys": {
          "description": "MismatchLabelKeys is a set of pod label keys to select which pods will\nbe taken into consideration. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`\nto select the group of existing pods which pods will be taken into consideration\nfor the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming\npod labels will be ignored. The default value is empty.\nThe same key is forbidden to exist in both mismatchLabelKeys and labelSelector.\nAlso, mismatchLabelKeys cannot be set when labelSelector isn't set.\n\n+listType=atomic\n+optional",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "MismatchLabelKeys"
        },
        "namespaceSelector": {
          "$ref": "#/definitions/LabelSelector"
        },
        "namespaces": {
          "description": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\".\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Namespaces"
        },
        "topologyKey": {
          "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.",
          "type": "string",
          "x-go-name": "TopologyKey"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodAntiAffinity": {
      "type": "object",
      "title": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.",
      "properties": {
        "preferredDuringSchedulingIgnoredDuringExecution": {
          "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe anti-affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling anti-affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and subtracting\n\"weight\" from the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/WeightedPodAffinityTerm"
          },
          "x-go-name": "PreferredDuringSchedulingIgnoredDuringExecution"
        },
        "requiredDuringSchedulingIgnoredDuringExecution": {
          "description": "If the anti-affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the anti-affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodAffinityTerm"
          },
          "x-go-name": "RequiredDuringSchedulingIgnoredDuringExecution"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodCertificateProjection": {
      "description": "PodCertificateProjection provides a private key and X.509 certificate in the\npod filesystem.",
      "type": "object",
      "properties": {
        "certificateChainPath": {
          "description": "Write the certificate chain at this path in the projected volume.\n\nMost applications should use credentialBundlePath.  When using keyPath\nand certificateChainPath, your application needs to check that the key\nand leaf certificate are consistent, because it is possible to read the\nfiles mid-rotation.\n\n+optional",
          "type": "string",
          "x-go-name": "CertificateChainPath"
        },
        "credentialBundlePath": {
          "description": "Write the credential bundle at this path in the projected volume.\n\nThe credential bundle is a single file that contains multiple PEM blocks.\nThe first PEM block is a PRIVATE KEY block, containing a PKCS#8 private\nkey.\n\nThe remaining blocks are CERTIFICATE blocks, containing the issued\ncertificate chain from the signer (leaf and any intermediates).\n\nUsing credentialBundlePath lets your Pod's application code make a single\natomic read that retrieves a consistent key and certificate chain.  If you\nproject them to separate files, your application code will need to\nadditionally check that the leaf certificate was issued to the key.\n\n+optional",
          "type": "string",
          "x-go-name": "CredentialBundlePath"
        },
        "keyPath": {
          "description": "Write the key at this path in the projected volume.\n\nMost applications should use credentialBundlePath.  When using keyPath\nand certificateChainPath, your application needs to check that the key\nand leaf certificate are consistent, because it is possible to read the\nfiles mid-rotation.\n\n+optional",
          "type": "string",
          "x-go-name": "KeyPath"
        },
        "keyType": {
          "description": "The type of keypair Kubelet will generate for the pod.\n\nValid values are \"RSA3072\", \"RSA4096\", \"ECDSAP256\", \"ECDSAP384\",\n\"ECDSAP521\", and \"ED25519\".\n\n+required",
          "type": "string",
          "x-go-name": "KeyType"
        },
        "maxExpirationSeconds": {
          "description": "maxExpirationSeconds is the maximum lifetime permitted for the\ncertificate.\n\nKubelet copies this value verbatim into the PodCertificateRequests it\ngenerates for this projection.\n\nIf omitted, kube-apiserver will set it to 86400(24 hours). kube-apiserver\nwill reject values shorter than 3600 (1 hour).  The maximum allowable\nvalue is 7862400 (91 days).\n\nThe signer implementation is then free to issue a certificate with any\nlifetime *shorter* than MaxExpirationSeconds, but no shorter than 3600\nseconds (1 hour).  This constraint is enforced by kube-apiserver.\n`kubernetes.io` signers will never issue certificates with a lifetime\nlonger than 24 hours.\n\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "MaxExpirationSeconds"
        },
        "signerName": {
          "description": "Kubelet's generated CSRs will be addressed to this signer.\n\n+required",
          "type": "string",
          "x-go-name": "SignerName"
        },
        "userAnnotations": {
          "description": "userAnnotations allow pod authors to pass additional information to\nthe signer implementation.  Kubernetes does not restrict or validate this\nmetadata in any way.\n\nThese values are copied verbatim into the `spec.unverifiedUserAnnotations` field of\nthe PodCertificateRequest objects that Kubelet creates.\n\nEntries are subject to the same validation as object metadata annotations,\nwith the addition that all keys must be domain-prefixed. No restrictions\nare placed on values, except an overall size limitation on the entire field.\n\nSigners should document the keys and values they support. Signers should\ndeny requests that contain keys they do not recognize.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "UserAnnotations"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodCondition": {
      "type": "object",
      "title": "PodCondition contains details for the current condition of this pod.",
      "properties": {
        "lastProbeTime": {
          "description": "Last time we probed the condition.\n+optional",
          "type": "string",
          "x-go-name": "LastProbeTime",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "lastTransitionTime": {
          "description": "Last time the condition transitioned from one status to another.\n+optional",
          "type": "string",
          "x-go-name": "LastTransitionTime",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        },
        "message": {
          "description": "Human-readable message indicating details about last transition.\n+optional",
          "type": "string",
          "x-go-name": "Message"
        },
        "observedGeneration": {
          "description": "If set, this represents the .metadata.generation that the pod condition was set based upon.\nThe PodObservedGenerationTracking feature gate must be enabled to use this field.\n+featureGate=PodObservedGenerationTracking\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "ObservedGeneration"
        },
        "reason": {
          "description": "Unique, one-word, CamelCase reason for the condition's last transition.\n+optional",
          "type": "string",
          "x-go-name": "Reason"
        },
        "status": {
          "$ref": "#/definitions/ConditionStatus"
        },
        "type": {
          "$ref": "#/definitions/PodConditionType"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodConditionType": {
      "description": "PodConditionType is a valid value for PodCondition.Type",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodContainer": {
      "type": "object",
      "properties": {
        "isInitContainer": {
          "type": "boolean",
          "x-go-name": "IsInitContainer"
        },
        "logsFilePath": {
          "type": "string",
          "x-go-name": "LogsFilePath"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "github.com/replicatedhq/troubleshoot/pkg/supportbundle/types"
    },
    "PodDNSConfig": {
      "description": "PodDNSConfig defines the DNS parameters of a pod in addition to\nthose generated from DNSPolicy.",
      "type": "object",
      "properties": {
        "nameservers": {
          "description": "A list of DNS name server IP addresses.\nThis will be appended to the base nameservers generated from DNSPolicy.\nDuplicated nameservers will be removed.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Nameservers"
        },
        "options": {
          "description": "A list of DNS resolver options.\nThis will be merged with the base options generated from DNSPolicy.\nDuplicated entries will be removed. Resolution options given in Options\nwill override those that appear in the base DNSPolicy.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodDNSConfigOption"
          },
          "x-go-name": "Options"
        },
        "searches": {
          "description": "A list of DNS search domains for host-name lookup.\nThis will be appended to the base search paths generated from DNSPolicy.\nDuplicated search paths will be removed.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Searches"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodDNSConfigOption": {
      "type": "object",
      "title": "PodDNSConfigOption defines DNS resolver options of a pod.",
      "properties": {
        "name": {
          "description": "Name is this DNS resolver option's name.\nRequired.",
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "description": "Value is this DNS resolver option's value.\n+optional",
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodExtendedResourceClaimStatus": {
      "description": "PodExtendedResourceClaimStatus is stored in the PodStatus for the extended\nresource requests backed by DRA. It stores the generated name for\nthe corresponding special ResourceClaim created by the scheduler.",
      "type": "object",
      "properties": {
        "requestMappings": {
          "description": "RequestMappings identifies the mapping of <container, extended resource backed by DRA> to  device request\nin the generated ResourceClaim.\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerExtendedResourceRequest"
          },
          "x-go-name": "RequestMappings"
        },
        "resourceClaimName": {
          "description": "ResourceClaimName is the name of the ResourceClaim that was\ngenerated for the Pod in the namespace of the Pod.",
          "type": "string",
          "x-go-name": "ResourceClaimName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodFSGroupChangePolicy": {
      "description": "PodFSGroupChangePolicy holds policies that will be used for applying fsGroup to a volume\nwhen volume is mounted.\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodIP": {
      "type": "object",
      "title": "PodIP represents a single IP address allocated to the pod.",
      "properties": {
        "ip": {
          "description": "IP is the IP address assigned to the pod\n+required",
          "type": "string",
          "x-go-name": "IP"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodOS": {
      "type": "object",
      "title": "PodOS defines the OS parameters of a pod.",
      "properties": {
        "name": {
          "$ref": "#/definitions/OSName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodPhase": {
      "description": "+enum",
      "type": "string",
      "title": "PodPhase is a label for the condition of a pod at the current time.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodQOSClass": {
      "description": "+enum",
      "type": "string",
      "title": "PodQOSClass defines the supported qos classes of Pods.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodReadinessGate": {
      "description": "PodReadinessGate contains the reference to a pod condition",
      "type": "object",
      "properties": {
        "conditionType": {
          "$ref": "#/definitions/PodConditionType"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodResizeStatus": {
      "type": "string",
      "title": "Deprecated: PodResizeStatus shows status of desired resize of a pod's containers.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodResourceClaim": {
      "description": "It adds a name to it that uniquely identifies the ResourceClaim inside the Pod.\nContainers that need access to the ResourceClaim reference it with this name.",
      "type": "object",
      "title": "PodResourceClaim references exactly one ResourceClaim, either directly\nor by naming a ResourceClaimTemplate which is then turned into a ResourceClaim\nfor the pod.",
      "properties": {
        "name": {
          "description": "Name uniquely identifies this resource claim inside the pod.\nThis must be a DNS_LABEL.",
          "type": "string",
          "x-go-name": "Name"
        },
        "resourceClaimName": {
          "description": "ResourceClaimName is the name of a ResourceClaim object in the same\nnamespace as this pod.\n\nExactly one of ResourceClaimName and ResourceClaimTemplateName must\nbe set.",
          "type": "string",
          "x-go-name": "ResourceClaimName"
        },
        "resourceClaimTemplateName": {
          "description": "ResourceClaimTemplateName is the name of a ResourceClaimTemplate\nobject in the same namespace as this pod.\n\nThe template will be used to create a new ResourceClaim, which will\nbe bound to this pod. When this pod is deleted, the ResourceClaim\nwill also be deleted. The pod name and resource name, along with a\ngenerated component, will be used to form a unique name for the\nResourceClaim, which will be recorded in pod.status.resourceClaimStatuses.\n\nThis field is immutable and no changes will be made to the\ncorresponding ResourceClaim by the control plane after creating the\nResourceClaim.\n\nExactly one of ResourceClaimName and ResourceClaimTemplateName must\nbe set.",
          "type": "string",
          "x-go-name": "ResourceClaimTemplateName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodResourceClaimStatus": {
      "description": "PodResourceClaimStatus is stored in the PodStatus for each PodResourceClaim\nwhich references a ResourceClaimTemplate. It stores the generated name for\nthe corresponding ResourceClaim.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name uniquely identifies this resource claim inside the pod.\nThis must match the name of an entry in pod.spec.resourceClaims,\nwhich implies that the string must be a DNS_LABEL.",
          "type": "string",
          "x-go-name": "Name"
        },
        "resourceClaimName": {
          "description": "ResourceClaimName is the name of the ResourceClaim that was\ngenerated for the Pod in the namespace of the Pod. If this is\nunset, then generating a ResourceClaim was not necessary. The\npod.spec.resourceClaims entry can be ignored in this case.\n\n+optional",
          "type": "string",
          "x-go-name": "ResourceClaimName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodSELinuxChangePolicy": {
      "type": "string",
      "title": "PodSELinuxChangePolicy defines how the container's SELinux label is applied to all volumes used by the Pod.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodSchedulingGate": {
      "type": "object",
      "title": "PodSchedulingGate is associated to a Pod to guard its scheduling.",
      "properties": {
        "name": {
          "description": "Name of the scheduling gate.\nEach scheduling gate must have a unique name field.",
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodSecurityContext": {
      "description": "Some fields are also present in container.securityContext.  Field values of\ncontainer.securityContext take precedence over field values of PodSecurityContext.",
      "type": "object",
      "title": "PodSecurityContext holds pod-level security attributes and common container settings.",
      "properties": {
        "appArmorProfile": {
          "$ref": "#/definitions/AppArmorProfile"
        },
        "fsGroup": {
          "description": "A special supplemental group that applies to all containers in a pod.\nSome volume types allow the Kubelet to change the ownership of that volume\nto be owned by the pod:\n\n1. The owning GID will be the FSGroup\n2. The setgid bit is set (new files created in the volume will be owned by FSGroup)\n3. The permission bits are OR'd with rw-rw----\n\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "FSGroup"
        },
        "fsGroupChangePolicy": {
          "$ref": "#/definitions/PodFSGroupChangePolicy"
        },
        "runAsGroup": {
          "description": "The GID to run the entrypoint of the container process.\nUses runtime default if unset.\nMay also be set in SecurityContext.  If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence\nfor that container.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "RunAsGroup"
        },
        "runAsNonRoot": {
          "description": "Indicates that the container must run as a non-root user.\nIf true, the Kubelet will validate the image at runtime to ensure that it\ndoes not run as UID 0 (root) and fail to start the container if it does.\nIf unset or false, no such validation will be performed.\nMay also be set in SecurityContext.  If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence.\n+optional",
          "type": "boolean",
          "x-go-name": "RunAsNonRoot"
        },
        "runAsUser": {
          "description": "The UID to run the entrypoint of the container process.\nDefaults to user specified in image metadata if unspecified.\nMay also be set in SecurityContext.  If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence\nfor that container.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "RunAsUser"
        },
        "seLinuxChangePolicy": {
          "$ref": "#/definitions/PodSELinuxChangePolicy"
        },
        "seLinuxOptions": {
          "$ref": "#/definitions/SELinuxOptions"
        },
        "seccompProfile": {
          "$ref": "#/definitions/SeccompProfile"
        },
        "supplementalGroups": {
          "description": "A list of groups applied to the first process run in each container, in\naddition to the container's primary GID and fsGroup (if specified).  If\nthe SupplementalGroupsPolicy feature is enabled, the\nsupplementalGroupsPolicy field determines whether these are in addition\nto or instead of any group memberships defined in the container image.\nIf unspecified, no additional groups are added, though group memberships\ndefined in the container image may still be used, depending on the\nsupplementalGroupsPolicy field.\nNote that this field cannot be set when spec.os.name is windows.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "integer",
            "format": "int64"
          },
          "x-go-name": "SupplementalGroups"
        },
        "supplementalGroupsPolicy": {
          "$ref": "#/definitions/SupplementalGroupsPolicy"
        },
        "sysctls": {
          "description": "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported\nsysctls (by the container runtime) might fail to launch.\nNote that this field cannot be set when spec.os.name is windows.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Sysctl"
          },
          "x-go-name": "Sysctls"
        },
        "windowsOptions": {
          "$ref": "#/definitions/WindowsSecurityContextOptions"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodSpec": {
      "type": "object",
      "title": "PodSpec is a description of a pod.",
      "properties": {
        "activeDeadlineSeconds": {
          "description": "Optional duration in seconds the pod may be active on the node relative to\nStartTime before the system will actively try to mark it failed and kill associated containers.\nValue must be a positive integer.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "ActiveDeadlineSeconds"
        },
        "affinity": {
          "$ref": "#/definitions/Affinity"
        },
        "automountServiceAccountToken": {
          "description": "AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n+optional",
          "type": "boolean",
          "x-go-name": "AutomountServiceAccountToken"
        },
        "containers": {
          "description": "List of containers belonging to the pod.\nContainers cannot currently be added or removed.\nThere must be at least one container in a Pod.\nCannot be updated.\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Container"
          },
          "x-go-name": "Containers"
        },
        "dnsConfig": {
          "$ref": "#/definitions/PodDNSConfig"
        },
        "dnsPolicy": {
          "$ref": "#/definitions/DNSPolicy"
        },
        "enableServiceLinks": {
          "description": "EnableServiceLinks indicates whether information about services should be injected into pod's\nenvironment variables, matching the syntax of Docker links.\nOptional: Defaults to true.\n+optional",
          "type": "boolean",
          "x-go-name": "EnableServiceLinks"
        },
        "ephemeralContainers": {
          "description": "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing\npod to perform user-initiated actions such as debugging. This list cannot be specified when\ncreating a pod, and it cannot be modified by updating the pod spec. In order to add an\nephemeral container to an existing pod, use the pod's ephemeralcontainers subresource.\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/EphemeralContainer"
          },
          "x-go-name": "EphemeralContainers"
        },
        "hostAliases": {
          "description": "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts\nfile if specified.\n+optional\n+patchMergeKey=ip\n+patchStrategy=merge\n+listType=map\n+listMapKey=ip",
          "type": "array",
          "items": {
            "$ref": "#/definitions/HostAlias"
          },
          "x-go-name": "HostAliases"
        },
        "hostIPC": {
          "description": "Use the host's ipc namespace.\nOptional: Default to false.\n+k8s:conversion-gen=false\n+optional",
          "type": "boolean",
          "x-go-name": "HostIPC"
        },
        "hostNetwork": {
          "description": "Host networking requested for this pod. Use the host's network namespace.\nWhen using HostNetwork you should specify ports so the scheduler is aware.\nWhen `hostNetwork` is true, specified `hostPort` fields in port definitions must match `containerPort`,\nand unspecified `hostPort` fields in port definitions are defaulted to match `containerPort`.\nDefault to false.\n+k8s:conversion-gen=false\n+optional",
          "type": "boolean",
          "x-go-name": "HostNetwork"
        },
        "hostPID": {
          "description": "Use the host's pid namespace.\nOptional: Default to false.\n+k8s:conversion-gen=false\n+optional",
          "type": "boolean",
          "x-go-name": "HostPID"
        },
        "hostUsers": {
          "description": "Use the host's user namespace.\nOptional: Default to true.\nIf set to true or not present, the pod will be run in the host user namespace, useful\nfor when the pod needs a feature only available to the host user namespace, such as\nloading a kernel module with CAP_SYS_MODULE.\nWhen set to false, a new userns is created for the pod. Setting false is useful for\nmitigating container breakout vulnerabilities even allowing users to run their\ncontainers as root without actually having root privileges on the host.\nThis field is alpha-level and is only honored by servers that enable the UserNamespacesSupport feature.\n+k8s:conversion-gen=false\n+optional",
          "type": "boolean",
          "x-go-name": "HostUsers"
        },
        "hostname": {
          "description": "Specifies the hostname of the Pod\nIf not specified, the pod's hostname will be set to a system-defined value.\n+optional",
          "type": "string",
          "x-go-name": "Hostname"
        },
        "hostnameOverride": {
          "description": "HostnameOverride specifies an explicit override for the pod's hostname as perceived by the pod.\nThis field only specifies the pod's hostname and does not affect its DNS records.\nWhen this field is set to a non-empty string:\nIt takes precedence over the values set in `hostname` and `subdomain`.\nThe Pod's hostname will be set to this value.\n`setHostnameAsFQDN` must be nil or set to false.\n`hostNetwork` must be set to false.\n\nThis field must be a valid DNS subdomain as defined in RFC 1123 and contain at most 64 characters.\nRequires the HostnameOverride feature gate to be enabled.\n\n+featureGate=HostnameOverride\n+optional",
          "type": "string",
          "x-go-name": "HostnameOverride"
        },
        "imagePullSecrets": {
          "description": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.\nIf specified, these secrets will be passed to individual puller implementations for them to use.\nMore info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n+optional\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/LocalObjectReference"
          },
          "x-go-name": "ImagePullSecrets"
        },
        "initContainers": {
          "description": "List of initialization containers belonging to the pod.\nInit containers are executed in order prior to containers being started. If any\ninit container fails, the pod is considered to have failed and is handled according\nto its restartPolicy. The name for an init container or normal container must be\nunique among all containers.\nInit containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes.\nThe resourceRequirements of an init container are taken into account during scheduling\nby finding the highest request/limit for each resource type, and then using the max of\nthat value or the sum of the normal containers. Limits are applied to init containers\nin a similar fashion.\nInit containers cannot currently be added or removed.\nCannot be updated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Container"
          },
          "x-go-name": "InitContainers"
        },
        "nodeName": {
          "description": "NodeName indicates in which node this pod is scheduled.\nIf empty, this pod is a candidate for scheduling by the scheduler defined in schedulerName.\nOnce this field is set, the kubelet for this node becomes responsible for the lifecycle of this pod.\nThis field should not be used to express a desire for the pod to be scheduled on a specific node.\nhttps://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodename\n+optional",
          "type": "string",
          "x-go-name": "NodeName"
        },
        "nodeSelector": {
          "description": "NodeSelector is a selector which must be true for the pod to fit on a node.\nSelector which must match a node's labels for the pod to be scheduled on that node.\nMore info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n+optional\n+mapType=atomic",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "NodeSelector"
        },
        "os": {
          "$ref": "#/definitions/PodOS"
        },
        "overhead": {
          "$ref": "#/definitions/ResourceList"
        },
        "preemptionPolicy": {
          "$ref": "#/definitions/PreemptionPolicy"
        },
        "priority": {
          "description": "The priority value. Various system components use this field to find the\npriority of the pod. When Priority Admission Controller is enabled, it\nprevents users from setting this field. The admission controller populates\nthis field from PriorityClassName.\nThe higher the value, the higher the priority.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Priority"
        },
        "priorityClassName": {
          "description": "If specified, indicates the pod's priority. \"system-node-critical\" and\n\"system-cluster-critical\" are two special keywords which indicate the\nhighest priorities with the former being the highest priority. Any other\nname must be defined by creating a PriorityClass object with that name.\nIf not specified, the pod priority will be default or zero if there is no\ndefault.\n+optional",
          "type": "string",
          "x-go-name": "PriorityClassName"
        },
        "readinessGates": {
          "description": "If specified, all readiness gates will be evaluated for pod readiness.\nA pod is ready when all its containers are ready AND\nall conditions specified in the readiness gates have status equal to \"True\"\nMore info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodReadinessGate"
          },
          "x-go-name": "ReadinessGates"
        },
        "resourceClaims": {
          "description": "ResourceClaims defines which ResourceClaims must be allocated\nand reserved before the Pod is allowed to start. The resources\nwill be made available to those containers which consume them\nby name.\n\nThis is a stable field but requires that the\nDynamicResourceAllocation feature gate is enabled.\n\nThis field is immutable.\n\n+patchMergeKey=name\n+patchStrategy=merge,retainKeys\n+listType=map\n+listMapKey=name\n+featureGate=DynamicResourceAllocation\n+optional",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodResourceClaim"
          },
          "x-go-name": "ResourceClaims"
        },
        "resources": {
          "$ref": "#/definitions/ResourceRequirements"
        },
        "restartPolicy": {
          "$ref": "#/definitions/RestartPolicy"
        },
        "runtimeClassName": {
          "description": "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used\nto run this pod.  If no RuntimeClass resource matches the named class, the pod will not be run.\nIf unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an\nempty definition that uses the default runtime handler.\nMore info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class\n+optional",
          "type": "string",
          "x-go-name": "RuntimeClassName"
        },
        "schedulerName": {
          "description": "If specified, the pod will be dispatched by specified scheduler.\nIf not specified, the pod will be dispatched by default scheduler.\n+optional",
          "type": "string",
          "x-go-name": "SchedulerName"
        },
        "schedulingGates": {
          "description": "SchedulingGates is an opaque list of values that if specified will block scheduling the pod.\nIf schedulingGates is not empty, the pod will stay in the SchedulingGated state and the\nscheduler will not attempt to schedule the pod.\n\nSchedulingGates can only be set at pod creation time, and be removed only afterwards.\n\n+patchMergeKey=name\n+patchStrategy=merge\n+listType=map\n+listMapKey=name\n+optional",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodSchedulingGate"
          },
          "x-go-name": "SchedulingGates"
        },
        "securityContext": {
          "$ref": "#/definitions/PodSecurityContext"
        },
        "serviceAccount": {
          "description": "DeprecatedServiceAccount is a deprecated alias for ServiceAccountName.\nDeprecated: Use serviceAccountName instead.\n+k8s:conversion-gen=false\n+optional",
          "type": "string",
          "x-go-name": "DeprecatedServiceAccount"
        },
        "serviceAccountName": {
          "description": "ServiceAccountName is the name of the ServiceAccount to use to run this pod.\nMore info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n+optional",
          "type": "string",
          "x-go-name": "ServiceAccountName"
        },
        "setHostnameAsFQDN": {
          "description": "If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default).\nIn Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname).\nIn Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Services\\\\Tcpip\\\\Parameters to FQDN.\nIf a pod does not have FQDN, this has no effect.\nDefault to false.\n+optional",
          "type": "boolean",
          "x-go-name": "SetHostnameAsFQDN"
        },
        "shareProcessNamespace": {
          "description": "Share a single process namespace between all of the containers in a pod.\nWhen this is set containers will be able to view and signal processes from other containers\nin the same pod, and the first process in each container will not be assigned PID 1.\nHostPID and ShareProcessNamespace cannot both be set.\nOptional: Default to false.\n+k8s:conversion-gen=false\n+optional",
          "type": "boolean",
          "x-go-name": "ShareProcessNamespace"
        },
        "subdomain": {
          "description": "If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\".\nIf not specified, the pod will not have a domainname at all.\n+optional",
          "type": "string",
          "x-go-name": "Subdomain"
        },
        "terminationGracePeriodSeconds": {
          "description": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.\nValue must be non-negative integer. The value zero indicates stop immediately via\nthe kill signal (no opportunity to shut down).\nIf this value is nil, the default grace period will be used instead.\nThe grace period is the duration in seconds after the processes running in the pod are sent\na termination signal and the time when the processes are forcibly halted with a kill signal.\nSet this value longer than the expected cleanup time for your process.\nDefaults to 30 seconds.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "TerminationGracePeriodSeconds"
        },
        "tolerations": {
          "description": "If specified, the pod's tolerations.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Toleration"
          },
          "x-go-name": "Tolerations"
        },
        "topologySpreadConstraints": {
          "description": "TopologySpreadConstraints describes how a group of pods ought to spread across topology\ndomains. Scheduler will schedule pods in a way which abides by the constraints.\nAll topologySpreadConstraints are ANDed.\n+optional\n+patchMergeKey=topologyKey\n+patchStrategy=merge\n+listType=map\n+listMapKey=topologyKey\n+listMapKey=whenUnsatisfiable",
          "type": "array",
          "items": {
            "$ref": "#/definitions/TopologySpreadConstraint"
          },
          "x-go-name": "TopologySpreadConstraints"
        },
        "volumes": {
          "description": "List of volumes that can be mounted by containers belonging to the pod.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes\n+optional\n+patchMergeKey=name\n+patchStrategy=merge,retainKeys\n+listType=map\n+listMapKey=name",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Volume"
          },
          "x-go-name": "Volumes"
        },
        "workloadRef": {
          "$ref": "#/definitions/WorkloadReference"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PodStatus": {
      "description": "PodStatus represents information about the status of a pod. Status may trail the actual\nstate of a system, especially if the node that hosts the pod cannot contact the control\nplane.",
      "type": "object",
      "properties": {
        "allocatedResources": {
          "$ref": "#/definitions/ResourceList"
        },
        "conditions": {
          "description": "Current service state of pod.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n+optional\n+patchMergeKey=type\n+patchStrategy=merge\n+listType=map\n+listMapKey=type",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodCondition"
          },
          "x-go-name": "Conditions"
        },
        "containerStatuses": {
          "description": "Statuses of containers in this pod.\nEach container in the pod should have at most one status in this list,\nand all statuses should be for containers in the pod.\nHowever this is not enforced.\nIf a status for a non-existent container is present in the list, or the list has duplicate names,\nthe behavior of various Kubernetes components is not defined and those statuses might be\nignored.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerStatus"
          },
          "x-go-name": "ContainerStatuses"
        },
        "ephemeralContainerStatuses": {
          "description": "Statuses for any ephemeral containers that have run in this pod.\nEach ephemeral container in the pod should have at most one status in this list,\nand all statuses should be for containers in the pod.\nHowever this is not enforced.\nIf a status for a non-existent container is present in the list, or the list has duplicate names,\nthe behavior of various Kubernetes components is not defined and those statuses might be\nignored.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerStatus"
          },
          "x-go-name": "EphemeralContainerStatuses"
        },
        "extendedResourceClaimStatus": {
          "$ref": "#/definitions/PodExtendedResourceClaimStatus"
        },
        "hostIP": {
          "description": "hostIP holds the IP address of the host to which the pod is assigned. Empty if the pod has not started yet.\nA pod can be assigned to a node that has a problem in kubelet which in turns mean that HostIP will\nnot be updated even if there is a node is assigned to pod\n+optional",
          "type": "string",
          "x-go-name": "HostIP"
        },
        "hostIPs": {
          "description": "hostIPs holds the IP addresses allocated to the host. If this field is specified, the first entry must\nmatch the hostIP field. This list is empty if the pod has not started yet.\nA pod can be assigned to a node that has a problem in kubelet which in turns means that HostIPs will\nnot be updated even if there is a node is assigned to this pod.\n+optional\n+patchStrategy=merge\n+patchMergeKey=ip\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/HostIP"
          },
          "x-go-name": "HostIPs"
        },
        "initContainerStatuses": {
          "description": "Statuses of init containers in this pod. The most recent successful non-restartable\ninit container will have ready = true, the most recently started container will have\nstartTime set.\nEach init container in the pod should have at most one status in this list,\nand all statuses should be for containers in the pod.\nHowever this is not enforced.\nIf a status for a non-existent container is present in the list, or the list has duplicate names,\nthe behavior of various Kubernetes components is not defined and those statuses might be\nignored.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-and-container-status\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ContainerStatus"
          },
          "x-go-name": "InitContainerStatuses"
        },
        "message": {
          "description": "A human readable message indicating details about why the pod is in this condition.\n+optional",
          "type": "string",
          "x-go-name": "Message"
        },
        "nominatedNodeName": {
          "description": "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be\nscheduled right away as preemption victims receive their graceful termination periods.\nThis field does not guarantee that the pod will be scheduled on this node. Scheduler may decide\nto place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to\ngive the resources on this node to a higher priority pod that is created after preemption.\nAs a result, this field may be different than PodSpec.nodeName when the pod is\nscheduled.\n+optional",
          "type": "string",
          "x-go-name": "NominatedNodeName"
        },
        "observedGeneration": {
          "description": "If set, this represents the .metadata.generation that the pod status was set based upon.\nThe PodObservedGenerationTracking feature gate must be enabled to use this field.\n+featureGate=PodObservedGenerationTracking\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "ObservedGeneration"
        },
        "phase": {
          "$ref": "#/definitions/PodPhase"
        },
        "podIP": {
          "description": "podIP address allocated to the pod. Routable at least within the cluster.\nEmpty if not yet allocated.\n+optional",
          "type": "string",
          "x-go-name": "PodIP"
        },
        "podIPs": {
          "description": "podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must\nmatch the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list\nis empty if no IPs have been allocated yet.\n+optional\n+patchStrategy=merge\n+patchMergeKey=ip\n+listType=map\n+listMapKey=ip",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodIP"
          },
          "x-go-name": "PodIPs"
        },
        "qosClass": {
          "$ref": "#/definitions/PodQOSClass"
        },
        "reason": {
          "description": "A brief CamelCase message indicating details about why the pod is in this state.\ne.g. 'Evicted'\n+optional",
          "type": "string",
          "x-go-name": "Reason"
        },
        "resize": {
          "$ref": "#/definitions/PodResizeStatus"
        },
        "resourceClaimStatuses": {
          "description": "Status of resource claims.\n+patchMergeKey=name\n+patchStrategy=merge,retainKeys\n+listType=map\n+listMapKey=name\n+featureGate=DynamicResourceAllocation\n+optional",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PodResourceClaimStatus"
          },
          "x-go-name": "ResourceClaimStatuses"
        },
        "resources": {
          "$ref": "#/definitions/ResourceRequirements"
        },
        "startTime": {
          "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet.\nThis is before the Kubelet pulled the container image(s) for the pod.\n+optional",
          "type": "string",
          "x-go-name": "StartTime",
          "x-go-type": "k8s.io/apimachinery/pkg/apis/meta/v1.Time"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Policy": {
      "type": "object",
      "properties": {
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "definition": {
          "type": "string",
          "x-go-name": "Definition"
        },
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "modifiedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ModifiedAt"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "readOnly": {
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "PortProtocol": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "PortworxVolumeSource": {
      "type": "object",
      "title": "PortworxVolumeSource represents a Portworx volume resource.",
      "properties": {
        "fsType": {
          "description": "fSType represents the filesystem type to mount\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.",
          "type": "string",
          "x-go-name": "FSType"
        },
        "readOnly": {
          "description": "readOnly defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "volumeID": {
          "description": "volumeID uniquely identifies a Portworx volume",
          "type": "string",
          "x-go-name": "VolumeID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PreemptionPolicy": {
      "description": "+enum",
      "type": "string",
      "title": "PreemptionPolicy describes a policy for if/when to preempt a pod.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PreferredSchedulingTerm": {
      "description": "An empty preferred scheduling term matches all objects with implicit weight 0\n(i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).",
      "type": "object",
      "properties": {
        "preference": {
          "$ref": "#/definitions/NodeSelectorTerm"
        },
        "weight": {
          "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Weight"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Probe": {
      "description": "Probe describes a health check to be performed against a container to determine whether it is\nalive or ready to receive traffic.",
      "type": "object",
      "properties": {
        "exec": {
          "$ref": "#/definitions/ExecAction"
        },
        "failureThreshold": {
          "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded.\nDefaults to 3. Minimum value is 1.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "FailureThreshold"
        },
        "grpc": {
          "$ref": "#/definitions/GRPCAction"
        },
        "httpGet": {
          "$ref": "#/definitions/HTTPGetAction"
        },
        "initialDelaySeconds": {
          "description": "Number of seconds after the container has started before liveness probes are initiated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "InitialDelaySeconds"
        },
        "periodSeconds": {
          "description": "How often (in seconds) to perform the probe.\nDefault to 10 seconds. Minimum value is 1.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "PeriodSeconds"
        },
        "successThreshold": {
          "description": "Minimum consecutive successes for the probe to be considered successful after having failed.\nDefaults to 1. Must be 1 for liveness and startup. Minimum value is 1.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "SuccessThreshold"
        },
        "tcpSocket": {
          "$ref": "#/definitions/TCPSocketAction"
        },
        "terminationGracePeriodSeconds": {
          "description": "Optional duration in seconds the pod needs to terminate gracefully upon probe failure.\nThe grace period is the duration in seconds after the processes running in the pod are sent\na termination signal and the time when the processes are forcibly halted with a kill signal.\nSet this value longer than the expected cleanup time for your process.\nIf this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this\nvalue overrides the value provided by the pod spec.\nValue must be non-negative integer. The value zero indicates stop immediately via\nthe kill signal (no opportunity to shut down).\nThis is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.\nMinimum value is 1. spec.terminationGracePeriodSeconds is used if unset.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "TerminationGracePeriodSeconds"
        },
        "timeoutSeconds": {
          "description": "Number of seconds after which the probe times out.\nDefaults to 1 second. Minimum value is 1.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "TimeoutSeconds"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ProcMountType": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ProjectedVolumeSource": {
      "description": "Represents a projected volume source",
      "type": "object",
      "properties": {
        "defaultMode": {
          "description": "defaultMode are the mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0 and 511.\nYAML accepts both octal and decimal values, JSON requires decimal values for mode bits.\nDirectories within the path are not affected by this setting.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "DefaultMode"
        },
        "sources": {
          "description": "sources is the list of volume projections. Each entry in this list\nhandles one source.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/VolumeProjection"
          },
          "x-go-name": "Sources"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Protocol": {
      "description": "+enum",
      "type": "string",
      "title": "Protocol defines network protocols supported for things like container ports.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "PullPolicy": {
      "description": "PullPolicy describes a policy for if/when to pull a container image\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Quantity": {
      "description": "The serialization format is:\n\n```\n<quantity>        ::= <signedNumber><suffix>\n\n(Note that <suffix> may be empty, from the \"\" case in <decimalSI>.)\n\n<digit>           ::= 0 | 1 | ... | 9\n<digits>          ::= <digit> | <digit><digits>\n<number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits>\n<sign>            ::= \"+\" | \"-\"\n<signedNumber>    ::= <number> | <sign><number>\n<suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI>\n<binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n<decimalSI>       ::= m | \"\" | k | M | G | T | P | E\n\n(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n<decimalExponent> ::= \"e\" <signedNumber> | \"E\" <signedNumber>\n```\n\nNo matter which of the three exponent forms is used, no quantity may represent\na number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal\nplaces. Numbers larger or more precise will be capped or rounded up.\n(E.g.: 0.1m will rounded up to 1m.)\nThis may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix\nit had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\".\nThis means that Exponent/suffix will be adjusted up or down (with a\ncorresponding increase or decrease in Mantissa) such that:\n\nNo precision is lost\nNo fractional digits will be emitted\nThe exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n1.5 will be serialized as \"1500m\"\n1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a\nfloating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed,\nbut will be re-emitted in their canonical form. (So always use canonical\nform, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without\nwriting some sort of special handling code in the hopes that that will\ncause implementors to also use a fixed point implementation.\n\n+protobuf=true\n+protobuf.embed=string\n+protobuf.options.marshal=false\n+protobuf.options.(gogoproto.goproto_stringer)=false\n+k8s:deepcopy-gen=true\n+k8s:openapi-gen=true\n+k8s:openapi-model-package=io.k8s.apimachinery.pkg.api.resource",
      "type": "object",
      "title": "Quantity is a fixed-point representation of a number.\nIt provides convenient marshaling/unmarshaling in JSON and YAML,\nin addition to String() and AsInt64() accessors.",
      "x-go-package": "k8s.io/apimachinery/pkg/api/resource"
    },
    "QuobyteVolumeSource": {
      "description": "Quobyte volumes do not support ownership management or SELinux relabeling.",
      "type": "object",
      "title": "Represents a Quobyte mount that lasts the lifetime of a pod.",
      "properties": {
        "group": {
          "description": "group to map volume access to\nDefault is no group\n+optional",
          "type": "string",
          "x-go-name": "Group"
        },
        "readOnly": {
          "description": "readOnly here will force the Quobyte volume to be mounted with read-only permissions.\nDefaults to false.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "registry": {
          "description": "registry represents a single or multiple Quobyte Registry services\nspecified as a string as host:port pair (multiple entries are separated with commas)\nwhich acts as the central registry for volumes",
          "type": "string",
          "x-go-name": "Registry"
        },
        "tenant": {
          "description": "tenant owning the given Quobyte volume in the Backend\nUsed with dynamically provisioned Quobyte volumes, value is set by the plugin\n+optional",
          "type": "string",
          "x-go-name": "Tenant"
        },
        "user": {
          "description": "user to map volume access to\nDefaults to serivceaccount user\n+optional",
          "type": "string",
          "x-go-name": "User"
        },
        "volume": {
          "description": "volume is a string that references an already created Quobyte volume by name.",
          "type": "string",
          "x-go-name": "Volume"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "RBDVolumeSource": {
      "description": "RBD volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Represents a Rados Block Device mount that lasts the lifetime of a pod.",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type of the volume that you want to mount.\nTip: Ensure that the filesystem type is supported by the host operating system.\nExamples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\nTODO: how do we prevent errors in the filesystem from compromising the machine\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "image": {
          "description": "image is the rados image name.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
          "type": "string",
          "x-go-name": "RBDImage"
        },
        "keyring": {
          "description": "keyring is the path to key ring for RBDUser.\nDefault is /etc/ceph/keyring.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it\n+optional\n+default=\"/etc/ceph/keyring\"",
          "type": "string",
          "x-go-name": "Keyring"
        },
        "monitors": {
          "description": "monitors is a collection of Ceph monitors.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it\n+listType=atomic",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "CephMonitors"
        },
        "pool": {
          "description": "pool is the rados pool name.\nDefault is rbd.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it\n+optional\n+default=\"rbd\"",
          "type": "string",
          "x-go-name": "RBDPool"
        },
        "readOnly": {
          "description": "readOnly here will force the ReadOnly setting in VolumeMounts.\nDefaults to false.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "user": {
          "description": "user is the rados user name.\nDefault is admin.\nMore info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it\n+optional\n+default=\"admin\"",
          "type": "string",
          "x-go-name": "RadosUser"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "RecursiveReadOnlyMode": {
      "type": "string",
      "title": "RecursiveReadOnlyMode describes recursive-readonly mode.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "RemoveApiTokenRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/schema"
    },
    "ResourceClaim": {
      "type": "object",
      "title": "ResourceClaim references one entry in PodSpec.ResourceClaims.",
      "properties": {
        "name": {
          "description": "Name must match the name of one entry in pod.spec.resourceClaims of\nthe Pod where this field is used. It makes that resource available\ninside a container.",
          "type": "string",
          "x-go-name": "Name"
        },
        "request": {
          "description": "Request is the name chosen for a request in the referenced claim.\nIf empty, everything from the claim is made available, otherwise\nonly the result of this request.\n\n+optional",
          "type": "string",
          "x-go-name": "Request"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceFieldSelector": {
      "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format\n+structType=atomic",
      "type": "object",
      "properties": {
        "containerName": {
          "description": "Container name: required for volumes, optional for env vars\n+optional",
          "type": "string",
          "x-go-name": "ContainerName"
        },
        "divisor": {
          "$ref": "#/definitions/Quantity"
        },
        "resource": {
          "description": "Required: resource to select",
          "type": "string",
          "x-go-name": "Resource"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceHealth": {
      "description": "This is a part of KEP https://kep.k8s.io/4680.",
      "type": "object",
      "title": "ResourceHealth represents the health of a resource. It has the latest device health information.",
      "properties": {
        "health": {
          "$ref": "#/definitions/ResourceHealthStatus"
        },
        "resourceID": {
          "$ref": "#/definitions/ResourceID"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceHealthStatus": {
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceID": {
      "description": "DeviceID, where DeviceID is from the Device structure of DevicePlugin's ListAndWatchResponse type: https://github.com/kubernetes/kubernetes/blob/eda1c780543a27c078450e2f17d674471e00f494/staging/src/k8s.io/kubelet/pkg/apis/deviceplugin/v1alpha/api.proto#L61-L73\n\nDevicePlugin ID is usually a constant for the lifetime of a Node and typically can be used to uniquely identify the device on the node.\nFor DRA:\n\n<driver name>/<pool name>/<device name>: such a device can be looked up in the information published by that DRA driver to learn more about it. It is designed to be globally unique in a cluster.",
      "type": "string",
      "title": "ResourceID is calculated based on the source of this resource health information.\nFor DevicePlugin:",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceList": {
      "type": "object",
      "title": "ResourceList is a set of (resource name, quantity) pairs.",
      "additionalProperties": {
        "$ref": "#/definitions/Quantity"
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceName": {
      "type": "string",
      "title": "ResourceName is the name identifying various resources in a ResourceList.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceRequirements": {
      "type": "object",
      "title": "ResourceRequirements describes the compute resource requirements.",
      "properties": {
        "claims": {
          "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis field depends on the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.\n\n+listType=map\n+listMapKey=name\n+featureGate=DynamicResourceAllocation\n+optional",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ResourceClaim"
          },
          "x-go-name": "Claims"
        },
        "limits": {
          "$ref": "#/definitions/ResourceList"
        },
        "requests": {
          "$ref": "#/definitions/ResourceList"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceResizeRestartPolicy": {
      "type": "string",
      "title": "ResourceResizeRestartPolicy specifies how to handle container resource resize.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ResourceStatus": {
      "type": "object",
      "title": "ResourceStatus represents the status of a single resource allocated to a Pod.",
      "properties": {
        "name": {
          "$ref": "#/definitions/ResourceName"
        },
        "resources": {
          "description": "List of unique resources health. Each element in the list contains an unique resource ID and its health.\nAt a minimum, for the lifetime of a Pod, resource ID must uniquely identify the resource allocated to the Pod on the Node.\nIf other Pod on the same Node reports the status with the same resource ID, it must be the same resource they share.\nSee ResourceID type definition for a specific format it has in various use cases.\n+listType=map\n+listMapKey=resourceID",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ResourceHealth"
          },
          "x-go-name": "Resources"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "RestartPolicy": {
      "description": "Only one of the following restart policies may be specified.\nIf none of the following policies is specified, the default one\nis RestartPolicyAlways.\n+enum",
      "type": "string",
      "title": "RestartPolicy describes how the container should be restarted.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SELinuxOptions": {
      "description": "SELinuxOptions are the labels to be applied to the container",
      "type": "object",
      "properties": {
        "level": {
          "description": "Level is SELinux level label that applies to the container.\n+optional",
          "type": "string",
          "x-go-name": "Level"
        },
        "role": {
          "description": "Role is a SELinux role label that applies to the container.\n+optional",
          "type": "string",
          "x-go-name": "Role"
        },
        "type": {
          "description": "Type is a SELinux type label that applies to the container.\n+optional",
          "type": "string",
          "x-go-name": "Type"
        },
        "user": {
          "description": "User is a SELinux user label that applies to the container.\n+optional",
          "type": "string",
          "x-go-name": "User"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ScaleIOVolumeSource": {
      "description": "ScaleIOVolumeSource represents a persistent ScaleIO volume",
      "type": "object",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\".\nDefault is \"xfs\".\n+optional\n+default=\"xfs\"",
          "type": "string",
          "x-go-name": "FSType"
        },
        "gateway": {
          "description": "gateway is the host address of the ScaleIO API Gateway.",
          "type": "string",
          "x-go-name": "Gateway"
        },
        "protectionDomain": {
          "description": "protectionDomain is the name of the ScaleIO Protection Domain for the configured storage.\n+optional",
          "type": "string",
          "x-go-name": "ProtectionDomain"
        },
        "readOnly": {
          "description": "readOnly Defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "sslEnabled": {
          "description": "sslEnabled Flag enable/disable SSL communication with Gateway, default false\n+optional",
          "type": "boolean",
          "x-go-name": "SSLEnabled"
        },
        "storageMode": {
          "description": "storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\nDefault is ThinProvisioned.\n+optional\n+default=\"ThinProvisioned\"",
          "type": "string",
          "x-go-name": "StorageMode"
        },
        "storagePool": {
          "description": "storagePool is the ScaleIO Storage Pool associated with the protection domain.\n+optional",
          "type": "string",
          "x-go-name": "StoragePool"
        },
        "system": {
          "description": "system is the name of the storage system as configured in ScaleIO.",
          "type": "string",
          "x-go-name": "System"
        },
        "volumeName": {
          "description": "volumeName is the name of a volume already created in the ScaleIO system\nthat is associated with this volume source.",
          "type": "string",
          "x-go-name": "VolumeName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "ScannerDescriptor": {
      "type": "object",
      "title": "ScannerDescriptor captures the scanner metadata (e.g., Grype version).",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "SearchNotificationEventTypesResponse": {
      "description": "SearchNotificationEventTypesResponse is the response for searching event types",
      "type": "object",
      "properties": {
        "eventTypes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EventTypeResponse"
          },
          "x-go-name": "EventTypes"
        },
        "total": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Total"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/notifications"
    },
    "SeccompProfile": {
      "description": "Only one profile source may be set.\n+union",
      "type": "object",
      "title": "SeccompProfile defines a pod/container's seccomp profile settings.",
      "properties": {
        "localhostProfile": {
          "description": "localhostProfile indicates a profile defined in a file on the node should be used.\nThe profile must be preconfigured on the node to work.\nMust be a descending path, relative to the kubelet's configured seccomp profile location.\nMust be set if type is \"Localhost\". Must NOT be set for any other type.\n+optional",
          "type": "string",
          "x-go-name": "LocalhostProfile"
        },
        "type": {
          "$ref": "#/definitions/SeccompProfileType"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SeccompProfileType": {
      "description": "+enum",
      "type": "string",
      "title": "SeccompProfileType defines the supported seccomp profile types.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SecretEnvSource": {
      "description": "The contents of the target Secret's Data field will represent the\nkey-value pairs as environment variables.",
      "type": "object",
      "title": "SecretEnvSource selects a Secret to populate the environment\nvariables with.",
      "properties": {
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "Specify whether the Secret must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SecretKeySelector": {
      "description": "+structType=atomic",
      "type": "object",
      "title": "SecretKeySelector selects a key of a Secret.",
      "properties": {
        "key": {
          "description": "The key of the secret to select from.  Must be a valid secret key.",
          "type": "string",
          "x-go-name": "Key"
        },
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "Specify whether the Secret or its key must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SecretProjection": {
      "description": "The contents of the target Secret's Data field will be presented in a\nprojected volume as files using the keys in the Data field as the file names.\nNote that this is identical to a secret volume source without the default\nmode.",
      "type": "object",
      "title": "Adapts a secret into a projected volume.",
      "properties": {
        "items": {
          "description": "items if unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/KeyToPath"
          },
          "x-go-name": "Items"
        },
        "name": {
          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n+optional\n+default=\"\"\n+kubebuilder:default=\"\"\nTODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.",
          "type": "string",
          "x-go-name": "Name"
        },
        "optional": {
          "description": "optional field specify whether the Secret or its key must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SecretVolumeSource": {
      "description": "The contents of the target Secret's Data field will be presented in a volume\nas files using the keys in the Data field as the file names.\nSecret volumes support ownership management and SELinux relabeling.",
      "type": "object",
      "title": "Adapts a Secret into a volume.",
      "properties": {
        "defaultMode": {
          "description": "defaultMode is Optional: mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0 and 511.\nYAML accepts both octal and decimal values, JSON requires decimal values\nfor mode bits. Defaults to 0644.\nDirectories within the path are not affected by this setting.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "DefaultMode"
        },
        "items": {
          "description": "items If unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional\n+listType=atomic",
          "type": "array",
          "items": {
            "$ref": "#/definitions/KeyToPath"
          },
          "x-go-name": "Items"
        },
        "optional": {
          "description": "optional field specify whether the Secret or its keys must be defined\n+optional",
          "type": "boolean",
          "x-go-name": "Optional"
        },
        "secretName": {
          "description": "secretName is the name of the secret in the pod's namespace to use.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n+optional",
          "type": "string",
          "x-go-name": "SecretName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SecurityContext": {
      "description": "Some fields are present in both SecurityContext and PodSecurityContext.  When both\nare set, the values in SecurityContext take precedence.",
      "type": "object",
      "title": "SecurityContext holds security configuration that will be applied to a container.",
      "properties": {
        "allowPrivilegeEscalation": {
          "description": "AllowPrivilegeEscalation controls whether a process can gain more\nprivileges than its parent process. This bool directly controls if\nthe no_new_privs flag will be set on the container process.\nAllowPrivilegeEscalation is true always when the container is:\n1) run as Privileged\n2) has CAP_SYS_ADMIN\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "boolean",
          "x-go-name": "AllowPrivilegeEscalation"
        },
        "appArmorProfile": {
          "$ref": "#/definitions/AppArmorProfile"
        },
        "capabilities": {
          "$ref": "#/definitions/Capabilities"
        },
        "privileged": {
          "description": "Run container in privileged mode.\nProcesses in privileged containers are essentially equivalent to root on the host.\nDefaults to false.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "boolean",
          "x-go-name": "Privileged"
        },
        "procMount": {
          "$ref": "#/definitions/ProcMountType"
        },
        "readOnlyRootFilesystem": {
          "description": "Whether this container has a read-only root filesystem.\nDefault is false.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnlyRootFilesystem"
        },
        "runAsGroup": {
          "description": "The GID to run the entrypoint of the container process.\nUses runtime default if unset.\nMay also be set in PodSecurityContext.  If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "RunAsGroup"
        },
        "runAsNonRoot": {
          "description": "Indicates that the container must run as a non-root user.\nIf true, the Kubelet will validate the image at runtime to ensure that it\ndoes not run as UID 0 (root) and fail to start the container if it does.\nIf unset or false, no such validation will be performed.\nMay also be set in PodSecurityContext.  If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence.\n+optional",
          "type": "boolean",
          "x-go-name": "RunAsNonRoot"
        },
        "runAsUser": {
          "description": "The UID to run the entrypoint of the container process.\nDefaults to user specified in image metadata if unspecified.\nMay also be set in PodSecurityContext.  If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence.\nNote that this field cannot be set when spec.os.name is windows.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "RunAsUser"
        },
        "seLinuxOptions": {
          "$ref": "#/definitions/SELinuxOptions"
        },
        "seccompProfile": {
          "$ref": "#/definitions/SeccompProfile"
        },
        "windowsOptions": {
          "$ref": "#/definitions/WindowsSecurityContextOptions"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SecurityScanInfo": {
      "type": "object",
      "properties": {
        "counts": {
          "$ref": "#/definitions/VulnCounts"
        },
        "created_at": {
          "type": "string",
          "x-go-name": "CreatedAt"
        },
        "critical": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Critical"
        },
        "descriptor": {
          "$ref": "#/definitions/ScannerDescriptor"
        },
        "fixed_counts": {
          "$ref": "#/definitions/VulnCounts"
        },
        "high": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "High"
        },
        "low": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Low"
        },
        "medium": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "Medium"
        },
        "vulnerability_details": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VulnDetail"
          },
          "x-go-name": "VulnerabilityDetails"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "SecurityScanWrapper": {
      "type": "object",
      "properties": {
        "digest": {
          "type": "string",
          "x-go-name": "Digest"
        },
        "digest_first_seen_at": {
          "type": "string",
          "x-go-name": "DigestFirstSeenAt"
        },
        "image_size_bytes": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ImageSizeBytes"
        },
        "input": {
          "type": "string",
          "x-go-name": "Input"
        },
        "installation_phase": {
          "description": "InstallationPhase indicates the Embedded Cluster phase for the image (\"\", \"online\", or \"airgap\").\nApplication images have the phase \"\".\nInfrastructure images used for Embedded Cluster in both online and airgap have the phase \"online\" or \"airgap\".\nInfrastructure images used for Embedded Cluster only in airgap have the phase \"airgap\".",
          "type": "string",
          "x-go-name": "InstallationPhase"
        },
        "last_scanned_at": {
          "type": "string",
          "x-go-name": "LastScannedAt"
        },
        "not_found": {
          "type": "boolean",
          "x-go-name": "NotFound"
        },
        "result": {
          "$ref": "#/definitions/SecurityScanInfo"
        },
        "sbom_status": {
          "description": "SBOM status tracking",
          "type": "string",
          "x-go-name": "SBOMStatus"
        },
        "sbom_status_message": {
          "type": "string",
          "x-go-name": "SBOMStatusMessage"
        },
        "sbom_status_updated_at": {
          "type": "string",
          "x-go-name": "SBOMStatusUpdatedAt"
        },
        "scan_status": {
          "description": "Scan status tracking",
          "type": "string",
          "x-go-name": "ScanStatus"
        },
        "scan_status_message": {
          "type": "string",
          "x-go-name": "ScanStatusMessage"
        },
        "scan_status_updated_at": {
          "type": "string",
          "x-go-name": "ScanStatusUpdatedAt"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ImageSource"
          },
          "x-go-name": "Sources"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "ServiceAccount": {
      "type": "object",
      "title": "ServiceAccount represents a modified user on a team paired with an API token.",
      "properties": {
        "accountName": {
          "type": "string",
          "x-go-name": "AccountName"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "emailAddress": {
          "type": "string",
          "x-go-name": "EmailAddress"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "isRevoked": {
          "type": "boolean",
          "x-go-name": "IsRevoked"
        },
        "lastUsedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastUsedAt"
        },
        "token": {
          "type": "string",
          "x-go-name": "Token"
        },
        "tokenRegeneratedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "TokenRegeneratedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "ServiceAccountTokenProjection": {
      "description": "ServiceAccountTokenProjection represents a projected service account token\nvolume. This projection can be used to insert a service account token into\nthe pods runtime filesystem for use against APIs (Kubernetes API Server or\notherwise).",
      "type": "object",
      "properties": {
        "audience": {
          "description": "audience is the intended audience of the token. A recipient of a token\nmust identify itself with an identifier specified in the audience of the\ntoken, and otherwise should reject the token. The audience defaults to the\nidentifier of the apiserver.\n+optional",
          "type": "string",
          "x-go-name": "Audience"
        },
        "expirationSeconds": {
          "description": "expirationSeconds is the requested duration of validity of the service\naccount token. As the token approaches expiration, the kubelet volume\nplugin will proactively rotate the service account token. The kubelet will\nstart trying to rotate the token if the token is older than 80 percent of\nits time to live or if the token is older than 24 hours.Defaults to 1 hour\nand must be at least 10 minutes.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "ExpirationSeconds"
        },
        "path": {
          "description": "path is the path relative to the mount point of the file to project the\ntoken into.",
          "type": "string",
          "x-go-name": "Path"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SetDefaultHostnameParams": {
      "type": "object",
      "properties": {
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/custom_hostnames"
    },
    "ShipInstallStatus": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "x-go-name": "Status"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/sharedtypes"
    },
    "Signal": {
      "description": "Signal defines the stop signal of containers\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SkippedInstance": {
      "type": "object",
      "properties": {
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "licenseId": {
          "type": "string",
          "x-go-name": "LicenseID"
        },
        "reason": {
          "type": "string",
          "x-go-name": "Reason"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/customers"
    },
    "SleepAction": {
      "type": "object",
      "title": "SleepAction describes a \"sleep\" action.",
      "properties": {
        "seconds": {
          "description": "Seconds is the number of seconds to sleep.",
          "type": "integer",
          "format": "int64",
          "x-go-name": "Seconds"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SoftwarePullMilestoneInfo": {
      "type": "object",
      "title": "SoftwarePullMilestoneInfo is the per-license-type software pull milestone exposed in the API.",
      "properties": {
        "asset_type": {
          "type": "string",
          "x-go-name": "AssetType"
        },
        "asset_version": {
          "type": "string",
          "x-go-name": "AssetVersion"
        },
        "first_pulled_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "FirstPulledAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/types"
    },
    "StorageMedium": {
      "type": "string",
      "title": "StorageMedium defines ways that storage can be allocated to a volume.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "StorageOSVolumeSource": {
      "type": "object",
      "title": "Represents a StorageOS persistent volume resource.",
      "properties": {
        "fsType": {
          "description": "fsType is the filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "readOnly": {
          "description": "readOnly defaults to false (read/write). ReadOnly here will force\nthe ReadOnly setting in VolumeMounts.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "secretRef": {
          "$ref": "#/definitions/LocalObjectReference"
        },
        "volumeName": {
          "description": "volumeName is the human-readable name of the StorageOS volume.  Volume\nnames are only unique within a namespace.",
          "type": "string",
          "x-go-name": "VolumeName"
        },
        "volumeNamespace": {
          "description": "volumeNamespace specifies the scope of the volume within StorageOS.  If no\nnamespace is specified then the Pod's namespace will be used.  This allows the\nKubernetes name scoping to be mirrored within StorageOS for tighter integration.\nSet VolumeName to any name to override the default behaviour.\nSet to \"default\" if you are not using namespaces within StorageOS.\nNamespaces that do not pre-exist within StorageOS will be created.\n+optional",
          "type": "string",
          "x-go-name": "VolumeNamespace"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SupplementalGroupsPolicy": {
      "description": "SupplementalGroupsPolicy defines how supplemental groups\nof the first container processes are calculated.\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "SupportBundle": {
      "type": "object",
      "properties": {
        "analyzeChannelId": {
          "type": "string",
          "x-go-name": "AnalyzeChannelID"
        },
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "collectedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CollectedAt"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customer": {
          "$ref": "#/definitions/Customer"
        },
        "customerId": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "downloadUri": {
          "type": "string",
          "x-go-name": "DownloadURI"
        },
        "downstreamChannelId": {
          "type": "string",
          "x-go-name": "DownstreamChannelID"
        },
        "downstreamChannelSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DownstreamChannelSequence"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "insights": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SupportBundleInsight"
          },
          "x-go-name": "Insights"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "issueUrl": {
          "type": "string",
          "x-go-name": "IssueUrl"
        },
        "metadata": {
          "type": "object",
          "additionalProperties": {},
          "x-go-name": "Metadata"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "notes": {
          "type": "string",
          "x-go-name": "Notes"
        },
        "releaseSequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ReleaseSequence"
        },
        "resolution": {
          "type": "string",
          "x-go-name": "Resolution"
        },
        "scope": {
          "$ref": "#/definitions/BundleScope"
        },
        "signedUri": {
          "type": "string",
          "x-go-name": "SignedURI"
        },
        "size": {
          "type": "number",
          "format": "double",
          "x-go-name": "Size"
        },
        "slug": {
          "type": "string",
          "x-go-name": "Slug"
        },
        "source": {
          "$ref": "#/definitions/SupportBundleSource"
        },
        "status": {
          "$ref": "#/definitions/SupportBundleStatus"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "teamName": {
          "type": "string",
          "x-go-name": "TeamName"
        },
        "teamSharedIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "TeamShareIDs"
        },
        "treeIndex": {
          "type": "string",
          "x-go-name": "TreeIndex"
        },
        "uploadedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UploadedAt"
        },
        "uri": {
          "type": "string",
          "x-go-name": "URI"
        },
        "vendorUploadedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "VendorUploadedAt"
        },
        "viewed": {
          "type": "boolean",
          "x-go-name": "Viewed"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/kots"
    },
    "SupportBundleInsight": {
      "type": "object",
      "properties": {
        "desiredPosition": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DesiredPosition"
        },
        "detail": {
          "type": "string",
          "x-go-name": "Detail"
        },
        "icon": {
          "type": "string",
          "x-go-name": "Icon"
        },
        "icon_key": {
          "type": "string",
          "x-go-name": "IconKey"
        },
        "involvedObject": {
          "x-go-name": "InvolvedObject"
        },
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "level": {
          "type": "string",
          "x-go-name": "Level"
        },
        "primary": {
          "type": "string",
          "x-go-name": "Primary"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/kots"
    },
    "SupportBundleSource": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/supportbundle"
    },
    "SupportBundleStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/supportbundle"
    },
    "SupportedDistributionAndVersions": {
      "type": "object",
      "properties": {
        "instance_types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "InstanceTypes"
        },
        "nodes_max": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NodesMax"
        },
        "short_name": {
          "type": "string",
          "x-go-name": "ShortName"
        },
        "status": {
          "$ref": "#/definitions/ClusterDistributionStatus"
        },
        "version_details": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SupportedVersion"
          },
          "x-go-name": "VersionDetails"
        },
        "versions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Versions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "SupportedVersion": {
      "type": "object",
      "properties": {
        "nodes_max": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "NodesMax"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "Sysctl": {
      "description": "Sysctl defines a kernel parameter to be set",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of a property to set",
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "description": "Value of a property to set",
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "TCPSocketAction": {
      "description": "TCPSocketAction describes an action based on opening a socket",
      "type": "object",
      "properties": {
        "host": {
          "description": "Optional: Host name to connect to, defaults to the pod IP.\n+optional",
          "type": "string",
          "x-go-name": "Host"
        },
        "port": {
          "$ref": "#/definitions/IntOrString"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Tag": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "x-go-name": "Key"
        },
        "value": {
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cmx/types"
    },
    "TaintEffect": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "Team": {
      "type": "object",
      "properties": {
        "automatic_join_enabled": {
          "type": "boolean",
          "x-go-name": "AutomaticJoinEnabled"
        },
        "cmx_low_credits_notified_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CMXLowCreditsNotifiedAt"
        },
        "collab_repo_feature": {
          "type": "string",
          "x-go-name": "FeatureCollabRepo"
        },
        "collab_repo_support": {
          "type": "string",
          "x-go-name": "SupportCollabRepo"
        },
        "complexity_requirements": {
          "$ref": "#/definitions/ComplexityRequirements"
        },
        "default_app_id": {
          "type": "string",
          "x-go-name": "DefaultAppID"
        },
        "default_policy": {
          "type": "string",
          "x-go-name": "DefaultPolicy"
        },
        "domain_name": {
          "type": "string",
          "x-go-name": "DomainName"
        },
        "has_contract": {
          "description": "New fields from id service",
          "type": "boolean",
          "x-go-name": "TeamHasContract"
        },
        "has_enforced_complexity": {
          "type": "boolean",
          "x-go-name": "HasEnforcedComplexity"
        },
        "id": {
          "type": "string",
          "x-go-name": "Id"
        },
        "is_google_auth_enabled": {
          "type": "boolean",
          "x-go-name": "IsGoogleAuthEnabled"
        },
        "is_google_auth_required": {
          "type": "boolean",
          "x-go-name": "IsGoogleAuthRequired"
        },
        "is_saml_enabled": {
          "type": "boolean",
          "x-go-name": "IsSAMLEnabled"
        },
        "is_saml_required": {
          "type": "boolean",
          "x-go-name": "IsSAMLRequired"
        },
        "is_two_factor_required": {
          "type": "boolean",
          "x-go-name": "IsTwoFactorRequired"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "needs_profile": {
          "type": "boolean",
          "x-go-name": "NeedsProfile"
        },
        "saml_default_policy": {
          "type": "string",
          "x-go-name": "SAMLDefaultPolicy"
        },
        "saml_landing": {
          "type": "string",
          "x-go-name": "SAMLLanding"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "TeamNotificationEventWithAttempts": {
      "description": "TeamNotificationEventWithAttempts includes notification event details, attempts, and subscription metadata\nfor team-wide listing.",
      "type": "object",
      "properties": {
        "attempts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NotificationEventAttempt"
          },
          "x-go-name": "Attempts"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "createdByUserId": {
          "description": "Subscription metadata (from notification_subscription)",
          "type": "string",
          "x-go-name": "CreatedByUserID"
        },
        "eventData": {
          "type": "object",
          "x-go-name": "EventData"
        },
        "eventType": {
          "type": "string",
          "x-go-name": "EventType"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "lastError": {
          "type": "string",
          "x-go-name": "LastError"
        },
        "nextRetryAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "NextRetryAt"
        },
        "payload": {
          "type": "object",
          "x-go-name": "Payload"
        },
        "payloadType": {
          "type": "string",
          "x-go-name": "PayloadType"
        },
        "retryCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "RetryCount"
        },
        "sentAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "SentAt"
        },
        "status": {
          "description": "Computed fields",
          "type": "string",
          "x-go-name": "Status"
        },
        "subscriptionDeletedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "SubscriptionDeletedAt"
        },
        "subscriptionId": {
          "type": "string",
          "x-go-name": "NotificationSubscriptionID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/notifications"
    },
    "TerminationMessagePolicy": {
      "description": "+enum",
      "type": "string",
      "title": "TerminationMessagePolicy describes how termination messages are retrieved from a container.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "TestWebhookResponseBody": {
      "description": "TestWebhookResponseBody contains the result of a webhook test",
      "type": "object",
      "properties": {
        "durationMs": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DurationMs"
        },
        "error": {
          "type": "string",
          "x-go-name": "Error"
        },
        "statusCode": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "StatusCode"
        },
        "success": {
          "type": "boolean",
          "x-go-name": "Success"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/notifications"
    },
    "Toleration": {
      "description": "The pod this Toleration is attached to tolerates any taint that matches\nthe triple <key,value,effect> using the matching operator <operator>.",
      "type": "object",
      "properties": {
        "effect": {
          "$ref": "#/definitions/TaintEffect"
        },
        "key": {
          "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys.\nIf the key is empty, operator must be Exists; this combination means to match all values and all keys.\n+optional",
          "type": "string",
          "x-go-name": "Key"
        },
        "operator": {
          "$ref": "#/definitions/TolerationOperator"
        },
        "tolerationSeconds": {
          "description": "TolerationSeconds represents the period of time the toleration (which must be\nof effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,\nit is not set, which means tolerate the taint forever (do not evict). Zero and\nnegative values will be treated as 0 (evict immediately) by the system.\n+optional",
          "type": "integer",
          "format": "int64",
          "x-go-name": "TolerationSeconds"
        },
        "value": {
          "description": "Value is the taint value the toleration matches to.\nIf the operator is Exists, the value should be empty, otherwise just a regular string.\n+optional",
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "TolerationOperator": {
      "description": "+enum",
      "type": "string",
      "title": "A toleration operator is the set of operators that can be used in a toleration.",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "TopologySpreadConstraint": {
      "type": "object",
      "title": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.",
      "properties": {
        "labelSelector": {
          "$ref": "#/definitions/LabelSelector"
        },
        "matchLabelKeys": {
          "description": "MatchLabelKeys is a set of pod label keys to select the pods over which\nspreading will be calculated. The keys are used to lookup values from the\nincoming pod labels, those key-value labels are ANDed with labelSelector\nto select the group of existing pods over which spreading will be calculated\nfor the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.\nMatchLabelKeys cannot be set when LabelSelector isn't set.\nKeys that don't exist in the incoming pod labels will\nbe ignored. A null or empty list means only match against labelSelector.\n\nThis is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).\n+listType=atomic\n+optional",
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "MatchLabelKeys"
        },
        "maxSkew": {
          "description": "MaxSkew describes the degree to which pods may be unevenly distributed.\nWhen `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference\nbetween the number of matching pods in the target topology and the global minimum.\nThe global minimum is the minimum number of matching pods in an eligible domain\nor zero if the number of eligible domains is less than MinDomains.\nFor example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same\nlabelSelector spread as 2/2/1:\nIn this case, the global minimum is 1.\n+-------+-------+-------+\n zone1 | zone2 | zone3 |\n+-------+-------+-------+\n  P P  |  P P  |   P   |\n+-------+-------+-------+\nif MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;\nscheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)\nviolate MaxSkew(1).\nif MaxSkew is 2, incoming pod can be scheduled onto any zone.\nWhen `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence\nto topologies that satisfy it.\nIt's a required field. Default value is 1 and 0 is not allowed.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "MaxSkew"
        },
        "minDomains": {
          "description": "MinDomains indicates a minimum number of eligible domains.\nWhen the number of eligible domains with matching topology keys is less than minDomains,\nPod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed.\nAnd when the number of eligible domains with matching topology keys equals or greater than minDomains,\nthis value has no effect on scheduling.\nAs a result, when the number of eligible domains is less than minDomains,\nscheduler won't schedule more than maxSkew Pods to those domains.\nIf value is nil, the constraint behaves as if MinDomains is equal to 1.\nValid values are integers greater than 0.\nWhen value is not nil, WhenUnsatisfiable must be DoNotSchedule.\n\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same\nlabelSelector spread as 2/2/2:\n+-------+-------+-------+\n zone1 | zone2 | zone3 |\n+-------+-------+-------+\n  P P  |  P P  |  P P  |\n+-------+-------+-------+\nThe number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0.\nIn this situation, new pod with the same labelSelector cannot be scheduled,\nbecause computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,\nit will violate MaxSkew.\n+optional",
          "type": "integer",
          "format": "int32",
          "x-go-name": "MinDomains"
        },
        "nodeAffinityPolicy": {
          "$ref": "#/definitions/NodeInclusionPolicy"
        },
        "nodeTaintsPolicy": {
          "$ref": "#/definitions/NodeInclusionPolicy"
        },
        "topologyKey": {
          "description": "TopologyKey is the key of node labels. Nodes that have a label with this key\nand identical values are considered to be in the same topology.\nWe consider each <key, value> as a \"bucket\", and try to put balanced number\nof pods into each bucket.\nWe define a domain as a particular instance of a topology.\nAlso, we define an eligible domain as a domain whose nodes meet the requirements of\nnodeAffinityPolicy and nodeTaintsPolicy.\ne.g. If TopologyKey is \"kubernetes.io/hostname\", each Node is a domain of that topology.\nAnd, if TopologyKey is \"topology.kubernetes.io/zone\", each zone is a domain of that topology.\nIt's a required field.",
          "type": "string",
          "x-go-name": "TopologyKey"
        },
        "whenUnsatisfiable": {
          "$ref": "#/definitions/UnsatisfiableConstraintAction"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "TotalActiveInactiveCustomers": {
      "type": "object",
      "properties": {
        "activeCustomers": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ActiveCustomers"
        },
        "inactiveCustomers": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InactiveCustomers"
        },
        "totalCustomers": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCustomers"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/customer/sharedtypes"
    },
    "TrialSignupSettings": {
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customSignupFields": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CustomSignupFieldDefinition"
          },
          "x-go-name": "CustomSignupFields"
        },
        "defaultChannelId": {
          "type": "string",
          "x-go-name": "DefaultChannelID"
        },
        "domainFilterDomains": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "DomainFilterDomains"
        },
        "domainFilterMode": {
          "type": "string",
          "x-go-name": "DomainFilterMode"
        },
        "domainFilterUseDefaultBlocklist": {
          "type": "boolean",
          "x-go-name": "DomainFilterUseDefaultBlock"
        },
        "embeddedClusterEnabled": {
          "type": "boolean",
          "x-go-name": "EmbeddedClusterEnabled"
        },
        "expirationDays": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ExpirationDays"
        },
        "helmInstallEnabled": {
          "type": "boolean",
          "x-go-name": "HelmInstallEnabled"
        },
        "isHelmAirgapEnabled": {
          "type": "boolean",
          "x-go-name": "IsHelmAirgapEnabled"
        },
        "licenseType": {
          "type": "string",
          "x-go-name": "LicenseType"
        },
        "supportBundleUploadEnabled": {
          "type": "boolean",
          "x-go-name": "SupportBundleUploadEnabled"
        },
        "termsAndConditionsUrl": {
          "type": "string",
          "x-go-name": "TermsAndConditionsURL"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "TrialSignupVerification": {
      "type": "object",
      "properties": {
        "appId": {
          "type": "string",
          "x-go-name": "AppID"
        },
        "company": {
          "type": "string",
          "x-go-name": "Company"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "customFields": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "x-go-name": "CustomFields"
        },
        "email": {
          "type": "string",
          "x-go-name": "Email"
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "teamId": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdatedAt"
        },
        "verifiedAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "VerifiedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "TriggerCustomerInstanceScanBody": {
      "description": "TriggerCustomerInstanceScanBody contains the body parameters for triggering a scan",
      "type": "object",
      "required": [
        "image_name",
        "image_digest"
      ],
      "properties": {
        "cluster_id": {
          "description": "Optional cluster identifier to disambiguate instance_id",
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "image_digest": {
          "description": "Image digest to scan",
          "type": "string",
          "x-go-name": "ImageDigest"
        },
        "image_name": {
          "description": "Image name to scan",
          "type": "string",
          "x-go-name": "ImageName"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/customers"
    },
    "Type": {
      "type": "integer",
      "format": "int64",
      "title": "Type represents the stored type of IntOrString.",
      "x-go-package": "k8s.io/apimachinery/pkg/util/intstr"
    },
    "TypedLocalObjectReference": {
      "description": "New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs.\n1. Invalid usage help.  It is impossible to add specific help for individual usage.  In most embedded usages, there are particular\nrestrictions like, \"must refer only to types A and B\" or \"UID not honored\" or \"name must be restricted\".\nThose cannot be well described when embedded.\n2. Inconsistent validation.  Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen.\n3. The fields are both imprecise and overly precise.  Kind is not a precise mapping to a URL. This can produce ambiguity\nduring interpretation and require a REST mapping.  In most cases, the dependency is on the group,resource tuple\nand the version of the actual struct is irrelevant.\n4. We cannot easily change it.  Because this type is embedded in many locations, updates to this type\nwill affect numerous schemas.  Don't make new APIs embed an underspecified API type they do not control.\n\nInstead of using this type, create a locally provided and used type that is well-focused on your reference.\nFor example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .\n+structType=atomic",
      "type": "object",
      "title": "TypedLocalObjectReference contains enough information to let you locate the\ntyped referenced object inside the same namespace.",
      "properties": {
        "apiGroup": {
          "description": "APIGroup is the group for the resource being referenced.\nIf APIGroup is not specified, the specified Kind must be in the core API group.\nFor any other third-party types, APIGroup is required.\n+optional",
          "type": "string",
          "x-go-name": "APIGroup"
        },
        "kind": {
          "description": "Kind is the type of resource being referenced",
          "type": "string",
          "x-go-name": "Kind"
        },
        "name": {
          "description": "Name is the name of resource being referenced",
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "TypedObjectReference": {
      "description": "TypedObjectReference contains enough information to let you locate the typed referenced object",
      "type": "object",
      "properties": {
        "apiGroup": {
          "description": "APIGroup is the group for the resource being referenced.\nIf APIGroup is not specified, the specified Kind must be in the core API group.\nFor any other third-party types, APIGroup is required.\n+optional",
          "type": "string",
          "x-go-name": "APIGroup"
        },
        "kind": {
          "description": "Kind is the type of resource being referenced",
          "type": "string",
          "x-go-name": "Kind"
        },
        "name": {
          "description": "Name is the name of resource being referenced",
          "type": "string",
          "x-go-name": "Name"
        },
        "namespace": {
          "description": "Namespace is the namespace of resource being referenced\nNote that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.\n(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.\n+featureGate=CrossNamespaceVolumeDataSource\n+optional",
          "type": "string",
          "x-go-name": "Namespace"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "UID": {
      "description": "UID is a type that holds unique ID values, including UUIDs.  Because we\ndon't ONLY use UUIDs, this is an alias to string.  Being a type captures\nintent and helps make sure that UIDs and names do not get conflated.",
      "type": "string",
      "x-go-package": "k8s.io/apimachinery/pkg/types"
    },
    "URIScheme": {
      "description": "URIScheme identifies the scheme used for connection to a host for Get actions\n+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "UnsatisfiableConstraintAction": {
      "description": "+enum",
      "type": "string",
      "x-go-package": "k8s.io/api/core/v1"
    },
    "UnsetDefaultHostnameParams": {
      "type": "object",
      "properties": {
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/custom_hostnames"
    },
    "UpdateAttempt": {
      "description": "UpdateAttempt represents a row from customer_update_attempts",
      "type": "object",
      "properties": {
        "admin_console_url": {
          "type": "string",
          "x-go-name": "AdminConsoleURL"
        },
        "airgap_assets_downloaded_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AirgapAssetsDownloadedAt"
        },
        "customer_id": {
          "type": "string",
          "x-go-name": "CustomerID"
        },
        "from_channel_id": {
          "type": "string",
          "x-go-name": "FromChannelID"
        },
        "from_channel_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "FromChannelSequence"
        },
        "from_release_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "FromReleaseSequence"
        },
        "from_version_label": {
          "description": "Joined from kots_channel_release",
          "type": "string",
          "x-go-name": "FromVersionLabel"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "install_option_id": {
          "type": "string",
          "x-go-name": "InstallOptionID"
        },
        "install_type": {
          "type": "string",
          "x-go-name": "InstallType"
        },
        "instance_id": {
          "description": "Joined from customer_install_options",
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "instance_name": {
          "type": "string",
          "x-go-name": "InstanceName"
        },
        "network_availability": {
          "type": "string",
          "x-go-name": "NetworkAvailability"
        },
        "service_account_email_address": {
          "description": "Joined from enterprise_portal_service_account",
          "type": "string",
          "x-go-name": "ServiceAccountEmailAddress"
        },
        "service_account_id": {
          "type": "string",
          "x-go-name": "ServiceAccountID"
        },
        "started_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "StartedAt"
        },
        "status": {
          "type": "string",
          "x-go-name": "Status"
        },
        "target_channel_id": {
          "type": "string",
          "x-go-name": "TargetChannelID"
        },
        "target_channel_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TargetChannelSequence"
        },
        "target_release_sequence": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TargetReleaseSequence"
        },
        "target_version_label": {
          "type": "string",
          "x-go-name": "TargetVersionLabel"
        },
        "update_completed_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "UpdateCompletedAt"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal"
    },
    "UpdateInstructionsResponse": {
      "type": "object",
      "title": "UpdateInstructionsResponse represents the complete set of update instructions for a given install id.",
      "properties": {
        "context": {
          "description": "MDX context with all template variables",
          "x-go-name": "Context"
        },
        "format": {
          "description": "Version format (\"basic\" for legacy JSON, \"mdx\" for custom instructions)",
          "type": "string",
          "x-go-name": "Format"
        },
        "install_type": {
          "description": "Installation type (\"linux\", \"helm\", or \"embedded-cluster\")",
          "type": "string",
          "x-go-name": "InstallType"
        },
        "mdx_template": {
          "description": "MDX format fields (only present when format == \"mdx\")\nMDX template content",
          "type": "string",
          "x-go-name": "MDXTemplate"
        },
        "renderer_version": {
          "description": "Renderer version for frontend compatibility",
          "type": "integer",
          "format": "int64",
          "x-go-name": "RendererVersion"
        },
        "steps": {
          "description": "Sequential list of installation steps (legacy format only)\nNote that the number and order will vary based on the install type and the install options themselves.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/InstallStepResponse"
          },
          "x-go-name": "Steps"
        },
        "title": {
          "description": "Overall installation title (legacy format only)",
          "type": "string",
          "x-go-name": "Title"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/enterprise-portal/types"
    },
    "UpdateTeamMemberRequest": {
      "type": "object",
      "properties": {
        "policy_id": {
          "type": "string",
          "x-go-name": "PolicyID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/schema"
    },
    "User": {
      "type": "object",
      "title": "User is an account on a team.",
      "properties": {
        "email": {
          "type": "string",
          "x-go-name": "Email"
        },
        "first_name": {
          "type": "string",
          "x-go-name": "FirstName"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "is_replicated_system_user": {
          "type": "boolean",
          "x-go-name": "IsReplicatedSystemUser"
        },
        "is_two_factor_enabled": {
          "type": "boolean",
          "x-go-name": "IsTwoFactorEnabled"
        },
        "last_name": {
          "type": "string",
          "x-go-name": "LastName"
        },
        "policy_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "PolicyIDs"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/models"
    },
    "UserPublicKeyResponse": {
      "type": "object",
      "title": "UserPublicKeyResponse represents a public key in the response.",
      "properties": {
        "fingerprint": {
          "type": "string",
          "x-go-name": "Fingerprint"
        },
        "is_synced": {
          "type": "boolean",
          "x-go-name": "IsSynced"
        },
        "public_key": {
          "type": "string",
          "x-go-name": "PublicKey"
        },
        "user_id": {
          "type": "string",
          "x-go-name": "UserID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/cmx"
    },
    "VM": {
      "type": "object",
      "properties": {
        "actor": {
          "$ref": "#/definitions/Actor"
        },
        "addons": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VMAddon"
          },
          "x-go-name": "Addons"
        },
        "assigned_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "AssignedAt"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "credits_per_hour": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "CreditsPerHour"
        },
        "direct_ssh_endpoint": {
          "type": "string",
          "x-go-name": "DirectSSHEndpoint"
        },
        "direct_ssh_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DirectSSHPort"
        },
        "disk_gib": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DiskGiB"
        },
        "distribution": {
          "type": "string",
          "x-go-name": "Distribution"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ExpiresAt"
        },
        "flat_fee": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "FlatFee"
        },
        "guid": {
          "type": "string",
          "x-go-name": "GUID"
        },
        "id": {
          "type": "string",
          "x-go-name": "ShortID"
        },
        "instance_type": {
          "type": "string",
          "x-go-name": "InstanceType"
        },
        "last_scheduling_status": {
          "type": "string",
          "x-go-name": "LastSchedulingStatus"
        },
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "network_id": {
          "type": "string",
          "x-go-name": "NetworkID"
        },
        "overlayfs": {
          "type": "boolean",
          "x-go-name": "Overlayfs"
        },
        "rbac_policy_id": {
          "type": "string",
          "x-go-name": "RBACPolicyID"
        },
        "running_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "RunningAt"
        },
        "status": {
          "$ref": "#/definitions/VMStatus"
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "x-go-name": "Tags"
        },
        "team_id": {
          "type": "string",
          "x-go-name": "TeamID"
        },
        "total_credits": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCredits"
        },
        "ttl": {
          "type": "string",
          "x-go-name": "TTL"
        },
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMAddon": {
      "type": "object",
      "properties": {
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "guid": {
          "type": "string",
          "x-go-name": "GUID"
        },
        "id": {
          "type": "string",
          "x-go-name": "ShortID"
        },
        "port": {
          "$ref": "#/definitions/VMAddonPort"
        },
        "ready_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "ReadyAt"
        },
        "status": {
          "$ref": "#/definitions/VMAddonStatus"
        },
        "terminated_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "TerminatedAt"
        },
        "total_credits": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "TotalCredits"
        },
        "vm_guid": {
          "type": "string",
          "x-go-name": "VMGUID"
        },
        "vm_id": {
          "type": "string",
          "x-go-name": "VMShortID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMAddonPort": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-go-name": "Name"
        },
        "protocol_http": {
          "type": "boolean",
          "x-go-name": "ProtocolHTTP"
        },
        "protocol_https": {
          "type": "boolean",
          "x-go-name": "ProtocolHTTPS"
        },
        "protocol_ws": {
          "type": "boolean",
          "x-go-name": "ProtocolWS"
        },
        "protocol_wss": {
          "type": "boolean",
          "x-go-name": "ProtocolWSS"
        },
        "upstream_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UpstreamPort"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMAddonStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMDistributionStatus": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "x-go-name": "Enabled"
        },
        "status": {
          "type": "string",
          "x-go-name": "Status"
        },
        "status_message": {
          "type": "string",
          "x-go-name": "StatusMessage"
        },
        "versions": {
          "type": "string",
          "x-go-name": "Versions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMExposedPort": {
      "type": "object",
      "properties": {
        "exposed_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "ExposedPort"
        },
        "protocol": {
          "$ref": "#/definitions/PortProtocol"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMPort": {
      "type": "object",
      "properties": {
        "addon_guid": {
          "type": "string",
          "x-go-name": "AddonGUID"
        },
        "addon_id": {
          "type": "string",
          "x-go-name": "AddonShortID"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "exposed_ports": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VMExposedPort"
          },
          "x-go-name": "ExposedPorts"
        },
        "hostname": {
          "type": "string",
          "x-go-name": "Hostname"
        },
        "port_name": {
          "type": "string",
          "x-go-name": "PortName"
        },
        "state": {
          "$ref": "#/definitions/VMAddonStatus"
        },
        "upstream_port": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "UpstreamPort"
        },
        "vm_guid": {
          "type": "string",
          "x-go-name": "VMGUID"
        },
        "vm_id": {
          "type": "string",
          "x-go-name": "VMShortID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMStatus": {
      "type": "string",
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMSupportedDistributionAndVersions": {
      "type": "object",
      "properties": {
        "instance_type_details": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/InstanceTypeSpec"
          },
          "x-go-name": "InstanceTypeDetails"
        },
        "instance_types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "InstanceTypes"
        },
        "short_name": {
          "type": "string",
          "x-go-name": "ShortName"
        },
        "status": {
          "$ref": "#/definitions/VMDistributionStatus"
        },
        "version_details": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VMSupportedVersion"
          },
          "x-go-name": "VersionDetails"
        },
        "versions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Versions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMSupportedVersion": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string",
          "x-go-name": "Version"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "VMValidationError": {
      "type": "object",
      "properties": {
        "errors": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Errors"
        },
        "supported_distributions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VMSupportedDistributionAndVersions"
          },
          "x-go-name": "SupportedDistributions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/vm/types"
    },
    "ValidationError": {
      "type": "object",
      "properties": {
        "errors": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "Errors"
        },
        "supported_distributions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SupportedDistributionAndVersions"
          },
          "x-go-name": "SupportedDistributions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/vendor-api/cluster/types"
    },
    "VendorTeamMember": {
      "description": "VendorTeamMember represents a team member in the vendor API",
      "type": "object",
      "properties": {
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "CreatedAt"
        },
        "email": {
          "type": "string",
          "x-go-name": "Email"
        },
        "firstName": {
          "type": "string",
          "x-go-name": "FirstName"
        },
        "hasGitHubUsername": {
          "type": "boolean",
          "x-go-name": "HasGitHubUsername"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "isArchived": {
          "type": "boolean",
          "x-go-name": "IsArchived"
        },
        "isInviteExpired": {
          "type": "boolean",
          "x-go-name": "IsInviteExpired"
        },
        "isMFAEnabled": {
          "type": "boolean",
          "x-go-name": "IsMFAEnabled"
        },
        "isPendingInvite": {
          "type": "boolean",
          "x-go-name": "IsPendingInvite"
        },
        "isReadOnly": {
          "type": "boolean",
          "x-go-name": "IsReadOnly"
        },
        "isSAML": {
          "type": "boolean",
          "x-go-name": "IsSAML"
        },
        "lastActiveAt": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "LastActiveAt"
        },
        "lastName": {
          "type": "string",
          "x-go-name": "LastName"
        },
        "policyId": {
          "type": "string",
          "x-go-name": "PolicyID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/v1/team"
    },
    "VersionAdoption": {
      "type": "object",
      "properties": {
        "instanceCount": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "InstanceCount"
        },
        "versionLabel": {
          "type": "string",
          "x-go-name": "VersionLabel"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "VersionAdoptionReport": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "format": "date-time",
          "x-go-name": "Date"
        },
        "versions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VersionAdoption"
          },
          "x-go-name": "Versions"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
    },
    "Volume": {
      "type": "object",
      "title": "Volume represents a named volume in a pod that may be accessed by any container in the pod.",
      "properties": {
        "awsElasticBlockStore": {
          "$ref": "#/definitions/AWSElasticBlockStoreVolumeSource"
        },
        "azureDisk": {
          "$ref": "#/definitions/AzureDiskVolumeSource"
        },
        "azureFile": {
          "$ref": "#/definitions/AzureFileVolumeSource"
        },
        "cephfs": {
          "$ref": "#/definitions/CephFSVolumeSource"
        },
        "cinder": {
          "$ref": "#/definitions/CinderVolumeSource"
        },
        "configMap": {
          "$ref": "#/definitions/ConfigMapVolumeSource"
        },
        "csi": {
          "$ref": "#/definitions/CSIVolumeSource"
        },
        "downwardAPI": {
          "$ref": "#/definitions/DownwardAPIVolumeSource"
        },
        "emptyDir": {
          "$ref": "#/definitions/EmptyDirVolumeSource"
        },
        "ephemeral": {
          "$ref": "#/definitions/EphemeralVolumeSource"
        },
        "fc": {
          "$ref": "#/definitions/FCVolumeSource"
        },
        "flexVolume": {
          "$ref": "#/definitions/FlexVolumeSource"
        },
        "flocker": {
          "$ref": "#/definitions/FlockerVolumeSource"
        },
        "gcePersistentDisk": {
          "$ref": "#/definitions/GCEPersistentDiskVolumeSource"
        },
        "gitRepo": {
          "$ref": "#/definitions/GitRepoVolumeSource"
        },
        "glusterfs": {
          "$ref": "#/definitions/GlusterfsVolumeSource"
        },
        "hostPath": {
          "$ref": "#/definitions/HostPathVolumeSource"
        },
        "image": {
          "$ref": "#/definitions/ImageVolumeSource"
        },
        "iscsi": {
          "$ref": "#/definitions/ISCSIVolumeSource"
        },
        "name": {
          "description": "name of the volume.\nMust be a DNS_LABEL and unique within the pod.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
          "type": "string",
          "x-go-name": "Name"
        },
        "nfs": {
          "$ref": "#/definitions/NFSVolumeSource"
        },
        "persistentVolumeClaim": {
          "$ref": "#/definitions/PersistentVolumeClaimVolumeSource"
        },
        "photonPersistentDisk": {
          "$ref": "#/definitions/PhotonPersistentDiskVolumeSource"
        },
        "portworxVolume": {
          "$ref": "#/definitions/PortworxVolumeSource"
        },
        "projected": {
          "$ref": "#/definitions/ProjectedVolumeSource"
        },
        "quobyte": {
          "$ref": "#/definitions/QuobyteVolumeSource"
        },
        "rbd": {
          "$ref": "#/definitions/RBDVolumeSource"
        },
        "scaleIO": {
          "$ref": "#/definitions/ScaleIOVolumeSource"
        },
        "secret": {
          "$ref": "#/definitions/SecretVolumeSource"
        },
        "storageos": {
          "$ref": "#/definitions/StorageOSVolumeSource"
        },
        "vsphereVolume": {
          "$ref": "#/definitions/VsphereVirtualDiskVolumeSource"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VolumeDevice": {
      "type": "object",
      "title": "volumeDevice describes a mapping of a raw block device within a container.",
      "properties": {
        "devicePath": {
          "description": "devicePath is the path inside of the container that the device will be mapped to.",
          "type": "string",
          "x-go-name": "DevicePath"
        },
        "name": {
          "description": "name must match the name of a persistentVolumeClaim in the pod",
          "type": "string",
          "x-go-name": "Name"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VolumeMount": {
      "type": "object",
      "title": "VolumeMount describes a mounting of a Volume within a container.",
      "properties": {
        "mountPath": {
          "description": "Path within the container at which the volume should be mounted.  Must\nnot contain ':'.",
          "type": "string",
          "x-go-name": "MountPath"
        },
        "mountPropagation": {
          "$ref": "#/definitions/MountPropagationMode"
        },
        "name": {
          "description": "This must match the Name of a Volume.",
          "type": "string",
          "x-go-name": "Name"
        },
        "readOnly": {
          "description": "Mounted read-only if true, read-write otherwise (false or unspecified).\nDefaults to false.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "recursiveReadOnly": {
          "$ref": "#/definitions/RecursiveReadOnlyMode"
        },
        "subPath": {
          "description": "Path within the volume from which the container's volume should be mounted.\nDefaults to \"\" (volume's root).\n+optional",
          "type": "string",
          "x-go-name": "SubPath"
        },
        "subPathExpr": {
          "description": "Expanded path within the volume from which the container's volume should be mounted.\nBehaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.\nDefaults to \"\" (volume's root).\nSubPathExpr and SubPath are mutually exclusive.\n+optional",
          "type": "string",
          "x-go-name": "SubPathExpr"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VolumeMountStatus": {
      "type": "object",
      "title": "VolumeMountStatus shows status of volume mounts.",
      "properties": {
        "mountPath": {
          "description": "MountPath corresponds to the original VolumeMount.",
          "type": "string",
          "x-go-name": "MountPath"
        },
        "name": {
          "description": "Name corresponds to the name of the original VolumeMount.",
          "type": "string",
          "x-go-name": "Name"
        },
        "readOnly": {
          "description": "ReadOnly corresponds to the original VolumeMount.\n+optional",
          "type": "boolean",
          "x-go-name": "ReadOnly"
        },
        "recursiveReadOnly": {
          "$ref": "#/definitions/RecursiveReadOnlyMode"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VolumeProjection": {
      "description": "Exactly one of these fields must be set.",
      "type": "object",
      "title": "Projection that may be projected along with other supported volume types.",
      "properties": {
        "clusterTrustBundle": {
          "$ref": "#/definitions/ClusterTrustBundleProjection"
        },
        "configMap": {
          "$ref": "#/definitions/ConfigMapProjection"
        },
        "downwardAPI": {
          "$ref": "#/definitions/DownwardAPIProjection"
        },
        "podCertificate": {
          "$ref": "#/definitions/PodCertificateProjection"
        },
        "secret": {
          "$ref": "#/definitions/SecretProjection"
        },
        "serviceAccountToken": {
          "$ref": "#/definitions/ServiceAccountTokenProjection"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VolumeResourceRequirements": {
      "type": "object",
      "title": "VolumeResourceRequirements describes the storage resource requirements for a volume.",
      "properties": {
        "limits": {
          "$ref": "#/definitions/ResourceList"
        },
        "requests": {
          "$ref": "#/definitions/ResourceList"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VsphereVirtualDiskVolumeSource": {
      "type": "object",
      "title": "Represents a vSphere volume resource.",
      "properties": {
        "fsType": {
          "description": "fsType is filesystem type to mount.\nMust be a filesystem type supported by the host operating system.\nEx. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n+optional",
          "type": "string",
          "x-go-name": "FSType"
        },
        "storagePolicyID": {
          "description": "storagePolicyID is the storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n+optional",
          "type": "string",
          "x-go-name": "StoragePolicyID"
        },
        "storagePolicyName": {
          "description": "storagePolicyName is the storage Policy Based Management (SPBM) profile name.\n+optional",
          "type": "string",
          "x-go-name": "StoragePolicyName"
        },
        "volumePath": {
          "description": "volumePath is the path that identifies vSphere volume vmdk",
          "type": "string",
          "x-go-name": "VolumePath"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "VulnCounts": {
      "type": "object",
      "properties": {
        "critical": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Critical"
        },
        "high": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "High"
        },
        "low": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Low"
        },
        "medium": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Medium"
        },
        "total": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Total"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "VulnDetail": {
      "type": "object",
      "properties": {
        "artifact_name": {
          "type": "string",
          "x-go-name": "ArtifactName"
        },
        "artifact_type": {
          "type": "string",
          "x-go-name": "ArtifactType"
        },
        "artifact_version": {
          "type": "string",
          "x-go-name": "ArtifactVersion"
        },
        "cve": {
          "type": "string",
          "x-go-name": "CVE"
        },
        "description": {
          "type": "string",
          "x-go-name": "Description"
        },
        "epss_percentile": {
          "type": "number",
          "format": "double",
          "x-go-name": "EpssPercentile"
        },
        "fix_state": {
          "type": "string",
          "x-go-name": "FixState"
        },
        "fix_versions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "x-go-name": "FixVersions"
        },
        "risk": {
          "type": "number",
          "format": "double",
          "x-go-name": "Risk"
        },
        "severity": {
          "type": "string",
          "x-go-name": "Severity"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/pkg/securebuild/types"
    },
    "WeightedPodAffinityTerm": {
      "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)",
      "type": "object",
      "properties": {
        "podAffinityTerm": {
          "$ref": "#/definitions/PodAffinityTerm"
        },
        "weight": {
          "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.",
          "type": "integer",
          "format": "int32",
          "x-go-name": "Weight"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "WindowsSecurityContextOptions": {
      "type": "object",
      "title": "WindowsSecurityContextOptions contain Windows-specific options and credentials.",
      "properties": {
        "gmsaCredentialSpec": {
          "description": "GMSACredentialSpec is where the GMSA admission webhook\n(https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the\nGMSA credential spec named by the GMSACredentialSpecName field.\n+optional",
          "type": "string",
          "x-go-name": "GMSACredentialSpec"
        },
        "gmsaCredentialSpecName": {
          "description": "GMSACredentialSpecName is the name of the GMSA credential spec to use.\n+optional",
          "type": "string",
          "x-go-name": "GMSACredentialSpecName"
        },
        "hostProcess": {
          "description": "HostProcess determines if a container should be run as a 'Host Process' container.\nAll of a Pod's containers must have the same effective HostProcess value\n(it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).\nIn addition, if HostProcess is true then HostNetwork must also be set to true.\n+optional",
          "type": "boolean",
          "x-go-name": "HostProcess"
        },
        "runAsUserName": {
          "description": "The UserName in Windows to run the entrypoint of the container process.\nDefaults to the user specified in image metadata if unspecified.\nMay also be set in PodSecurityContext. If set in both SecurityContext and\nPodSecurityContext, the value specified in SecurityContext takes precedence.\n+optional",
          "type": "string",
          "x-go-name": "RunAsUserName"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "WorkloadReference": {
      "description": "WorkloadReference identifies the Workload object and PodGroup membership\nthat a Pod belongs to. The scheduler uses this information to apply\nworkload-aware scheduling semantics.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name defines the name of the Workload object this Pod belongs to.\nWorkload must be in the same namespace as the Pod.\nIf it doesn't match any existing Workload, the Pod will remain unschedulable\nuntil a Workload object is created and observed by the kube-scheduler.\nIt must be a DNS subdomain.\n\n+required",
          "type": "string",
          "x-go-name": "Name"
        },
        "podGroup": {
          "description": "PodGroup is the name of the PodGroup within the Workload that this Pod\nbelongs to. If it doesn't match any existing PodGroup within the Workload,\nthe Pod will remain unschedulable until the Workload object is recreated\nand observed by the kube-scheduler. It must be a DNS label.\n\n+required",
          "type": "string",
          "x-go-name": "PodGroup"
        },
        "podGroupReplicaKey": {
          "description": "PodGroupReplicaKey specifies the replica key of the PodGroup to which this\nPod belongs. It is used to distinguish pods belonging to different replicas\nof the same pod group. The pod group policy is applied separately to each replica.\nWhen set, it must be a DNS label.\n\n+optional",
          "type": "string",
          "x-go-name": "PodGroupReplicaKey"
        }
      },
      "x-go-package": "k8s.io/api/core/v1"
    },
    "createInstanceMuteRequest": {
      "type": "object",
      "properties": {
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "durationDays": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "DurationDays"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/notifications"
    },
    "instanceMuteJSON": {
      "type": "object",
      "properties": {
        "clusterId": {
          "type": "string",
          "x-go-name": "ClusterID"
        },
        "createdAt": {
          "type": "string",
          "x-go-name": "CreatedAt"
        },
        "createdBy": {
          "type": "string",
          "x-go-name": "CreatedBy"
        },
        "customerName": {
          "type": "string",
          "x-go-name": "CustomerName"
        },
        "expiresAt": {
          "type": "string",
          "x-go-name": "ExpiresAt"
        },
        "id": {
          "type": "string",
          "x-go-name": "ID"
        },
        "instanceId": {
          "type": "string",
          "x-go-name": "InstanceID"
        },
        "instanceName": {
          "type": "string",
          "x-go-name": "InstanceName"
        },
        "subscriptionId": {
          "type": "string",
          "x-go-name": "SubscriptionID"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/notifications"
    },
    "listInstanceMutesResponse": {
      "type": "object",
      "properties": {
        "mutes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/instanceMuteJSON"
          },
          "x-go-name": "Mutes"
        }
      },
      "x-go-package": "github.com/replicatedhq/vandoor/handlers/vendor-api/replv3/notifications"
    }
  },
  "responses": {
    "addUserPublicKeyResponse": {
      "description": "AddUserPublicKeyResponse contains the response for adding a user public key.",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "public_key": {
            "$ref": "#/definitions/UserPublicKeyResponse"
          }
        }
      }
    },
    "analyzeSupportBundle": {
      "description": "AnalyzeSupportBundleResponse contains the analyze support bundle command response properties",
      "schema": {
        "type": "object"
      }
    },
    "archiveCustomerInstanceResponse": {
      "description": "ArchiveCustomerInstanceResponse contains the response to archive an instance",
      "schema": {
        "type": "object",
        "properties": {
          "customerInstance": {
            "$ref": "#/definitions/CustomerInstance"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "atchiveReleasesResponse": {
      "description": "ArchiveReleasesResponse contains response properties",
      "schema": {
        "type": "object"
      }
    },
    "batchArchiveCustomerInstancesResponse": {
      "description": "BatchArchiveCustomerInstancesResponse contains the bulk archive response.",
      "schema": {
        "type": "object",
        "properties": {
          "archived": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Archived"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "skipped": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/SkippedInstance"
            },
            "x-go-name": "Skipped"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "channelReleaseAirgapBuildResponse": {
      "description": "ChannelReleaseAirgapBuildResponse contains empty JSON object",
      "schema": {
        "type": "object"
      }
    },
    "channelReleaseAirgapBundleURLResponse": {
      "description": "ChannelReleaseAirgapBundleURLResponse contains the airgap bundle download URL",
      "schema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "x-go-name": "URL"
          }
        }
      }
    },
    "channelReleaseAirgapCancelResponse": {
      "description": "ChannelReleaseAirgapCancelResponse contains empty JSON object",
      "schema": {
        "type": "object"
      }
    },
    "channelReleaseAirgapStatusResponse": {
      "description": "ChannelReleaseAirgapStatusResponse contains the airgap build status",
      "schema": {
        "$ref": "#/definitions/AirgapBuildSummary"
      }
    },
    "cliTelemetryErrorResponse": {
      "description": "CliTelemetryErrorResponse represents the response from recording an error",
      "schema": {
        "type": "object",
        "properties": {
          "status": {
            "description": "Status indicator",
            "type": "string",
            "x-go-name": "Status",
            "example": "ok"
          }
        }
      }
    },
    "cliTelemetryEventResponse": {
      "description": "CliTelemetryEventResponse represents the response from creating a telemetry event",
      "schema": {
        "type": "object",
        "properties": {
          "event_id": {
            "description": "Unique identifier for the event (UUID format)",
            "type": "string",
            "x-go-name": "EventID",
            "example": "550e8400-e29b-41d4-a716-446655440000"
          }
        }
      }
    },
    "cliTelemetryStatsResponse": {
      "description": "CliTelemetryStatsResponse represents the response from recording stats",
      "schema": {
        "type": "object",
        "properties": {
          "status": {
            "description": "Status indicator",
            "type": "string",
            "x-go-name": "Status",
            "example": "ok"
          }
        }
      }
    },
    "compatibilityErrorResponse": {
      "description": "ReportCompatibilityResultErrorResponse contains error information",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          },
          "validationError": {
            "$ref": "#/definitions/ValidationError"
          }
        }
      }
    },
    "compatibilityResponse": {
      "description": "ReportCompatibilityResultResponse represents compatibility result.",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "createClusterAddonObjectStoreResponse": {
      "description": "CreateClusterAddonObjectStoreResponse contains the response to a create cluster object store addon request",
      "schema": {
        "type": "object",
        "properties": {
          "addon": {
            "$ref": "#/definitions/ClusterAddon"
          }
        }
      }
    },
    "createClusterDryRunResponse": {
      "description": "CreateClusterDryRunResponse contains the response to a dry run of creating a cluster",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/definitions/CreateClusterError"
          },
          "total_cost": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCost"
          },
          "ttl": {
            "type": "string",
            "x-go-name": "TTL"
          }
        }
      }
    },
    "createClusterErrorResponse": {
      "description": "CreateClusterErrorResponse contains error information",
      "schema": {
        "$ref": "#/definitions/CreateClusterError"
      }
    },
    "createClusterPortResponse": {
      "description": "CreateClusterPortResponse contains the response to a create cluster port request",
      "schema": {
        "type": "object",
        "properties": {
          "addon": {
            "$ref": "#/definitions/ClusterAddon"
          },
          "port": {
            "$ref": "#/definitions/ClusterPort"
          }
        }
      }
    },
    "createClusterResponse": {
      "description": "CreateClusterResponse contains the response to create a cluster",
      "schema": {
        "type": "object",
        "properties": {
          "cluster": {
            "$ref": "#/definitions/Cluster"
          }
        }
      }
    },
    "createContentVersionPinResponse": {
      "description": "CreateContentVersionPinResponse contains the response from creating a\ncontent version pin.",
      "schema": {
        "type": "object",
        "properties": {
          "version": {
            "$ref": "#/definitions/ContentVersion"
          }
        }
      }
    },
    "createCustomHostnameResponse": {
      "description": "CreateCustomHostnameResponse contains whether or not the request was successful",
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "createCustomInstructionsResponse": {
      "description": "CreateCustomInstructionsResponse contains the response from creating custom instructions.",
      "schema": {
        "type": "object",
        "properties": {
          "instructions": {
            "$ref": "#/definitions/CustomInstructions"
          }
        }
      }
    },
    "createCustomerAllowedDomainResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "allowedDomain": {
            "$ref": "#/definitions/AllowedDomain"
          }
        }
      }
    },
    "createCustomerResponse": {
      "description": "CreateCustomerResponse is the response for the customer create route,\nincluding auto-invite status.",
      "schema": {
        "type": "object",
        "properties": {
          "customer": {
            "$ref": "#/definitions/Customer"
          },
          "enterprise_portal_invite_sent": {
            "type": "boolean",
            "x-go-name": "EnterprisePortalInviteSent"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "Warnings"
          }
        }
      }
    },
    "createEnterprisePortalSystemUserLoginResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "login_url": {
            "description": "A fully-qualified login URL to open in a new tab",
            "type": "string",
            "x-go-name": "LoginURL"
          },
          "nonce": {
            "description": "The nonce that can be used with the EP verify endpoint",
            "type": "string",
            "x-go-name": "Nonce"
          }
        }
      }
    },
    "createExternalRegistryResponse": {
      "description": "CreateExternalRegistryResponse represents an external registry.",
      "schema": {
        "type": "object",
        "properties": {
          "external_registry": {
            "$ref": "#/definitions/ExternalRegistry"
          }
        }
      }
    },
    "createInstallOptionsResponse": {
      "description": "CreateInstallOptionsResponse contains the response from creating install options.",
      "schema": {
        "type": "object",
        "properties": {
          "install_options": {
            "$ref": "#/definitions/CustomerInstallOptions"
          },
          "instructions": {
            "$ref": "#/definitions/InstallInstructionsResponse"
          },
          "service_account": {
            "$ref": "#/definitions/ServiceAccount"
          }
        }
      }
    },
    "createLicenseFieldResponse": {
      "description": "CreateLicenseFieldResponse contains the response of all license fields",
      "schema": {
        "$ref": "#/definitions/EntitlementField"
      }
    },
    "createNetworkDryRunResponse": {
      "description": "CreateNetworkDryRunResponse contains the response to a dry run of creating a network",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/definitions/CreateNetworkError"
          },
          "ttl": {
            "type": "string",
            "x-go-name": "TTL"
          }
        }
      }
    },
    "createNetworkErrorResponse": {
      "description": "CreateNetworkErrorResponse contains error information",
      "schema": {
        "$ref": "#/definitions/CreateNetworkError"
      }
    },
    "createNetworkResponse": {
      "description": "CreateNetworkResponse contains the response to create a network",
      "schema": {
        "type": "object",
        "properties": {
          "network": {
            "$ref": "#/definitions/Network"
          }
        }
      }
    },
    "createNotificationSubscription": {
      "description": "CreateNotificationSubscriptionResponse contains the created notification subscription",
      "schema": {
        "$ref": "#/definitions/NotificationSubscription"
      }
    },
    "createPolicyResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "policy": {
            "$ref": "#/definitions/Policy"
          }
        }
      }
    },
    "createRelease": {
      "description": "CreateReleaseResponse contains the new release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/AppRelease"
          }
        }
      }
    },
    "createTeamServiceAccountResponse": {
      "description": "CreateTeamServiceAccountResponse contains the created service account and its access token.",
      "schema": {
        "type": "object",
        "properties": {
          "access_token": {
            "description": "AccessToken is the access token for the created service account.",
            "type": "string",
            "x-go-name": "AccessToken"
          },
          "service_account": {
            "$ref": "#/definitions/ServiceAccount"
          }
        }
      }
    },
    "createUserApiTokenResponse": {
      "description": "",
      "schema": {
        "$ref": "#/definitions/ApiToken"
      }
    },
    "createVMDryRunResponse": {
      "description": "CreateVMDryRunResponse contains the response to a dry run of creating a vm",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/definitions/CreateVMError"
          },
          "total_cost": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCost"
          },
          "ttl": {
            "type": "string",
            "x-go-name": "TTL"
          }
        }
      }
    },
    "createVMErrorResponse": {
      "description": "CreateVMErrorResponse contains error information",
      "schema": {
        "$ref": "#/definitions/CreateVMError"
      }
    },
    "createVMPortResponse": {
      "description": "CreateVMPortResponse contains the response to a create vm port request",
      "schema": {
        "type": "object",
        "properties": {
          "addon": {
            "$ref": "#/definitions/VMAddon"
          },
          "port": {
            "$ref": "#/definitions/VMPort"
          }
        }
      }
    },
    "createVMResponse": {
      "description": "CreateVMResponse contains the response to create a vm",
      "schema": {
        "type": "object",
        "properties": {
          "vms": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VM"
            },
            "x-go-name": "VMs"
          }
        }
      }
    },
    "deleteClusterPortResponse": {
      "description": "DeleteClusterPortResponse contains the response to a delete cluster port request",
      "schema": {
        "type": "object",
        "properties": {
          "addons": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterAddon"
            },
            "x-go-name": "Addons"
          },
          "ports": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterPort"
            },
            "x-go-name": "Ports"
          }
        }
      }
    },
    "deleteClusterResponse": {
      "description": "DeleteClusterResponse contains the response to delete a cluster",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "deleteContentVersionResponse": {
      "description": "DeleteContentVersionResponse contains the response from deleting a content\nversion.",
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "description": "True when the version was deleted",
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "deleteCustomHostnameResponse": {
      "description": "DeleteCustomHostnameResponse contains whether or not the request was successful",
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "deleteCustomInstructionsResponse": {
      "description": "DeleteCustomInstructionsResponse contains the response from deleting custom instructions."
    },
    "deleteLicenseFieldResponse": {
      "description": "DeleteLicenseFieldResponse contains the response from deleting a license field"
    },
    "deleteNetworkErrorResponse": {
      "description": "DeleteNetworkErrorResponse contains error information",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "deleteNetworkResponse": {
      "description": "DeleteNetworkResponse contains the response to delete a network",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "deleteSupportBundle": {
      "description": "DeleteSupportBundleResponse contains the delete support bundle command response properties",
      "schema": {
        "type": "object"
      }
    },
    "deleteUserPublicKeyResponse": {
      "description": "DeleteUserPublicKeyResponse contains the response for deleting a user public key.",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "deleteVMResponse": {
      "description": "DeleteVMResponse contains the response to delete a vm",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "demoteChannelRelease": {
      "description": "DemoteChannelReleaseResponse contains the channel release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/KotsChannelRelease"
          }
        }
      }
    },
    "dismissContentVersionNoticeResponse": {
      "description": "DismissContentVersionNoticeResponse contains the response from dismissing a\ncontent version notice.",
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "description": "True when the notice was dismissed",
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "downloadLicenseResponse": {
      "description": "DownloadLicenseResponse contains the license yaml",
      "schema": {
        "type": "string"
      }
    },
    "downloadSupportBundleURL": {
      "description": "DownloadSupportBundleURLResponse contains the download URL response when redirect=false.",
      "schema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "x-go-name": "URL"
          }
        }
      }
    },
    "draftReleaseResponse": {
      "description": "DraftReleaseResponse contains the draft release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/AppReleaseDraft"
          }
        }
      }
    },
    "editLicenseFieldResponse": {
      "description": "EditLicenseFieldResponse contains the license fields",
      "schema": {
        "$ref": "#/definitions/EntitlementField"
      }
    },
    "externalRegistryLogsResponse": {
      "description": "ExternalRegistryLogsResponse contains the JSON external registry logs",
      "schema": {
        "type": "object",
        "properties": {
          "logs": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ExternalRegistryLog"
            },
            "x-go-name": "Logs"
          }
        }
      }
    },
    "getAppResponse": {
      "description": "GetAppResponse represents an app.",
      "schema": {
        "type": "object",
        "properties": {
          "app": {
            "$ref": "#/definitions/AppWithChannels"
          }
        }
      }
    },
    "getCMXStatsResponse": {
      "description": "GetCMXStatsResponse contains the response to get CMX stats.",
      "schema": {
        "type": "object",
        "properties": {
          "cluster_count": {
            "description": "Total number of clusters.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "ClusterCount"
          },
          "cost": {
            "description": "Total cost of all clusters and VMs in cents.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "Cost"
          },
          "credit_balance": {
            "description": "Total remaining credit balance in cents.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "CreditBalance"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "usage_minutes": {
            "description": "Total number of usage minutes across clusters and VMs.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "UsageMinutes"
          },
          "vm_count": {
            "description": "Total number of VMs.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "VMCount"
          }
        }
      }
    },
    "getChannelAdoptionReportResponse": {
      "description": "GetChannelAdoptionReportResponse represents channel adoption report.",
      "schema": {
        "type": "object",
        "properties": {
          "report": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VersionAdoptionReport"
            },
            "x-go-name": "Report"
          }
        }
      }
    },
    "getChannelInstanceTrendsResponse": {
      "description": "GetChannelInstanceTrendsResponse represents instance trends.",
      "schema": {
        "type": "object",
        "properties": {
          "instanceTrends": {
            "$ref": "#/definitions/InstanceTrends"
          }
        }
      }
    },
    "getChannelReleaseInstallCommandsResponse": {
      "description": "GetChannelReleaseInstallCommandsResponse contains the JSON channel release install commands",
      "schema": {
        "type": "object",
        "properties": {
          "commands": {
            "$ref": "#/definitions/ChannelReleaseInstallCommands"
          }
        }
      }
    },
    "getChannelResponse": {
      "description": "GetChannelResponse represents a channel.",
      "schema": {
        "type": "object",
        "properties": {
          "channel": {
            "$ref": "#/definitions/Channel"
          }
        }
      }
    },
    "getClusterFiltersResponse": {
      "description": "GetClusterFiltersResponse contains the response to get clusters filters",
      "schema": {
        "type": "object",
        "properties": {
          "earliest_cluster_date_days_ago": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "EarliestClusterDateDaysAgo"
          },
          "max_cost": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "MaxCost"
          },
          "max_duration_minutes": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "MaxDurationMinutes"
          },
          "max_node_groups": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "MaxNodeGroups"
          },
          "max_nodes": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "MaxNodes"
          },
          "max_ttl_minutes": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "MaxTTLMinutes"
          }
        }
      }
    },
    "getClusterKubeconfigResponse": {
      "description": "GetClusterKubeconfigResponse contains the response to get a cluster kubeconfig",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "kubeconfig": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint8"
            },
            "x-go-name": "Kubeconfig"
          }
        }
      }
    },
    "getClusterResponse": {
      "description": "GetClusterResponse contains the response to get cluster details",
      "schema": {
        "type": "object",
        "properties": {
          "cluster": {
            "$ref": "#/definitions/Cluster"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "getClusterStatsResponse": {
      "description": "GetClusterStatsResponse contains the response to get clusters stats",
      "schema": {
        "type": "object",
        "properties": {
          "cluster_count": {
            "description": "Total number of clusters.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "ClusterCount"
          },
          "cost": {
            "description": "Total cost of all clusters in cents.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "Cost"
          },
          "credit_balance": {
            "description": "Total remaining credit balance in cents.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "CreditBalance"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "node_minutes": {
            "description": "Total number of node minutes.",
            "type": "integer",
            "format": "int64",
            "x-go-name": "NodeMinutes"
          }
        }
      }
    },
    "getCustomInstructionsResponse": {
      "description": "GetCustomInstructionsResponse contains the response from getting custom instructions.",
      "schema": {
        "type": "object",
        "properties": {
          "instructions": {
            "$ref": "#/definitions/CustomInstructions"
          }
        }
      }
    },
    "getCustomerEntitlementsResponse": {
      "description": "GetCustomerEntitlementsResponse represents a customer.",
      "schema": {
        "type": "object",
        "properties": {
          "entitlements": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/EntitlementValue"
            },
            "x-go-name": "Entitlements"
          }
        }
      }
    },
    "getCustomerInstanceRunningImagesResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "running_images": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "x-go-name": "RunningImages"
          }
        }
      }
    },
    "getCustomerInstanceScan": {
      "description": "GetCustomerInstanceScanResponse contains the security scan summaries for the instance images.",
      "schema": {
        "type": "object",
        "properties": {
          "scans": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/SecurityScanWrapper"
            },
            "x-go-name": "Scans"
          }
        }
      }
    },
    "getCustomerInstanceTagsResponse": {
      "description": "GetCustomerInstanceTagsResponse contains the response to update a instance tags",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "tags": {
            "$ref": "#/definitions/InstanceTags"
          }
        }
      }
    },
    "getCustomerInstancesTagsBulkResponse": {
      "description": "GetCustomerInstancesTagsBulkResponse contains the bulk tags response",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "clusterId": {
                  "type": "string",
                  "x-go-name": "ClusterID"
                },
                "instanceId": {
                  "type": "string",
                  "x-go-name": "InstanceID"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/InstanceTagDTO"
                  },
                  "x-go-name": "Tags"
                }
              }
            },
            "x-go-name": "Results"
          }
        }
      }
    },
    "getCustomerResponse": {
      "description": "GetCustomerResponse represents a customer.",
      "schema": {
        "type": "object",
        "properties": {
          "customer": {
            "$ref": "#/definitions/Customer"
          }
        }
      }
    },
    "getDocumentationResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "documentation": {
            "$ref": "#/definitions/Documentation"
          }
        }
      }
    },
    "getECRIAMConfigResponse": {
      "description": "GetECRIAMConfigResponse contains the team OIDC configuration.",
      "schema": {
        "type": "object",
        "properties": {
          "audience": {
            "type": "string",
            "x-go-name": "Audience"
          },
          "issuer_url": {
            "type": "string",
            "x-go-name": "IssuerURL"
          },
          "subject_type": {
            "type": "string",
            "x-go-name": "SubjectType"
          },
          "thumbprint": {
            "type": "string",
            "x-go-name": "Thumbprint"
          }
        }
      }
    },
    "getEnterprisePortalAccessResponse": {
      "description": "GetEnterprisePortalAccessResponse represents the access settings response",
      "schema": {
        "type": "object",
        "properties": {
          "auto_invite_to_ep_on_create": {
            "type": "boolean",
            "x-go-name": "AutoInviteToEpOnCreate"
          },
          "download_portal_disabled": {
            "type": "boolean",
            "x-go-name": "DownloadPortalDisabled"
          }
        }
      }
    },
    "getEnterprisePortalBrandingResponse": {
      "description": "GetEnterprisePortalBrandingResponse represents the branding for the enterprise portal.",
      "schema": {
        "type": "object",
        "properties": {
          "activeEnterprisePortalTemplate": {
            "type": "string",
            "x-go-name": "ActiveEnterprisePortalTemplate"
          },
          "branding": {
            "type": "string",
            "x-go-name": "Branding"
          }
        }
      }
    },
    "getEnterprisePortalSettingsResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/definitions/EnterprisePortalSettings"
          }
        }
      }
    },
    "getEnterprisePortalStatusResponse": {
      "description": "GetEnterprisePortalStatusResponse represents the status of the enterprise portal.",
      "schema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "x-go-name": "Status"
          }
        }
      }
    },
    "getEvents": {
      "description": "GetEventsResponse contains the get events response properties",
      "schema": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/BundleEvent"
            },
            "x-go-name": "Events"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "getFiles": {
      "description": "GetFilesResponse contains the get files response properties",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "files": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "uint8"
              }
            },
            "x-go-name": "Files"
          },
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "getInstallOptionsResponse": {
      "description": "GetInstallOptionsResponse contains the response from getting install options.",
      "schema": {
        "type": "object",
        "properties": {
          "admin_console_url": {
            "type": "string",
            "x-go-name": "AdminConsoleURL"
          },
          "assets_downloaded_at": {
            "description": "New fields for tracking installation progress",
            "type": "string",
            "format": "date-time",
            "x-go-name": "AssetsDownloadedAt"
          },
          "browser_install_completed_at": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "BrowserInstallCompletedAt"
          },
          "channel_id": {
            "type": "string",
            "x-go-name": "ChannelID"
          },
          "channel_release_sequence": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "ChannelSequence"
          },
          "customer_email": {
            "type": "string",
            "x-go-name": "CustomerEmail"
          },
          "customer_id": {
            "type": "string",
            "x-go-name": "CustomerID"
          },
          "id": {
            "type": "string",
            "x-go-name": "ID"
          },
          "images_pulled_at": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "ImagesPulledAt"
          },
          "install_type": {
            "type": "string",
            "x-go-name": "InstallType"
          },
          "installation_completed_at": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "InstallationCompletedAt"
          },
          "instance_id": {
            "type": "string",
            "x-go-name": "InstanceID"
          },
          "instance_name": {
            "type": "string",
            "x-go-name": "InstanceName"
          },
          "instructions": {
            "$ref": "#/definitions/InstallInstructionsResponse"
          },
          "is_multi_node": {
            "type": "boolean",
            "x-go-name": "IsMultiNode"
          },
          "kubernetes_distribution": {
            "type": "string",
            "x-go-name": "KubernetesDistribution"
          },
          "license_id": {
            "type": "string",
            "x-go-name": "LicenseID"
          },
          "network_availability": {
            "type": "string",
            "x-go-name": "NetworkAvailability"
          },
          "os_distro": {
            "type": "string",
            "x-go-name": "OSDistro"
          },
          "os_version": {
            "type": "string",
            "x-go-name": "OSVersion"
          },
          "registry_authenticated_at": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "RegistryAuthenticatedAt"
          },
          "registry_availability": {
            "type": "string",
            "x-go-name": "RegistryAvailability"
          },
          "service_account_id": {
            "type": "string",
            "x-go-name": "ServiceAccountID"
          },
          "service_account_token": {
            "type": "string",
            "x-go-name": "ServiceAccountToken"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "StartedAt"
          },
          "status": {
            "type": "string",
            "x-go-name": "Status"
          }
        }
      }
    },
    "getInstanceTagSchemaResponse": {
      "description": "GetInstanceTagSchemaResponse contains the tag schema response",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "tags": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "x-go-name": "Tags"
          }
        }
      }
    },
    "getLogs": {
      "description": "GetLogsResponse contains the get logs response properties",
      "schema": {
        "type": "object",
        "properties": {
          "logs": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/LogEntry"
            },
            "x-go-name": "Logs"
          },
          "truncated": {
            "type": "boolean",
            "x-go-name": "Truncated"
          }
        }
      }
    },
    "getNetworkReportResponse": {
      "description": "GetNetworkReportResponse contains the response for network report",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            },
            "x-go-name": "Events"
          }
        }
      }
    },
    "getNetworkReportSummaryResponse": {
      "description": "GetNetworkReportSummaryResponse contains the response for network report summary",
      "schema": {
        "type": "object",
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "CreatedAt"
          },
          "destinations": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/NetworkReportSummaryDestination"
            },
            "x-go-name": "Destinations"
          },
          "domains": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/NetworkReportSummaryDomain"
            },
            "x-go-name": "Domains"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "id": {
            "type": "string",
            "x-go-name": "ID"
          },
          "network_id": {
            "type": "string",
            "x-go-name": "NetworkID"
          },
          "time_range_end": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "TimeRangeEnd"
          },
          "time_range_start": {
            "type": "string",
            "format": "date-time",
            "x-go-name": "TimeRangeStart"
          },
          "total_events": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalEvents"
          }
        }
      }
    },
    "getNetworkResponse": {
      "description": "GetNetworkResponse contains the response to get network details",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "network": {
            "$ref": "#/definitions/Network"
          }
        }
      }
    },
    "getNotificationSubscription": {
      "description": "GetNotificationSubscriptionResponse contains a single notification subscription",
      "schema": {
        "$ref": "#/definitions/NotificationSubscription"
      }
    },
    "getPodDetails": {
      "description": "GetPodDetailsResponse contains the pod details response properties",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "podContainers": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/PodContainer"
            },
            "x-go-name": "PodContainers"
          },
          "podDefinition": {
            "$ref": "#/definitions/Pod"
          },
          "podEvents": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Event"
            },
            "x-go-name": "PodEvents"
          },
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "getPolicyResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "policy": {
            "$ref": "#/definitions/Policy"
          }
        }
      }
    },
    "getPortalFeaturesResponse": {
      "description": "PortalFeaturesResponse holds the current state of all portal feature toggles for an app.",
      "schema": {
        "type": "object",
        "properties": {
          "askAiEnabled": {
            "description": "Whether the Ask AI assistant is enabled in the Enterprise Portal.",
            "type": "boolean",
            "x-go-name": "AskAiEnabled"
          },
          "supportBundleUploadEnabled": {
            "description": "Whether support bundle upload is enabled in the Enterprise Portal.",
            "type": "boolean",
            "x-go-name": "SupportBundleUploadEnabled"
          }
        }
      }
    },
    "getRelease": {
      "description": "GetReleaseParameters contains the release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/AppRelease"
          }
        }
      }
    },
    "getResources": {
      "description": "GetResourcesResponse contains the get resources response properties",
      "schema": {
        "type": "object",
        "properties": {
          "resources": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "x-go-name": "Resources"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "getSecurityCenterSettingsResponse": {
      "description": "SecurityCenterSettingsResponse contains the security center settings for an app",
      "schema": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "x-go-name": "Enabled"
          }
        }
      }
    },
    "getSupportBundle": {
      "description": "GetSupportBundleResponse contains the get support bundle response properties",
      "schema": {
        "type": "object",
        "properties": {
          "bundle": {
            "$ref": "#/definitions/SupportBundle"
          }
        }
      }
    },
    "getSupportBundleCommandResponse": {
      "description": "GetSupportBundleCommandResponse contains the get support bundle command response properties",
      "schema": {
        "type": "object",
        "properties": {
          "command": {
            "type": "string",
            "x-go-name": "Command"
          }
        }
      }
    },
    "getSupportBundleUploadURL": {
      "description": "GetUploadURLResponse contains the get support bundle upload URL response properties",
      "schema": {
        "type": "object",
        "properties": {
          "bundleId": {
            "type": "string",
            "x-go-name": "BundleID"
          },
          "url": {
            "type": "string",
            "x-go-name": "URL"
          }
        }
      }
    },
    "getTeamMemberResponse": {
      "description": "",
      "schema": {
        "$ref": "#/definitions/User"
      }
    },
    "getTeamResponse": {
      "description": "",
      "schema": {
        "$ref": "#/definitions/Team"
      }
    },
    "getTrialSignupSettingsResponse": {
      "description": "TrialSignupSettingsResponse contains the trial signup settings for an app",
      "schema": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/definitions/TrialSignupSettings"
          }
        }
      }
    },
    "getUpdateInstructionsResponse": {
      "description": "GetUpdateInstructionsResponse contains the response from getting update instructions.",
      "schema": {
        "$ref": "#/definitions/UpdateInstructionsResponse"
      }
    },
    "getUserPublicKeysResponse": {
      "description": "GetUserPublicKeysResponse contains the response for getting user public keys.",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "public_keys": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/UserPublicKeyResponse"
            },
            "x-go-name": "PublicKeys"
          }
        }
      }
    },
    "getVMResponse": {
      "description": "GetVMResponse contains the response to get vm details",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "vm": {
            "$ref": "#/definitions/VM"
          }
        }
      }
    },
    "increaseClusterCreditsErrorResponse": {
      "description": "IncreaseClusterCreditsErrorResponse contains the errors returned when increasing cluster credits",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "increaseClusterCreditsResponse": {
      "description": "IncreaseClusterCreditsResponse contains the response to increase cluster credits",
      "schema": {
        "type": "object",
        "properties": {
          "checkout_url": {
            "type": "string",
            "x-go-name": "CheckoutURL"
          }
        }
      }
    },
    "increaseClusterQuotaErrorResponse": {
      "description": "IncreaseClusterQuotaErrorResponse contains the errors returned when increasing cluster quota",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "increaseClusterQuotaResponse": {
      "description": "IncreaseClusterQuotaResponse contains the response to increase cluster quota",
      "schema": {
        "type": "object"
      }
    },
    "inviteEnterprisePortalCustomerUserResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "invite": {
            "$ref": "#/definitions/CustomerInvite"
          }
        }
      }
    },
    "listAppCustomerInstancesResponse": {
      "description": "ListAppCustomerInstancesResponse contains the list of customers",
      "headers": {
        "ContentDisposition": {
          "type": "string",
          "description": "Required: true\nIn: header"
        }
      }
    },
    "listAppCustomersCsvResponse": {
      "description": "ListAppCustomersCsvResponse contains the list of customers",
      "headers": {
        "ContentDisposition": {
          "type": "string",
          "description": "Required: true\nIn: header"
        }
      }
    },
    "listAppInstanceEventsResponse": {
      "description": "ListAppInstanceEventsResponse contains the list of instance events",
      "schema": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "appId": {
              "type": "string",
              "x-go-name": "AppId"
            },
            "customerId": {
              "type": "string",
              "x-go-name": "CustomerId"
            },
            "fieldName": {
              "type": "string",
              "x-go-name": "FieldName"
            },
            "instanceId": {
              "type": "string",
              "x-go-name": "InstanceId"
            },
            "isCustom": {
              "type": "string",
              "x-go-name": "IsCustom"
            },
            "newValue": {
              "type": "string",
              "x-go-name": "NewValue"
            },
            "previousValue": {
              "type": "string",
              "x-go-name": "PreviousValue"
            },
            "reportedAt": {
              "type": "string",
              "x-go-name": "ReportedAt"
            }
          }
        }
      }
    },
    "listAppsResponse": {
      "description": "ListAppsResponse contains the JSON apps list",
      "schema": {
        "type": "object",
        "properties": {
          "apps": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/AppWithChannels"
            },
            "x-go-name": "Apps"
          }
        }
      }
    },
    "listBuiltinLicenseFieldsResponse": {
      "description": "ListBuiltinLicenseFieldsResponse contains the list of builtin license fields, with overrides applied",
      "schema": {
        "type": "object",
        "properties": {
          "builtin_license_fields": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/BuiltInDefaultLicenseField"
            },
            "x-go-name": "BuiltinLicenseFields"
          }
        }
      }
    },
    "listCMXHistoryResponse": {
      "description": "ListCMXHistoryResponse contains the response to listing CMX history",
      "schema": {
        "type": "object",
        "properties": {
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/CMXHistory"
            },
            "x-go-name": "History"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "listCMXQuotasResponse": {
      "description": "ListCMXQuotasResponse contains the response to list CMX quotas",
      "schema": {
        "type": "object",
        "properties": {
          "cmx_quotas": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/CMXQuota"
            },
            "x-go-name": "CMXQuotas"
          }
        }
      }
    },
    "listChannelReleasesResponse": {
      "description": "ListChannelReleasesResponse contains the JSON channel releases list",
      "schema": {
        "type": "object",
        "properties": {
          "matchedCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "MatchedCount"
          },
          "releases": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/KotsChannelRelease"
            },
            "x-go-name": "Releases"
          }
        }
      }
    },
    "listChannelsResponse": {
      "description": "ListChannelsResponse contains the JSON channels list",
      "schema": {
        "type": "object",
        "properties": {
          "channels": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Channel"
            },
            "x-go-name": "Channels"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCount"
          }
        }
      }
    },
    "listClusterAddonsResponse": {
      "description": "ListClusterAddonsResponse contains the response to a list clusters addons request",
      "schema": {
        "type": "object",
        "properties": {
          "addons": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterAddon"
            },
            "x-go-name": "Addons"
          }
        }
      }
    },
    "listClusterPortsResponse": {
      "description": "ListClusterPortsResponse contains the response to a list cluster [prts] request",
      "schema": {
        "type": "object",
        "properties": {
          "addons": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterAddon"
            },
            "x-go-name": "Addons"
          },
          "ports": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterPort"
            },
            "x-go-name": "Ports"
          }
        }
      }
    },
    "listClusterQuotasResponse": {
      "description": "ListClusterQuotasResponse contains the response to list cluster quotas",
      "schema": {
        "type": "object",
        "properties": {
          "cluster_quotas": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterQuota"
            },
            "x-go-name": "ClusterQuotas"
          }
        }
      }
    },
    "listClusterUsageResponse": {
      "description": "ListClusterUsageResponse contains the response to list cluster usage",
      "schema": {
        "type": "object",
        "properties": {
          "clusterUsageDetails": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ClusterDetail"
            },
            "x-go-name": "ClusterUsageDetails"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "listClusterVersionsResponse": {
      "description": "ListClusterVersionsResponse contains the response to list clusters",
      "schema": {
        "type": "object",
        "properties": {
          "cluster-versions": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/SupportedDistributionAndVersions"
            },
            "x-go-name": "Clusters"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "listClustersResponse": {
      "description": "ListClustersResponse contains the response to list clusters",
      "schema": {
        "type": "object",
        "properties": {
          "clusters": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Cluster"
            },
            "x-go-name": "Clusters"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "totalClusters": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalClusters"
          }
        }
      }
    },
    "listCustomHostnamesResponse": {
      "description": "ListCustomHostnamesResponse contains the JSON custom hostnames list",
      "schema": {
        "type": "object",
        "properties": {
          "downloadPortal": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/KotsAppCustomHostname"
            },
            "x-go-name": "DownloadPortal"
          },
          "proxy": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/KotsAppCustomHostname"
            },
            "x-go-name": "Proxy"
          },
          "registry": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/KotsAppCustomHostname"
            },
            "x-go-name": "Registry"
          },
          "replicatedApp": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/KotsAppCustomHostname"
            },
            "x-go-name": "ReplicatedApp"
          }
        }
      }
    },
    "listCustomerAllowedDomainsResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "allowedDomains": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/AllowedDomain"
            },
            "x-go-name": "AllowedDomains"
          }
        }
      }
    },
    "listCustomerInstancesResponse": {
      "description": "ListCustomerInstancesResponse contains the JSON instances list",
      "schema": {
        "type": "object",
        "properties": {
          "instances": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/CustomerInstance"
            },
            "x-go-name": "Instances"
          }
        }
      }
    },
    "listCustomersResponse": {
      "description": "ListCustomersResponse contains the JSON customers list",
      "schema": {
        "type": "object",
        "properties": {
          "customers": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Customer"
            },
            "x-go-name": "Customers"
          },
          "totalCustomers": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCustomers"
          }
        }
      }
    },
    "listEnterprisePortalCustomerUsersResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          },
          "users": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/CustomerUser"
            },
            "x-go-name": "Users"
          }
        }
      }
    },
    "listEnterprisePortalEmailHistoryResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "emails": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/EmailHistoryItem"
            },
            "x-go-name": "Emails"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "listEnterprisePortalInstancesResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "instances": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Instance"
            },
            "x-go-name": "Instances"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "listEnterprisePortalServiceAccountsResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "service_accounts": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ServiceAccount"
            },
            "x-go-name": "ServiceAccounts"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "listExternalRegistriesResponse": {
      "description": "ListExternalRegistriesResponse contains the JSON external registries list",
      "schema": {
        "type": "object",
        "properties": {
          "available_registries": {
            "description": "Available registries (only present when app_id query parameter is provided)",
            "type": "array",
            "items": {
              "$ref": "#/definitions/ExternalRegistry"
            },
            "x-go-name": "AvailableRegistries"
          },
          "external_registries": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ExternalRegistry"
            },
            "x-go-name": "ExternalRegistries"
          },
          "unavailable_registries": {
            "description": "Unavailable registries (only present when app_id query parameter is provided)",
            "type": "array",
            "items": {
              "$ref": "#/definitions/ExternalRegistry"
            },
            "x-go-name": "UnavailableRegistries"
          }
        }
      }
    },
    "listFailedLoginAttemptsResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "attempts": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/FailedLoginAttempt"
            },
            "x-go-name": "Attempts"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "listInstallAttemptsResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "install_attempts": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/InstallAttempt"
            },
            "x-go-name": "InstallAttempts"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Total"
          }
        }
      }
    },
    "listLicenseFieldsResponse": {
      "description": "ListLicenseFieldsResponse contains the list of license fields",
      "schema": {
        "type": "array",
        "items": {
          "$ref": "#/definitions/EntitlementField"
        }
      }
    },
    "listNetworksResponse": {
      "description": "ListNetworksResponse contains the response to list networks",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "networks": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Network"
            },
            "x-go-name": "Networks"
          },
          "totalNetworks": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalNetworks"
          }
        }
      }
    },
    "listNotificationEventsResponse": {
      "description": "ListNotificationEventsResponse contains the JSON response for listing notification events.",
      "schema": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/TeamNotificationEventWithAttempts"
            },
            "x-go-name": "Events"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCount"
          }
        }
      }
    },
    "listNotificationSubscriptionEvents": {
      "description": "ListNotificationSubscriptionEventsResponse contains the notification events",
      "schema": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/NotificationEventWithAttempts"
            },
            "x-go-name": "Events"
          }
        }
      }
    },
    "listNotificationSubscriptionMutes": {
      "description": "ListNotificationSubscriptionMutesResponse contains active instance mutes for a notification subscription",
      "schema": {
        "$ref": "#/definitions/listInstanceMutesResponse"
      }
    },
    "listNotificationSubscriptions": {
      "description": "ListNotificationSubscriptionsResponse contains a list of notification subscriptions",
      "schema": {
        "type": "object",
        "properties": {
          "subscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/NotificationSubscription"
            },
            "x-go-name": "Subscriptions"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCount"
          }
        }
      }
    },
    "listPendingTrialsResponse": {
      "description": "ListPendingTrialsResponse contains the JSON pending trials list",
      "schema": {
        "type": "object",
        "properties": {
          "pendingTrials": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/TrialSignupVerification"
            },
            "x-go-name": "PendingTrials"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCount"
          }
        }
      }
    },
    "listPoliciesResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "policies": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/Policy"
            },
            "x-go-name": "Policies"
          }
        }
      }
    },
    "listReleasesResponse": {
      "description": "ListReleasesResponse contains the JSON releases list",
      "schema": {
        "type": "object",
        "properties": {
          "approximateTotalCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "ApproximateTotalCount"
          },
          "releases": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/AppRelease"
            },
            "x-go-name": "Releases"
          }
        }
      }
    },
    "listServiceAccountsResponse": {
      "description": "",
      "schema": {
        "type": "array",
        "items": {
          "$ref": "#/definitions/ServiceAccount"
        }
      }
    },
    "listSupportBundles": {
      "description": "ListSupportBundlesResponse contains the list support bundles response properties",
      "schema": {
        "type": "object",
        "properties": {
          "bundles": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/SupportBundle"
            },
            "x-go-name": "Bundles"
          },
          "totalCount": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalCount"
          }
        }
      }
    },
    "listTeamMembersResponse": {
      "description": "ListTeamMembersResponse contains the JSON team members list",
      "schema": {
        "type": "object",
        "properties": {
          "members": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VendorTeamMember"
            },
            "x-go-name": "Members"
          }
        }
      }
    },
    "listUpdateAttemptsResponse": {
      "description": "ListUpdateAttemptsResponse is the response body for listing update attempts",
      "schema": {
        "type": "object",
        "properties": {
          "update_attempts": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/UpdateAttempt"
            },
            "x-go-name": "UpdateAttempts"
          }
        }
      }
    },
    "listUserApiTokensResponse": {
      "description": "",
      "schema": {
        "type": "array",
        "items": {
          "$ref": "#/definitions/ApiToken"
        }
      }
    },
    "listVMPortsResponse": {
      "description": "ListVMPortsResponse contains the response to a list vm [prts] request",
      "schema": {
        "type": "object",
        "properties": {
          "addons": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VMAddon"
            },
            "x-go-name": "Addons"
          },
          "ports": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VMPort"
            },
            "x-go-name": "Ports"
          }
        }
      }
    },
    "listVMVersionsResponse": {
      "description": "ListVMVersionsResponse contains the response to list clusters",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "vm-versions": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VMSupportedDistributionAndVersions"
            },
            "x-go-name": "VMs"
          }
        }
      }
    },
    "listVMsResponse": {
      "description": "ListVMsResponse contains the response to list vms",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "totalVMs": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalVMs"
          },
          "vms": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/VM"
            },
            "x-go-name": "VMs"
          }
        }
      }
    },
    "patchInstallOptionsResponse": {
      "description": "PatchInstallOptionsResponse contains the response from patching install options.",
      "schema": {
        "type": "object",
        "properties": {
          "install_options": {
            "$ref": "#/definitions/CustomerInstallOptions"
          },
          "instructions": {
            "$ref": "#/definitions/InstallInstructionsResponse"
          },
          "service_account": {
            "$ref": "#/definitions/ServiceAccount"
          }
        }
      }
    },
    "postAirgapPasswordResponse": {
      "description": "PostAirgapPasswordResponse contains the returned password",
      "schema": {
        "type": "object",
        "required": [
          "password"
        ],
        "properties": {
          "password": {
            "type": "string",
            "x-go-name": "Password"
          }
        }
      }
    },
    "promoteReleaseErrorResponse": {
      "description": "PromoteReleaseErrorResponse contains the release properties",
      "schema": {
        "type": "object",
        "properties": {
          "channel": {
            "$ref": "#/definitions/Channel"
          },
          "lintExpressions": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/LintExpression"
            },
            "x-go-name": "LintExpressions"
          },
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "promoteReleaseResponse": {
      "description": "PromoteReleaseResponse contains the release properties.\n\nAirgapBuilds field semantics:\nBody.AirgapBuilds (top-level) — one entry per channel JUST promoted to by\nTHIS call. Populated for every promoted channel, not just auto-build ones,\nbecause the airgap-builder runs metadata generation for every promoted\nchannel-release and that step can fail. Each entry's FullAirgapBuild bool\ndistinguishes channels that produce a full bundle (auto-build on) from\nthose that only get metadata generation (auto-build off). CLI / GitHub\nAction waiters should poll these.\nBody.Release.AirgapBuilds (nested) — the FULL history of channel-releases\nfor this release sequence (including prior re-promotes to the same channel).\nUse for inspect / history views, not for waiting on the current promote.",
      "schema": {
        "type": "object",
        "properties": {
          "airgapBuilds": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/AirgapBuildSummary"
            },
            "x-go-name": "AirgapBuilds"
          },
          "release": {
            "$ref": "#/definitions/AppRelease"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "x-go-name": "Warnings"
          }
        }
      }
    },
    "resendVerificationEmail": {
      "description": "ResendVerificationEmailResponse indicates success or failure",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          },
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "responseErrBadRequest": {
      "description": "Returned on bad input",
      "schema": {
        "type": "object",
        "properties": {
          "error_code": {
            "description": "Error code if available",
            "type": "string",
            "x-go-name": "ErrorCode"
          },
          "message": {
            "description": "Error message text if available",
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "responseErrForbidden": {
      "description": "Returned if the caller does not have the needed permission",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "message": {
                "type": "string",
                "x-go-name": "Message"
              },
              "messageCode": {
                "type": "string",
                "x-go-name": "MessageCode"
              }
            },
            "x-go-name": "Error"
          }
        }
      }
    },
    "responseErrNotFound": {
      "description": "Returned on resource not found",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "responseErrTooManyRequests": {
      "description": "Return if the caller is being rate limited"
    },
    "responseErrUnauthorized": {
      "description": "Return if the caller is not authorized",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "responseNoContent": {
      "description": "On success, no payload returned"
    },
    "responseOk": {
      "description": "On success"
    },
    "searchNotificationEventTypesResponse": {
      "description": "",
      "schema": {
        "$ref": "#/definitions/SearchNotificationEventTypesResponse"
      }
    },
    "searchTeamCustomersResponse": {
      "description": "SearchTeamCustomersResponse contains the list of licenses",
      "schema": {
        "type": "object",
        "properties": {
          "customers": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/ESCustomer"
            },
            "x-go-name": "Customers"
          },
          "query": {
            "type": "string",
            "x-go-name": "Query"
          },
          "total_hits": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "TotalHits"
          }
        }
      }
    },
    "setBuiltinLicenseFieldOverrideResponse": {
      "description": "SetBuiltinLicenseFieldOverrideResponse contains the response of the builtin license field override",
      "schema": {
        "type": "object",
        "properties": {
          "builtin_license_field": {
            "$ref": "#/definitions/BuiltInDefaultLicenseField"
          }
        }
      }
    },
    "setDefaultHostnameResponse": {
      "description": "SetDefaultHostnameResponse contains whether or not the request was successful",
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "setSupportBundleUploaded": {
      "description": "SetSupportBundleUploadedResponse contains the get support bundle command response properties",
      "schema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "x-go-name": "Slug"
          }
        }
      }
    },
    "shareSupportBundle": {
      "description": "ShareSupportBundleResponse contains the share support bundle command response properties",
      "schema": {
        "type": "object"
      }
    },
    "testExternalRegistryResponse": {
      "description": "TestExternalRegistriesResponse contains the JSON external registries test",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "Status"
          }
        }
      }
    },
    "testReleaseErrorResponse": {
      "description": "TestReleaseErrorResponse contains the release properties",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "testReleaseResponse": {
      "description": "TestReleaseResponse contains the release properties",
      "schema": {
        "type": "object"
      }
    },
    "testWebhookResponse": {
      "description": "",
      "schema": {
        "$ref": "#/definitions/TestWebhookResponseBody"
      }
    },
    "triggerCustomerInstanceScan": {
      "description": "TriggerCustomerInstanceScanResponse contains the response for triggering a scan",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          },
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "unDemoteChannelRelease": {
      "description": "UnDemoteChannelReleaseResponse contains the channel release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/KotsChannelRelease"
          }
        }
      }
    },
    "unarchiveCustomerInstanceResponse": {
      "description": "UnarchiveCustomerInstanceResponse contains the response to unarchive an instance",
      "schema": {
        "type": "object",
        "properties": {
          "customerInstance": {
            "$ref": "#/definitions/CustomerInstance"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "unsetDefaultHostnameResponse": {
      "description": "UnsetDefaultHostnameResponse contains whether or not the request was successful",
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    },
    "updateChannelRelease": {
      "description": "UpdateChannelReleaseResponse contains the release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/KotsChannelRelease"
          }
        }
      }
    },
    "updateClusterNodegroupErrorResponse": {
      "description": "updateClusterNodegroupErrorResponse contains error information",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          },
          "validationError": {
            "$ref": "#/definitions/ValidationError"
          }
        }
      }
    },
    "updateClusterNodegroupResponse": {
      "description": "UpdateClusterNodegroupResponse contains the response to update a cluster nodegroup",
      "schema": {
        "type": "object",
        "properties": {
          "cluster": {
            "$ref": "#/definitions/Cluster"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "updateClusterTTLErrorResponse": {
      "description": "UpdateClusterTTLErrorResponse contains error information",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "updateClusterTTLResponse": {
      "description": "UpdateClusterTTLResponse contains the response to update a cluster ttl",
      "schema": {
        "type": "object",
        "properties": {
          "cluster": {
            "$ref": "#/definitions/Cluster"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "updateClusterTagsResponse": {
      "description": "UpdateClusterTagsResponse contains the response to update a cluster tags",
      "schema": {
        "type": "object",
        "properties": {
          "cluster": {
            "$ref": "#/definitions/Cluster"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "updateCustomInstructionsResponse": {
      "description": "UpdateCustomInstructionsResponse contains the response from updating custom instructions.",
      "schema": {
        "type": "object",
        "properties": {
          "instructions": {
            "$ref": "#/definitions/CustomInstructions"
          }
        }
      }
    },
    "updateCustomerInstanceTagsResponse": {
      "description": "UpdateCustomerInstanceTagsResponse contains the response to update a instance tags",
      "schema": {
        "type": "object",
        "properties": {
          "customerInstance": {
            "$ref": "#/definitions/CustomerInstance"
          },
          "error": {
            "type": "string",
            "x-go-name": "Error"
          }
        }
      }
    },
    "updateDefaultAppResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "default_app_id": {
            "type": "string",
            "x-go-name": "DefaultAppID"
          },
          "id": {
            "type": "string",
            "x-go-name": "ID"
          }
        }
      }
    },
    "updateDocumentationResponse": {
      "description": "",
      "schema": {
        "type": "object"
      }
    },
    "updateEnterprisePortalAccessResponse": {
      "description": "UpdateEnterprisePortalAccessResponse represents the access settings response",
      "schema": {
        "type": "object",
        "properties": {
          "auto_invite_to_ep_on_create": {
            "type": "boolean",
            "x-go-name": "AutoInviteToEpOnCreate"
          },
          "download_portal_disabled": {
            "type": "boolean",
            "x-go-name": "DownloadPortalDisabled"
          }
        }
      }
    },
    "updateEnterprisePortalSettingsResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/definitions/EnterprisePortalSettings"
          }
        }
      }
    },
    "updateExternalRegistryResponse": {
      "description": "UpdateExternalRegistryResponse represents an updated external registry.",
      "schema": {
        "type": "object",
        "properties": {
          "external_registry": {
            "$ref": "#/definitions/ExternalRegistry"
          }
        }
      }
    },
    "updateNetworkErrorResponse": {
      "description": "UpdateNetworkErrorResponse contains error information",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "updateNetworkResponse": {
      "description": "UpdateNetworkResponse contains the response to update a network",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "network": {
            "$ref": "#/definitions/Network"
          }
        }
      }
    },
    "updateNotificationSubscription": {
      "description": "UpdateNotificationSubscriptionResponse contains the updated notification subscription",
      "schema": {
        "$ref": "#/definitions/NotificationSubscription"
      }
    },
    "updatePolicyResponse": {
      "description": "",
      "schema": {
        "type": "object",
        "properties": {
          "policy": {
            "$ref": "#/definitions/Policy"
          }
        }
      }
    },
    "updateRelease": {
      "description": "UpdateReleaseResponse contains the release properties",
      "schema": {
        "type": "object",
        "properties": {
          "release": {
            "$ref": "#/definitions/AppRelease"
          }
        }
      }
    },
    "updateReleaseError": {
      "description": "UpdateReleaseErrorResponse contains the release properties",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "updateSupportBundleName": {
      "description": "UpdateSupportBundleNameResponse contains the update support bundle name response properties",
      "schema": {
        "type": "object"
      }
    },
    "updateVMTTLErrorResponse": {
      "description": "UpdateVMTTLErrorResponse contains error information",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          }
        }
      }
    },
    "updateVMTTLResponse": {
      "description": "UpdateVMTTLResponse contains the response to update a VM ttl",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "vm": {
            "$ref": "#/definitions/VM"
          }
        }
      }
    },
    "updateVMTagsResponse": {
      "description": "UpdateVMTagsResponse contains the response to update a vm tags",
      "schema": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "x-go-name": "Error"
          },
          "vm": {
            "$ref": "#/definitions/VM"
          }
        }
      }
    },
    "upgradeClusterResponse": {
      "description": "UpgradeClusterResponse contains the response to upgrade a cluster",
      "schema": {
        "type": "object",
        "properties": {
          "cluster": {
            "$ref": "#/definitions/Cluster"
          }
        }
      }
    },
    "upgradeClusterValidationErrorResponse": {
      "description": "UpgradeClusterValidationErrorResponse contains a bad request response when upgrading a cluster",
      "schema": {
        "$ref": "#/definitions/ValidationError"
      }
    },
    "verifyEmail": {
      "description": "VerifyEmailResponse indicates success or failure",
      "schema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          },
          "success": {
            "type": "boolean",
            "x-go-name": "Success"
          }
        }
      }
    }
  },
  "securityDefinitions": {
    "api_key": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header"
    }
  }
}
