Skip to content

List clusters

GET
/api/v1/organizations/{orgID}/clusters
curl --request GET \
--url 'https://api.aetherplatform.cloud/api/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/clusters?limit=50&status=provisioning' \
--header 'Authorization: Bearer <token>'
orgID
required
string format: uuid

Organization UUID.

cursor
string format: uuid

Opaque cursor (a UUID) for pagination; pass back the prior page’s next_cursor.

limit
integer
default: 50 >= 1 <= 100

Maximum number of items per page (1-100, default 50).

status
string
Allowed values: provisioning running upgrading degraded deleting failed

Filter clusters by status.

A page of clusters.

Media typeapplication/json
object
items
required
Array<object>
object
id
required
string format: uuid
org_id
required
string format: uuid
name
required
string
region
required
string
k8s_version
required
string
status
required
string
Allowed values: provisioning running upgrading degraded deleting failed
status_message
string | null
endpoint

The apiserver URL aether-operator reports for the cluster: the private control-plane proxy address, or the public hostname when public_endpoint is true (which it is on every supported cluster — a cluster without the mandatory public endpoint is an implementation gap, tracked internally as I-14, see public_endpoint). Observed, not derived — null (and omitted from the response) until the cluster has been provisioned far enough for the operator to report one.

string | null
observed_kubernetes_version

The version aether-operator reports once a rollout settles.

string | null
capi_cluster_name
string | null
keycloak_realm
string | null
harbor_project
string | null
ceph_pool
string | null
lb_subnet
string | null
worker_subnet

The per-cluster worker /24 (read-only; allocated at create time).

string | null
public_endpoint

Whether this cluster’s apiserver is exposed on a public IPv4 and DNS name in addition to the private control-plane proxy path. Every cluster is required to have one: the public API endpoint is mandatory, billed at the published monthly rate for public_ip (€4 at the time of writing; the current rate is shown in the portal and, once published, on the pricing page) as a flat month with no proration, locked the first time the billing sampler observes the address — one line per cluster per month, see SubscriptionLine.kind public_ip. Set at create time and immutable afterwards; sending a different value to updateCluster is rejected with 422 public_endpoint/immutable. A cluster reading false is an implementation gap (tracked internally as I-14), not a supported configuration: the API still accepts public_endpoint: false at create time, and the resulting cluster has no public address, no endpoint charge and no supported access path. Its apiserver answers only on the cluster’s private network — its own workers and the platform — and in production there is no supported way to reach it from a laptop or a CI pipeline; the kubectl proxy through the platform API (proxy-kubeconfig, not exposed in this reference) is a preview that is switched off in production and, where enabled, reaches private and public clusters alike. Private-network connectivity, which would make the public endpoint optional, is a future capability.

boolean
plan_slug

The package this cluster is billed from, as chosen at create time: one of the package slugs in the catalogue (currently dev, starter, growth, scale; a retired slug can still appear on an existing cluster). null (and omitted from the response) means the cluster is billed per resource (“custom”). Immutable — no endpoint changes it.

string | null
created_at
required
string format: date-time
updated_at
required
string format: date-time
next_cursor
string | null
Example
{
"items": [
{
"status": "provisioning"
}
]
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}