Skip to main content
POST
Create a Hetzner cluster

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

authorization
string | null
x-ankra-organisation-id
string | null

Body

application/json
credential_id
string<uuid4>
required
location
string
required
Minimum string length: 1
name
string
required
Minimum string length: 1
bastion_allowed_ips
string[]

IPv4 addresses or CIDRs allowed to reach the bastion's SSH port. The platform's own egress addresses are always allowed in addition, so the platform can never be locked out. Omit (or send an empty list) to keep the bastion reachable from anywhere (key-only SSH, rate-limited). IPv6 and 0.0.0.0/0 entries are refused; at most 64 entries.

Maximum array length: 64
bastion_server_type
string

Omit to let the platform pick the cheapest x86 type the target location can currently provision that meets the role's minimum size.

Minimum string length: 1
cni
enum<string>

Container network. Omitted resolves to cilium on kubeadm (the default distribution) and flannel on k3s.

Available options:
flannel,
calico,
cilium
control_plane_count
integer
default:1
Required range: 1 <= x <= 5
control_plane_server_type
string

Omit to let the platform pick the cheapest x86 type the target location can currently provision that meets the role's minimum size.

Minimum string length: 1
criticality
enum<string> | null
Available options:
production,
staging,
development,
disposable
description
string | null
distribution
string
default:kubeadm
environment
string | null
Required string length: 1 - 50
etcd_node_count
integer
default:3
etcd_server_type
string

Omit to let the platform pick the cheapest x86 type the target location can currently provision that meets the role's minimum size.

etcd_topology
string
default:stacked
external_cloud_provider
boolean
default:true
gitops_branch
string
default:master
gitops_credential_name
string | null
gitops_repository
string | null
gitops_provider
enum<string>
default:github

GitOps provider of the repository the cluster is bootstrapped onto. Omitted is github, where gitops_repository is owner/name. bitbucket_cloud names the repository by gitops_workspace and gitops_repo_slug (or gitops_repository as workspace/repo_slug) and binds it as a Bitbucket Cloud repository.

Available options:
github,
bitbucket_cloud
gitops_workspace
string | null

Bitbucket Cloud workspace of the GitOps repository. Only with gitops_provider bitbucket_cloud; provided together with gitops_repo_slug.

gitops_repo_slug
string | null

Bitbucket Cloud repository slug of the GitOps repository. Only with gitops_provider bitbucket_cloud; provided together with gitops_workspace.

include_networking
boolean
default:true
kubernetes_version
string | null

Version for the chosen distribution (kubeadm unless distribution says k3s). kubeadm takes a plain upstream tag such as v1.36.4; k3s takes a k3s build such as v1.35.7+k3s1, and a bare patch resolves to its newest +k3sN build. A +k3sN build with distribution kubeadm is refused. Omit to install the version catalogue's stable version for the distribution.

k3s_disabled_components
enum<string>[] | null

k3s packaged components to keep disabled (k3s --disable), for example ["traefik"] on a cluster that brings its own ingress. k3s distribution only: the list is rendered into the server config at install and re-asserted by the maintenance pass, so the entries stay off across restarts.

Available options:
coredns,
servicelb,
traefik,
local-storage,
metrics-server,
runtimes
network_ip_range
string
default:10.0.0.0/16
node_groups
CreateNodeGroupRequest · object[] | null
ssh_key_credential_id
string<uuid4> | null
ssh_key_credential_ids
string<uuid4>[]
subnet_range
string
default:10.0.1.0/24
worker_count
integer
default:1
Required range: 0 <= x <= 50
worker_server_type
string

Omit to let the platform pick the cheapest x86 type the target location can currently provision that meets the role's minimum size.

Minimum string length: 1

Response

Cluster created successfully

cluster_id
string<uuid4>
required
name
string
required
server_types
Server Types · object

The server type each role will be provisioned with. Roles the request left empty are filled by the platform with the cheapest x86 type the location can provision now that meets the role's minimum size (bastion and worker 2 vCPU / 4 GB, control plane and etcd 4 vCPU / 8 GB). worker is omitted when the request carried node_groups, etcd unless etcd_topology is external.