---
title: "Get a customer."
method: GET
path: "/customer/{customer_id}"
tags: ["customers"]
---

# Get a customer.

`GET /customer/{customer_id}`

## Request

- Base URL: `https://api.replicated.com/vendor/v3`
- URL: `https://api.replicated.com/vendor/v3/customer/{customer_id}`
- Auth: API key in header `Authorization`

Retrieve the details of a specific customer, including metadata, license, and instance information.
Optionally, channel details can be excluded from the response.

Required RBAC Policy: kots/app/[:appid]/license/[:licenseid]/read

## Path parameters

- `customer_id` string, required

## Response `200`

GetCustomerResponse represents a customer.

- object
  - `customer` Customer
    - `actions` CustomerActions
      - `shipApply` string
      - `shipApplyDocker` string
      - `shipInitCloud` string
      - `shipInitHomebrew` string
    - `activeInstances` InstancePreview
      - `instances` CustomerInstance[]
        - `active` boolean
        - `appSlug` string
        - `appStatus` string
        - `client` string
        - `cloud` string
        - `clusterId` string
        - `createdAt` string, date-time
        - `embeddedClusterVersion` string
        - `instanceId` string
        - `isAirgap` boolean
        - `isArchived` boolean
        - `isDummyInstance` boolean
        - `isEmbeddedCluster` boolean
        - `isKurl` boolean
        - `k8sVersion` string
        - `kotsVersion` string
        - `kurlNodeCountReady` integer
        - `kurlNodeCountTotal` integer
        - `lastActive` string, date-time
        - `licenseId` string
        - `replicatedSdkVersion` string
        - `securitySummary` InstanceSecuritySummary: InstanceSecuritySummary represents aggregated security information for an instance
          - `fixableVulnerabilityCounts` VulnCounts
            - `critical` integer
            - `high` integer
            - `low` integer
            - `medium` integer
            - `total` integer
          - `fixableVulnerabilityCountsCoverage` VulnCountCoverage: VulnCountCoverage describes how many successfully resolved image summaries contributed to a vulnerability count. It lets consumers distinguish a complete zero from a partial or unavailable fixable-count result.
            - `availableImages` integer
            - `totalImages` integer
          - `imageCount` integer
          - `lastScannedAt` string, date-time
          - `vulnerabilityCounts` VulnCounts
            - `critical` integer
            - `high` integer
            - `low` integer
            - `medium` integer
            - `total` integer
        - `serviceAccountId` string
        - `tags` InstanceTag[]
          - `instanceId` string
          - `key` string
          - `origin` string
          - `value` string
        - `versionHistory` CustomerInstanceVersionHistory[]
          - `clusterId` string
          - `downstreamChannelId` string
          - `downstreamReleaseSequence` integer
          - `instanceId` string
          - `intervalLast` string, date-time
          - `intervalStart` string, date-time
          - `nativeHelmCount` integer
          - `replHelmCount` integer
          - `versionLabel` string
      - `moreAvailable` boolean
      - `totalCount` integer
    - `airgap` boolean
    - `airgapDownloadedAt` string, date-time
    - `airgapDownloadedChannelId` string
    - `airgapDownloadedChannelSequence` integer
    - `airgapDownloadedReleaseLabel` string
    - `airgapDownloadedReleaseSequence` integer
    - `appType` string
    - `channels` CustomerChannelWithDetail[]
      - `activeSlug` string
      - `adoptionRate` CustomerAdoption[]
        - `channelId` string
        - `count` integer
        - `percent` number, double
        - `releaseSequence` integer
        - `semver` string
        - `totalOnChannel` integer
        - `versionsFromLatest` integer
      - `airgapDiffBundlesEnabled` boolean
      - `airgapDockerRegistryFormatEnabled` boolean
      - `allowPublishableKey` boolean
      - `appId` string
      - `appName` string
      - `appSlug` string
      - `buildAirgapAutomatically` boolean
      - `channelIcon` string
      - `channelSequence` integer
      - `channelSlug` string
      - `channel_id` string
      - `chartReleases` HelmChart[]: ChartReleases is a map of chart name -> []string of version labels
        - `error` string
        - `hasPreflightSpec` boolean
        - `isKotsInstallerOnly` 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
      - `hasEmbeddedClusterReleases` boolean: Includes any non-demoted EC release, not just the latest release.
      - `hasKurlInstaller` boolean: swager:ignore
      - `hasV1Beta3PreflightSpec` boolean: HasV1Beta3PreflightSpec is true when the channel's current release has an external troubleshoot.sh/v1beta3 Preflight spec (distinct from a chart-embedded one). Only v1beta3 sets it.
      - `id` string
      - `isArchived` boolean
      - `isDefault` boolean
      - `isHelmOnly` boolean
      - `is_default_for_customer` boolean
      - `latestChannelSequence` integer
      - `name` string
      - `numActiveInstances` integer
      - `numReleases` integer
      - `pinned_channel_sequence` 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
        - `fullAirgapBuild` boolean: FullAirgapBuild is true when the channel is set to produce a full (installable) airgap bundle or one already exists: auto-build is enabled (or a build was forced), or a checksum/built/warn status is present. A failed or still-building auto-build is still true. It lets the client annotate the version selector identically to the Enterprise Portal.
        - `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
          - `fixed_counts` VulnCounts
            - `critical` integer
            - `high` integer
            - `low` integer
            - `medium` integer
            - `total` integer
          - `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
          - `sbom_status` string: SBOM status tracking
          - `sbom_status_message` string
          - `sbom_status_updated_at` string
          - `scan_status` string: Scan status tracking
          - `scan_status_message` string
          - `scan_status_updated_at` string
          - `scanned_images` integer: Scan completeness tracking
          - `total_images` integer
        - `imageSecuritySums` object
        - `installationTypes` InstallationTypes
          - `embeddedCluster` InstallerTypeEmbeddedCluster
            - `proxyRegistryDomain` string
            - `replicatedAppDomain` string
            - `replicatedRegistryDomain` string
            - `version` string
          - `helm` InstallerTypeHelm
          - `helmInstallabilityIssue` HelmInstallabilityIssue
            - `message` string
            - `resources` HelmUnavailableResource[]
              - …
          - `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
          - `lintError` string
          - `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
    - `createdAt` string, date-time
    - `createdBy` Actor
      - `description` string
      - `id` string
      - `link` string
      - `timestamp` string, date-time
      - `type` string
    - `customId` string
    - `downloadPortalUrl` string
    - `email` string
    - `enterprise_portal` EnterprisePortalInfo: EnterprisePortalInfo contains Enterprise Portal status and timestamps for a customer
      - `access_granted_at` string, date-time
      - `access_granted_by` string: AccessGrantedBy is the email address of the first user who activated EP access for this customer.
      - `access_method` string
      - `access_milestones` object: AccessMilestones maps license_type → first access info for that license type.
      - `enabled` boolean
      - `first_invite_sent_at` string, date-time
      - `first_software_pulled_asset_type` string: FirstSoftwarePulledAssetType is the type of asset pulled first. Possible values: "helm_chart", "embedded_cluster_bundle", "proxy_image".
      - `first_software_pulled_asset_version` string: FirstSoftwarePulledAssetVersion is the version/tag of the asset pulled first.
      - `first_software_pulled_at` string, date-time: FirstSoftwarePulledAt is the timestamp of the customer's first completed software pull (Helm chart, Embedded Cluster bundle, or proxy registry image). Null for customers whose first pull occurred before this feature was introduced (forward-only tracking).
      - `last_software_pulled_asset_type` string: LastSoftwarePulledAssetType is the type of the most recently pulled asset.
      - `last_software_pulled_asset_version` string: LastSoftwarePulledAssetVersion is the version/tag of the most recently pulled asset.
      - `last_software_pulled_at` string, date-time: LastSoftwarePulledAt is the timestamp of the customer's most recent completed software pull. Overwritten on every pull. Null until the customer's first pull after this feature was introduced.
      - `software_pull_milestones` object: SoftwarePullMilestones maps license_type → first pull info for that license type.
      - `total_active_users` integer
    - `entitlements` EntitlementValue[]
      - `isDefault` boolean
      - `name` string
      - `value` string
    - `esInstances` CustomerESInstance[]
      - `clusterId` string
      - `downstreamChannelId` string
      - `downstreamChannelName` string
      - `downstreamChannelSequence` integer
      - `installedReleaseLabel` string
      - `instanceId` string
      - `tags` InstanceTag[]
        - `instanceId` string
        - `key` string
        - `origin` string
        - `value` string
    - `expiresAt` string, date-time
    - `id` string
    - `inactiveInstances` InstancePreview
      - `instances` CustomerInstance[]
        - `active` boolean
        - `appSlug` string
        - `appStatus` string
        - `client` string
        - `cloud` string
        - `clusterId` string
        - `createdAt` string, date-time
        - `embeddedClusterVersion` string
        - `instanceId` string
        - `isAirgap` boolean
        - `isArchived` boolean
        - `isDummyInstance` boolean
        - `isEmbeddedCluster` boolean
        - `isKurl` boolean
        - `k8sVersion` string
        - `kotsVersion` string
        - `kurlNodeCountReady` integer
        - `kurlNodeCountTotal` integer
        - `lastActive` string, date-time
        - `licenseId` string
        - `replicatedSdkVersion` string
        - `securitySummary` InstanceSecuritySummary: InstanceSecuritySummary represents aggregated security information for an instance
          - `fixableVulnerabilityCounts` VulnCounts
            - `critical` integer
            - `high` integer
            - `low` integer
            - `medium` integer
            - `total` integer
          - `fixableVulnerabilityCountsCoverage` VulnCountCoverage: VulnCountCoverage describes how many successfully resolved image summaries contributed to a vulnerability count. It lets consumers distinguish a complete zero from a partial or unavailable fixable-count result.
            - `availableImages` integer
            - `totalImages` integer
          - `imageCount` integer
          - `lastScannedAt` string, date-time
          - `vulnerabilityCounts` VulnCounts
            - `critical` integer
            - `high` integer
            - `low` integer
            - `medium` integer
            - `total` integer
        - `serviceAccountId` string
        - `tags` InstanceTag[]
          - `instanceId` string
          - `key` string
          - `origin` string
          - `value` string
        - `versionHistory` CustomerInstanceVersionHistory[]
          - `clusterId` string
          - `downstreamChannelId` string
          - `downstreamReleaseSequence` integer
          - `instanceId` string
          - `intervalLast` string, date-time
          - `intervalStart` string, date-time
          - `nativeHelmCount` integer
          - `replHelmCount` integer
          - `versionLabel` string
      - `moreAvailable` boolean
      - `totalCount` integer
    - `installationId` string
    - `installationVersion` string
    - `installedReleaseLabel` string
    - `installedReleaseSequence` integer
    - `instances` CustomerInstance[]
      - `active` boolean
      - `appSlug` string
      - `appStatus` string
      - `client` string
      - `cloud` string
      - `clusterId` string
      - `createdAt` string, date-time
      - `embeddedClusterVersion` string
      - `instanceId` string
      - `isAirgap` boolean
      - `isArchived` boolean
      - `isDummyInstance` boolean
      - `isEmbeddedCluster` boolean
      - `isKurl` boolean
      - `k8sVersion` string
      - `kotsVersion` string
      - `kurlNodeCountReady` integer
      - `kurlNodeCountTotal` integer
      - `lastActive` string, date-time
      - `licenseId` string
      - `replicatedSdkVersion` string
      - `securitySummary` InstanceSecuritySummary: InstanceSecuritySummary represents aggregated security information for an instance
        - `fixableVulnerabilityCounts` VulnCounts
          - `critical` integer
          - `high` integer
          - `low` integer
          - `medium` integer
          - `total` integer
        - `fixableVulnerabilityCountsCoverage` VulnCountCoverage: VulnCountCoverage describes how many successfully resolved image summaries contributed to a vulnerability count. It lets consumers distinguish a complete zero from a partial or unavailable fixable-count result.
          - `availableImages` integer
          - `totalImages` integer
        - `imageCount` integer
        - `lastScannedAt` string, date-time
        - `vulnerabilityCounts` VulnCounts
          - `critical` integer
          - `high` integer
          - `low` integer
          - `medium` integer
          - `total` integer
      - `serviceAccountId` string
      - `tags` InstanceTag[]
        - `instanceId` string
        - `key` string
        - `origin` string
        - `value` string
      - `versionHistory` CustomerInstanceVersionHistory[]
        - `clusterId` string
        - `downstreamChannelId` string
        - `downstreamReleaseSequence` integer
        - `instanceId` string
        - `intervalLast` string, date-time
        - `intervalStart` string, date-time
        - `nativeHelmCount` integer
        - `replHelmCount` integer
        - `versionLabel` string
    - `isArchived` boolean
    - `isDevModeEnabled` boolean
    - `isDisasterRecoverySupported` boolean
    - `isEmbeddedClusterDownloadEnabled` boolean
    - `isEmbeddedClusterMultiNodeEnabled` boolean
    - `isEnterprisePortalEnabled` boolean
    - `isGeoaxisSupported` boolean
    - `isGitopsSupported` boolean
    - `isHelmAirgapEnabled` boolean
    - `isHelmInstallEnabled` boolean
    - `isIdentityServiceSupported` boolean
    - `isInstallerSupportEnabled` boolean
    - `isInstancesLimited` boolean
    - `isKotsInstallEnabled` boolean
    - `isKurlInstallEnabled` boolean
    - `isSecurityCenterEnabled` boolean
    - `isSnapshotSupported` boolean
    - `isSupportBundleUploadEnabled` boolean
    - `lastActive` string, date-time
    - `lowercaseName` string: Lowercase fields for ES customer sorting
    - `name` string
    - `pinnedChannelSequence` integer
    - `samlAllowed` boolean: SAML configuration
    - `shipInstallStatus` ShipInstallStatus
      - `status` string
      - `updatedAt` string, date-time
    - `teamId` string
    - `type` string
    - `updatedAt` string, date-time
    - `updatedBy` Actor
      - `description` string
      - `id` string
      - `link` string
      - `timestamp` string, date-time
      - `type` string

## Other responses

- `400`: Returned on bad input
- `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

## Changes

- **2026-11-03** `a36c6aead22f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/replicated/apis/vendor-api-v3-2/changes/customer/:customer_id/get.md)

---

[API](https://skmtc.dev/replicated/apis/vendor-api-v3-2.md) - [All operations](https://skmtc.dev/replicated/apis/vendor-api-v3-2/llms.txt) - [OpenAPI document](https://skmtc.dev/replicated/apis/vendor-api-v3-2/revisions/a36c6aead22f?raw)
