Replicated customers API
The customers API from Replicated — 11 operation(s) for customers.
The customers API from Replicated — 11 operation(s) for customers.
swagger: '2.0'
info:
description: Manage enterprise portal users, install options, branding, documentation, email templates, and access control.
title: Vendor API V3 apps customers API
contact:
name: Replicated, Inc.
url: http://www.replicated.com/
email: info@replicated.com
version: 3.0.0
host: api.replicated.com
basePath: /vendor/v3
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: customers
paths:
/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.
The license includes all entitlements and metadata required for installation and updates.
Required 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}/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.
Includes customer metadata and instance information.
Required 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}/enterprise-portal/trials:
get:
security:
- api_key: []
description: 'Return a paginated list of trial signups for a specific app,
with email, company, and status information.
Required 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'
/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.
The created customer will be available for management and download.
Required 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
Customers 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.
Required 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.
Optionally, channel details can be excluded from the response.
Required 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.
Supports changing metadata, license type, expiration, entitlements, and feature flags.
Parameters that are not provided are reset to default values.
Required 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
Customers 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.
This action is irreversible. For temporary deactivation, use the archive endpoint instead.
Safety Restriction: Only development customers (type: "dev") can be deleted.
Attempting to delete customers of other types (prod, trial, community, test) will return a 400 Bad Request error.
Required RBAC Policy: kots/license/[:customerid]/delete
and 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.
Only the fields provided in the request body will be updated.
Required 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.
Required 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.
Useful for offboarding or suspending customers without deleting their data.
Required RBAC Policy: kots/license/[:customerid]/archive
and 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.
Useful for re-enabling access for customers who were previously deactivated.
Required RBAC Policy: kots/license/[:customerid]/unarchive
and 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.
Includes metadata and license information for each customer.
Required 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.
Supports pagination, sorting, and filtering by customer attributes.
Required 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.
At least one of the following flags is **required**: `include_inactive`, `include_active`.
At 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.
When provided, this will find the specific customer associated with the license ID or service account token.
This 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.
By default this value will be used to search customers by name.
When value is in the key:value format, it can be used to search specific fields.
The following fields are supported.
`name`: search by customer
# --- truncated at 32 KB (75 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/replicated/refs/heads/main/openapi/replicated-customers-api-openapi.yml