Create cluster API Reference
const url = 'https://api.kupe.cloud/api/v1/tenants/acme/clusters';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"alerts":{},"displayName":"Production Cluster","highAvailability":true,"name":"production","resources":{"cpu":"4","memory":"16Gi","storage":"100Gi"},"version":"1.32"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.kupe.cloud/api/v1/tenants/acme/clusters \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "alerts": {}, "displayName": "Production Cluster", "highAvailability": true, "name": "production", "resources": { "cpu": "4", "memory": "16Gi", "storage": "100Gi" }, "version": "1.32" }'Create a new managed Kubernetes cluster. The cluster is provisioned asynchronously:
poll the GET endpoint and check status.phase until it reaches “Running”.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Tenant name
Request Body
Section titled “ Request Body ”Cluster configuration
object
Alert configuration (free-form object)
object
Deprecated: accepted for backward compatibility and ignored (the cluster name is the identifier).
Example
Production ClusterExample
trueCluster name (DNS-safe) without “–”. At most 52 characters minus the length of the tenant name.
Example
productionResource allocations using Kubernetes quantity format
object
Example
4Example
16GiExample
100GiKubernetes version (optional; when omitted the platform default version is used)
Example
1.32Responses
Section titled “ Responses ”Cluster created
object
object
Deprecated: always equal to name (the CRD has no display name; the cluster name is the identifier).
object
object
object
HAPhase is the consumer-friendly HA rollup. One of pending, ha-healthy, ha-degraded, ha-unavailable. Empty for non-HA clusters.
object
Warnings is an array of structured advisory messages. Always present (empty array when none). Populated today only by CREATE when a non-blocking advisory applies (e.g. HA_K8S_VERSION_RETIRING when HA is enabled on the oldest supported k8s minor). Each entry shares the same shape as a structured error envelope.
object
Example
{ "createdAt": "2026-02-01T14:00:00Z", "displayName": "production", "highAvailability": true, "name": "production", "resourceVersion": "294810", "resources": { "cpu": "4", "memory": "16Gi", "storage": "100Gi" }, "status": { "endpoint": "https://production.acme.clusters.kupe.cloud", "haConfigured": true, "haPhase": "ha-healthy", "kubernetesVersion": "v1.32.3", "phase": "Running" }, "version": "1.32", "warnings": [ { "code": "HA_K8S_VERSION_RETIRING", "field": "spec.highAvailability", "message": "Cluster's Kubernetes version (1.33) is approaching end-of-life on this platform. Plan an upgrade before enabling high availability.", "severity": "warning" } ]}Headers
Section titled “ Headers ”Resource version
Validation error, a name too long for the tenant (code CLUSTER_NAME_TOO_LONG), cluster creation is paused (code creation_paused), or the plan’s cluster limit is reached (code plan_limit_reached)
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Missing or invalid authentication
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Admin access required
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Cluster name already exists, or the tenant is being deleted (code tenant_terminating), suspended (code tenant_suspended) or awaiting a payment method (code payment_setup_required)
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Rate limit exceeded
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}The tenant’s limit is still being set up (a new tenant’s first seconds); retry in a few seconds
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}