---
updatedAt: 2026-05-27T20:00:17.000Z
agentTools:
  projectIndex: https://replicated-vendor-api.readme.io/llms.txt
---

# Demote a channel release.

Demote a specific release from a channel, making it unavailable for new installations or upgrades via that channel.
Demoted releases can be un-demoted if needed.

Required RBAC Policy: kots/app/[:appid]/channel/[:channelid]/release/[:releasesequence]/demote

# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "info": {
    "description": "List, create, update, archive customers and fetch customer licenses",
    "title": "Vendor API V3",
    "contact": {
      "name": "Replicated, Inc.",
      "url": "http://www.replicated.com/",
      "email": "info@replicated.com"
    },
    "version": "3.0.0"
  },
  "paths": {
    "/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",
        "tags": [
          "releases"
        ],
        "summary": "Demote a channel release.",
        "operationId": "demoteChannelRelease",
        "parameters": [
          {
            "x-go-name": "AppID",
            "description": "App identifier",
            "name": "app_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "x-go-name": "ChannelID",
            "description": "Channel identifier",
            "name": "channel_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "x-go-name": "Sequence",
            "description": "Release identifier",
            "name": "sequence",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "Demote channel release parameters."
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/demoteChannelRelease"
          },
          "400": {
            "$ref": "#/components/responses/responseErrBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/responseErrUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/responseErrForbidden"
          },
          "404": {
            "$ref": "#/components/responses/responseErrNotFound"
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.replicated.com/vendor/v3"
    }
  ],
  "components": {
    "responses": {
      "demoteChannelRelease": {
        "description": "DemoteChannelReleaseResponse contains the channel release properties",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "release": {
                  "$ref": "#/components/schemas/KotsChannelRelease"
                }
              }
            }
          }
        }
      },
      "responseErrBadRequest": {
        "description": "Returned on bad input",
        "content": {
          "application/json": {
            "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",
        "content": {
          "application/json": {
            "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",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "x-go-name": "Message"
                }
              }
            }
          }
        }
      },
      "responseErrUnauthorized": {
        "description": "Return if the caller is not authorized",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "x-go-name": "Message"
                }
              }
            }
          }
        }
      }
    },
    "securitySchemes": {
      "api_key": {
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      }
    },
    "schemas": {
      "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"
      },
      "HelmInstallabilityIssue": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "x-go-name": "Message"
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/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"
      },
      "ImageVulnCounts": {
        "type": "object",
        "properties": {
          "counts": {
            "$ref": "#/components/schemas/VulnCounts"
          },
          "digest": {
            "type": "string",
            "x-go-name": "Digest"
          },
          "digest_first_seen_at": {
            "type": "string",
            "x-go-name": "DigestFirstSeenAt"
          },
          "fixed_counts": {
            "$ref": "#/components/schemas/VulnCounts"
          },
          "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"
      },
      "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": "#/components/schemas/InstallerTypeEmbeddedCluster"
          },
          "helm": {
            "$ref": "#/components/schemas/InstallerTypeHelm"
          },
          "helmInstallabilityIssue": {
            "$ref": "#/components/schemas/HelmInstallabilityIssue"
          },
          "kots": {
            "$ref": "#/components/schemas/InstallerTypeKots"
          },
          "kotsConfig": {
            "$ref": "#/components/schemas/InstallerTypeKotsConfig"
          },
          "kurl": {
            "$ref": "#/components/schemas/InstallationTypeKurl"
          },
          "preflight": {
            "$ref": "#/components/schemas/InstallerTypePreflight"
          },
          "replicatedSDK": {
            "$ref": "#/components/schemas/InstallerTypeReplicatedSDK"
          },
          "supportBundle": {
            "$ref": "#/components/schemas/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"
      },
      "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": "#/components/schemas/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"
          },
          "fullAirgapBuild": {
            "description": "FullAirgapBuild is true when the channel is set to produce a full (installable)\nairgap bundle or one already exists: auto-build is enabled (or a build was\nforced), or a checksum/built/warn status is present. A failed or still-building\nauto-build is still true. It lets the client annotate the version selector\nidentically to the Enterprise Portal.",
            "type": "boolean",
            "x-go-name": "FullAirgapBuild"
          },
          "hasECInstaller": {
            "type": "boolean",
            "x-go-name": "HasECInstaller"
          },
          "hasKurlInstaller": {
            "type": "boolean",
            "x-go-name": "HasKurlInstaller"
          },
          "imageSecurityInfo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImageVulnCounts"
            },
            "x-go-name": "ImageSecurityInfo"
          },
          "imageSecuritySums": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ImageVulnCounts"
            },
            "x-go-name": "ImageSecuritySums"
          },
          "installationTypes": {
            "$ref": "#/components/schemas/InstallationTypes"
          },
          "isDemoted": {
            "type": "boolean",
            "x-go-name": "IsDemoted"
          },
          "isRequired": {
            "type": "boolean",
            "x-go-name": "IsRequired"
          },
          "kurlInstallerID": {
            "type": "string",
            "x-go-name": "KurlInstallerID"
          },
          "lintResult": {
            "$ref": "#/components/schemas/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": "#/components/schemas/Actor"
          }
        },
        "x-go-package": "github.com/replicatedhq/vandoor/pkg/kots/channel/types"
      },
      "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"
          },
          "lintError": {
            "type": "string",
            "x-go-name": "LintError"
          },
          "lintExpressions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LintExpression"
            },
            "x-go-name": "LintExpressions"
          }
        },
        "x-go-package": "github.com/replicatedhq/vandoor/pkg/lint"
      },
      "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"
      }
    }
  }
}
```