---
title: "Promote a release."
method: POST
path: "/app/{app_id}/release/{sequence}/promote"
tags: ["releases"]
---

# Promote a release.

`POST /app/{app_id}/release/{sequence}/promote`

Promote a specific release to one or more channels, making it available for deployment.
Supports setting release notes, version labels, and marking releases as required.

Required RBAC Policy: kots/app/[:appid]/channel/[:channelid]/promote

## Path parameters

- `app_id` string, required
- `sequence` integer, required

## Request body

- object
  - `channelIds` string[]
  - `ignoreWarnings` boolean
  - `isRequired` boolean
  - `notifyUsers` boolean — Sends email notifications to all Enterprise Portal users on the target channel
  - `omitDetailsInResponse` boolean — Omits channels, charts, and compatibilityResults details in the response body
  - `releaseNotes` string
  - `releaseNotesGzip` integer[]
  - `versionLabel` string

## Response `200`

PromoteReleaseResponse contains the release properties

- object
  - `release` AppRelease
    - `appId` string
    - `channels` Channel[]
      - `adoptionRate` CustomerAdoption[]
        - `channelId` string
        - `count` integer
        - `percent` number, double
        - `releaseSequence` integer
        - `semver` string
        - `totalOnChannel` integer
      - `airgapDiffBundlesEnabled` boolean
      - `airgapDockerRegistryFormatEnabled` boolean
      - `appId` string
      - `appName` string
      - `appSlug` string
      - `buildAirgapAutomatically` boolean
      - `channelIcon` string
      - `channelSequence` integer
      - `channelSlug` string
      - `chartReleases` HelmChart[] — ChartReleases is a map of chart name -> []string of version labels
        - `error` string
        - `hasPreflightSpec` boolean
        - `name` string
        - `version` string
        - `weight` integer
      - `created` string, date-time
      - `currentVersion` string
      - `customHostnameOverrides` CustomHostnameOverrides
        - `downloadPortal` CustomHostnameOverride
          - `hostname` string
        - `proxy` CustomHostnameOverride
          - `hostname` string
        - `registry` CustomHostnameOverride
          - `hostname` string
        - `replicatedApp` CustomHostnameOverride
          - `hostname` string
      - `customers` TotalActiveInactiveCustomers
        - `activeCustomers` integer
        - `inactiveCustomers` integer
        - `totalCustomers` integer
      - `description` string
      - `embeddedClusterInstallCommand` string
      - `enterprisePartnerChannelID` string
      - `existingClusterInstallCommand` string
      - `extraLintRules` ExtraLintRules[]
      - `gitHubRef` GitHubRef
      - `hasKurlInstaller` boolean — swager:ignore
      - `id` string
      - `isArchived` boolean
      - `isDefault` boolean
      - `isHelmOnly` boolean
      - `latestChannelSequence` integer
      - `name` string
      - `numActiveInstances` integer
      - `numReleases` integer
      - `releaseNotes` string
      - `releaseSequence` integer
      - `releases` KotsChannelRelease[]
        - `airgapBuildError` string
        - `airgapBuildStatus` string
        - `airgapBundleImages` string[]
        - `channelIcon` string
        - `channelId` string
        - `channelName` string
        - `channelSequence` integer
        - `created` string, date-time
        - `createdBy` Actor
          - `description` string
          - `id` string
          - `link` string
          - `timestamp` string, date-time
          - `type` string
        - `customResourceError` string
        - `customResourceWarnings` string[]
        - `demotedAt` string, date-time
        - `embeddedClusterVersion` string
        - `hasECInstaller` boolean
        - `hasKurlInstaller` boolean
        - `imageSecurityInfo` ImageVulnCounts[]
          - `counts` VulnCounts
            - `critical` integer
            - `high` integer
            - `low` integer
            - `medium` integer
            - `total` integer
          - `digest` string
          - `digest_first_seen_at` string
          - `image_size_bytes` integer
          - `input` string
          - `installation_phase` string — InstallationPhase indicates the Embedded Cluster phase for the image ("", "online", or "airgap"). Application images have the phase "". Infrastructure images used for Embedded Cluster in both online and airgap have the phase "online" or "airgap". Infrastructure images used for Embedded Cluster only in airgap have the phase "airgap".
          - `last_scanned_at` string
          - `not_found` boolean
        - `imageSecuritySums` object
        - `installationTypes` InstallationTypes
          - `embeddedCluster` InstallerTypeEmbeddedCluster
            - `proxyRegistryDomain` string
            - `replicatedAppDomain` string
            - `replicatedRegistryDomain` string
            - `version` string
          - `helm` InstallerTypeHelm
          - `kots` InstallerTypeKots
            - `minKotsVersion` string
            - `targetKotsVersion` string
          - `kotsConfig` InstallerTypeKotsConfig
            - `apiVersion` string
          - `kurl` InstallationTypeKurl
            - `installerVersion` string
          - `preflight` InstallerTypePreflight
            - `apiVersion` string
          - `replicatedSDK` InstallerTypeReplicatedSDK
            - `sdkVersion` string
          - `supportBundle` InstallerTypeSupportBundle
            - `apiVersion` string
        - `isDemoted` boolean
        - `isRequired` boolean
        - `kurlInstallerID` string
        - `lintResult` LintResult
          - `isLintingComplete` boolean
          - `lintExpressions` LintExpression[]
            - `message` string
            - `path` string
            - `rule` string
            - `type` string
        - `proxyRegistryDomain` string
        - `registrySecret` string
        - `releaseNotes` string
        - `releasedAt` string, date-time
        - `replicatedRegistryDomain` string
        - `semver` string
        - `sequence` integer
        - `updated` string, date-time
        - `updatedBy` Actor
          - `description` string
          - `id` string
          - `link` string
          - `timestamp` string, date-time
          - `type` string
      - `replicatedRegistryDomain` string
      - `semverRequired` boolean
      - `semverWarning` string
      - `targetKotsVersion` string
      - `updated` string, date-time
    - `charts` Chart[]
      - `error` string
      - `name` string
      - `status` string
      - `updatedAt` string, date-time
      - `version` string
    - `compatibilityResults` CompatibilityResult[]
      - `distribution` string
      - `failureAt` string, date-time
      - `failureNotes` string
      - `successAt` string, date-time
      - `successNotes` string
      - `version` string
    - `created` string, date-time
    - `createdBy` Actor
      - `description` string
      - `id` string
      - `link` string
      - `timestamp` string, date-time
      - `type` string
    - `hasKurlInstaller` boolean
    - `installationTypes` InstallationTypes
      - `embeddedCluster` InstallerTypeEmbeddedCluster
        - `proxyRegistryDomain` string
        - `replicatedAppDomain` string
        - `replicatedRegistryDomain` string
        - `version` string
      - `helm` InstallerTypeHelm
      - `kots` InstallerTypeKots
        - `minKotsVersion` string
        - `targetKotsVersion` string
      - `kotsConfig` InstallerTypeKotsConfig
        - `apiVersion` string
      - `kurl` InstallationTypeKurl
        - `installerVersion` string
      - `preflight` InstallerTypePreflight
        - `apiVersion` string
      - `replicatedSDK` InstallerTypeReplicatedSDK
        - `sdkVersion` string
      - `supportBundle` InstallerTypeSupportBundle
        - `apiVersion` string
    - `isArchived` boolean
    - `isHelmOnly` boolean
    - `isReleaseNotEditable` boolean
    - `lintResult` LintResult
      - `isLintingComplete` boolean
      - `lintExpressions` LintExpression[]
        - `message` string
        - `path` string
        - `rule` string
        - `type` string
    - `rawSpec` string
    - `releaseNotes` string
    - `sequence` integer
    - `spec` string
    - `updated` string, date-time
    - `updatedBy` Actor
      - `description` string
      - `id` string
      - `link` string
      - `timestamp` string, date-time
      - `type` string
    - `userAgent` string

## Other responses

- `400` — PromoteReleaseErrorResponse contains the release properties
- `401` — Return if the caller is not authorized
- `403` — Returned if the caller does not have the needed permission
- `404` — Returned on resource not found

---

[API](https://skmtc.net/replicated/apis/vendor-api-v3-2.md) · [All operations](https://skmtc.net/replicated/apis/vendor-api-v3-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/replicated/vendor-api-v3-2/revisions/6fcf9e54aba4/schema)
