---
title: "Creates a cluster for the given project."
method: POST
path: "/api/v2/projects/{project_id}/clusters"
tags: ["project"]
---

# Creates a cluster for the given project.

`POST /api/v2/projects/{project_id}/clusters`

## Request

- The document declares no server URL.
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/kubermatic/apis/kubermatic-kubernetes-platform-api/docs/api/v2/projects/:project_id/clusters/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `project_id` string, required

## Request body

- CreateClusterSpec: CreateClusterSpec is the structure that is used to create cluster with its initial node deployment
  - `cluster` Cluster: Note: Cluster has a custom MarshalJSON method defined and thus the output may vary
    - `annotations` object: Annotations that can be added to the resource
    - `creationTimestamp` string, date-time: CreationTimestamp is a timestamp representing the server time when this object was created.
    - `credential` string
    - `deletionTimestamp` string, date-time: DeletionTimestamp is a timestamp representing the server time when this object was deleted.
    - `id` string: ID unique value that identifies the resource generated by the server. Read-Only.
    - `inheritedLabels` object
    - `labels` object
    - `name` string: Name represents human readable name for the resource
    - `spec` ClusterSpec: ClusterSpec defines the cluster specification
      - `admissionPlugins` string[]: Additional Admission Controller plugins
      - `auditLogging` AuditLoggingSettings
        - `enabled` boolean
      - `cloud` CloudSpec
        - `alibaba` AlibabaCloudSpec
          - `accessKeyId` string
          - `accessKeySecret` string
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `anexia` AnexiaCloudSpec
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `token` string
        - `aws` AWSCloudSpec
          - `accessKeyId` string
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `instanceProfileName` string
          - `roleARN` string: The IAM role, the control plane will use. The control plane will perform an assume-role
          - `roleName` string: DEPRECATED. Don't care for the role name. We only require the ControlPlaneRoleARN to be set so the control plane can perform the assume-role. We keep it for backwards compatibility (We use this name for cleanup purpose).
          - `routeTableId` string
          - `secretAccessKey` string
          - `securityGroupID` string
          - `vpcId` string
        - `azure` AzureCloudSpec
          - `assignAvailabilitySet` boolean
          - `availabilitySet` string
          - `clientID` string
          - `clientSecret` string
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `loadBalancerSKU` string
          - `resourceGroup` string
          - `routeTable` string
          - `securityGroup` string
          - `subnet` string
          - `subscriptionID` string
          - `tenantID` string
          - `vnet` string
          - `vnetResourceGroup` string
        - `bringyourown` BringYourOwnCloudSpec
        - `dc` string: DatacenterName where the users 'cloud' lives in.
        - `digitalocean` DigitaloceanCloudSpec
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `token` string
        - `fake` FakeCloudSpec
          - `token` string
        - `gcp` GCPCloudSpec
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `network` string
          - `serviceAccount` string
          - `subnetwork` string
        - `hetzner` HetznerCloudSpec
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `network` string: Network is the pre-existing Hetzner network in which the machines are running. While machines can be in multiple networks, a single one must be chosen for the HCloud CCM to work. If this is empty, the network configured on the datacenter will be used.
          - `token` string: Token is used to authenticate with the Hetzner cloud API.
        - `kubevirt` KubevirtCloudSpec
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `kubeconfig` string
        - `openstack` OpenstackCloudSpec
          - `applicationCredentialID` string
          - `applicationCredentialSecret` string
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `domain` string
          - `floatingIpPool` string: FloatingIPPool holds the name of the public network The public network is reachable from the outside world and should provide the pool of IP addresses to choose from. When specified, all worker nodes will receive a public ip from this floating ip pool Note that the network is external if the "External" field is set to true
          - `network` string: Network holds the name of the internal network When specified, all worker nodes will be attached to this network. If not specified, a network, subnet & router will be created Note that the network is internal if the "External" field is set to false
          - `password` string
          - `routerID` string
          - `securityGroups` string
          - `subnetID` string
          - `tenant` string
          - `tenantID` string
          - `token` string: Used internally during cluster creation
          - `useOctavia` boolean: Whether or not to use Octavia for LoadBalancer type of Service implementation instead of using Neutron-LBaaS. Attention:Openstack CCM use Octavia as default load balancer implementation since v1.17.0 Takes precedence over the 'use_octavia' flag provided at datacenter level if both are specified. +optional
          - `useToken` boolean
          - `username` string
        - `packet` PacketCloudSpec
          - `apiKey` string
          - `billingCycle` string
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `projectID` string
        - `vsphere` VSphereCloudSpec
          - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
            - `apiVersion` string: API version of the referent. +optional
            - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
            - `key` string
            - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
            - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
            - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
            - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
            - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
          - `datastore` string: Datastore to be used for storing virtual machines and as a default for dynamic volume provisioning, it is mutually exclusive with DatastoreCluster. +optional
          - `datastoreCluster` string: DatastoreCluster to be used for storing virtual machines, it is mutually exclusive with Datastore. +optional
          - `folder` string: Folder is the folder to be used to group the provisioned virtual machines. +optional
          - `infraManagementUser` VSphereCredentials: VSphereCredentials credentials represents a credential for accessing vSphere
            - `password` string
            - `username` string
          - `password` string: Password is the vSphere user password. +optional
          - `resourcePool` string: ResourcePool is used to manage resources such as cpu and memory for vSphere virtual machines. The resource pool should be defined on vSphere cluster level. +optional
          - `storagePolicy` string: StoragePolicy to be used for storage provisioning
          - `username` string: Username is the vSphere user name. +optional
          - `vmNetName` string: VMNetName is the name of the vSphere network.
      - `clusterNetwork` ClusterNetworkingConfig: ClusterNetworkingConfig specifies the different networking parameters for a cluster.
        - `dnsDomain` string: Domain name for services.
        - `ipvs` IPVSConfiguration
          - `strictArp` boolean: StrictArp configure arp_ignore and arp_announce to avoid answering ARP queries from kube-ipvs0 interface. defaults to true.
        - `konnectivityEnabled` boolean: KonnectivityEnabled enables konnectivity for controlplane to node network communication.
        - `nodeLocalDNSCacheEnabled` boolean: NodeLocalDNSCacheEnabled controls whether the NodeLocal DNS Cache feature is enabled. Defaults to true.
        - `pods` NetworkRanges
          - `cidrBlocks` string[]
        - `proxyMode` string: ProxyMode defines the kube-proxy mode (ipvs/iptables). Defaults to ipvs.
        - `services` NetworkRanges
          - `cidrBlocks` string[]
      - `containerRuntime` string: ContainerRuntime to use, i.e. Docker or containerd. By default containerd will be used.
      - `enableUserSSHKeyAgent` boolean: EnableUserSSHKeyAgent control whether the UserSSHKeyAgent will be deployed in the user cluster or not. If it was enabled, the agent will be deployed and used to sync the user ssh keys, that the user attach to the created cluster. If the agent was disabled, it won't be deployed in the user cluster, thus after the cluster creation any attached ssh keys won't be synced to the worker nodes. Once the agent is enabled/disabled it cannot be changed after the cluster is being created.
      - `machineNetworks` MachineNetworkingConfig[]: MachineNetworks optionally specifies the parameters for IPAM.
        - `cidr` string
        - `dnsServers` string[]
        - `gateway` string
      - `mla` MLASettings
        - `loggingEnabled` boolean: LoggingEnabled is the flag for enabling logging in user cluster.
        - `loggingResources` ResourceRequirements
          - `limits` ResourceList
          - `requests` ResourceList
        - `monitoringEnabled` boolean: MonitoringEnabled is the flag for enabling monitoring in user cluster.
        - `monitoringResources` ResourceRequirements
          - `limits` ResourceList
          - `requests` ResourceList
      - `oidc` OIDCSettings
        - `clientId` string
        - `clientSecret` string
        - `extraScopes` string
        - `groupsClaim` string
        - `issuerUrl` string
        - `requiredClaim` string
        - `usernameClaim` string
      - `opaIntegration` OPAIntegrationSettings
        - `enabled` boolean: Enabled is the flag for enabling OPA integration
        - `experimentalEnableMutation` boolean: Enable mutation
        - `webhookTimeoutSeconds` integer: WebhookTimeout is the timeout that is set for the gatekeeper validating webhook admission review calls. By default 10 seconds.
      - `podNodeSelectorAdmissionPluginConfig` object: PodNodeSelectorAdmissionPluginConfig provides the configuration for the PodNodeSelector. It's used by the backend to create a configuration file for this plugin. The key:value from the map is converted to the namespace:<node-selectors-labels> in the file. The format in a file: podNodeSelectorPluginConfig: clusterDefaultNodeSelector: <node-selectors-labels> namespace1: <node-selectors-labels> namespace2: <node-selectors-labels>
      - `serviceAccount` ServiceAccountSettings
        - `apiAudiences` string[]: APIAudiences are the Identifiers of the API If this is not specified, it will be set to a single element list containing the issuer URL
        - `issuer` string: Issuer is the identifier of the service account token issuer If this is not specified, it will be set to the URL of apiserver by default
        - `tokenVolumeProjectionEnabled` boolean
      - `updateWindow` UpdateWindow
        - `length` string
        - `start` string
      - `usePodNodeSelectorAdmissionPlugin` boolean: If active the PodNodeSelector admission plugin is configured at the apiserver
      - `usePodSecurityPolicyAdmissionPlugin` boolean: If active the PodSecurityPolicy admission plugin is configured at the apiserver
      - `version` Semver: Semver is struct that encapsulates semver.Semver struct so we can use it in API +k8s:deepcopy-gen=true
    - `status` ClusterStatus: ClusterStatus defines the cluster status
      - `externalCCMMigration` string
      - `url` string: URL specifies the address at which the cluster is available
      - `version` Semver: Semver is struct that encapsulates semver.Semver struct so we can use it in API +k8s:deepcopy-gen=true
    - `type` string
  - `nodeDeployment` NodeDeployment: NodeDeployment represents a set of worker nodes that is part of a cluster
    - `annotations` object: Annotations that can be added to the resource
    - `creationTimestamp` string, date-time: CreationTimestamp is a timestamp representing the server time when this object was created.
    - `deletionTimestamp` string, date-time: DeletionTimestamp is a timestamp representing the server time when this object was deleted.
    - `id` string: ID unique value that identifies the resource generated by the server. Read-Only.
    - `name` string: Name represents human readable name for the resource
    - `spec` NodeDeploymentSpec: NodeDeploymentSpec node deployment specification
      - `dynamicConfig` boolean
      - `paused` boolean
      - `replicas` integer, required
      - `template` NodeSpec, required: NodeSpec node specification
        - `cloud` NodeCloudSpec, required
          - `alibaba` AlibabaNodeSpec: AlibabaNodeSpec alibaba specific node settings
            - `diskSize` string
            - `diskType` string
            - `instanceType` string
            - `internetMaxBandwidthOut` string
            - `labels` object
            - `vSwitchID` string
            - `zoneID` string
          - `anexia` AnexiaNodeSpec: AnexiaNodeSpec anexia specific node settings
            - `cpus` integer, required: CPUs states how many cpus the node will have.
            - `diskSize` integer, required: DiskSize states the disk size that node will have.
            - `memory` integer, required: Memory states the memory that node will have.
            - `templateID` string, required: TemplateID instance template
            - `vlanID` string, required: VlanID Instance vlanID
          - `aws` AWSNodeSpec: AWSNodeSpec aws specific node settings
            - `ami` string: ami to use. Will be defaulted to a ami for your selected operating system and region. Only set this when you know what you do.
            - `assignPublicIP` boolean: This flag controls a property of the AWS instance. When set the AWS instance will get a public IP address assigned during launch overriding a possible setting in the used AWS subnet.
            - `availabilityZone` string: Availability zone in which to place the node. It is coupled with the subnet to which the node will belong.
            - `diskSize` integer, required: size of the volume in gb. Only one volume will be created
            - `instanceType` string, required
            - `isSpotInstance` boolean: IsSpotInstance indicates whether the created machine is an aws ec2 spot instance or on-demand ec2 instance.
            - `spotInstanceInterruptionBehavior` string: SpotInstanceInterruptionBehavior sets the interruption behavior for the spot instance when capacity is no longer available at the price you specified, if there is no capacity, or if a constraint cannot be met. Charges for EBS volume storage apply when an instance is stopped.
            - `spotInstanceMaxPrice` string: SpotInstanceMaxPrice is the maximum price you are willing to pay per instance hour. Your instance runs when your maximum price is greater than the Spot Price.
            - `spotInstancePersistentRequest` boolean: SpotInstancePersistentRequest ensures that your request will be submitted every time your Spot Instance is terminated.
            - `subnetID` string: The VPC subnet to which the node shall be connected.
            - `tags` object: additional instance tags
            - `volumeType` string, required
          - `azure` AzureNodeSpec: AzureNodeSpec describes settings for an Azure node
            - `assignAvailabilitySet` boolean: AssignAvailabilitySet is used to check if an availability set should be created and assigned to the cluster.
            - `assignPublicIP` boolean: should the machine have a publicly accessible IP address
            - `dataDiskSize` integer: Data disk size in GB
            - `imageID` string: ImageID represents the ID of the image that should be used to run the node
            - `osDiskSize` integer: OS disk size in GB
            - `size` string, required: VM size
            - `tags` object: Additional metadata to set
            - `zones` string[]: Zones represents the availability zones for azure vms
          - `digitalocean` DigitaloceanNodeSpec: DigitaloceanNodeSpec digitalocean node settings
            - `backups` boolean: enable backups for the droplet
            - `ipv6` boolean: enable ipv6 for the droplet
            - `monitoring` boolean: enable monitoring for the droplet
            - `size` string, required: droplet size slug
            - `tags` string[]: additional droplet tags
          - `gcp` GCPNodeSpec: GCPNodeSpec gcp specific node settings
            - `customImage` string
            - `diskSize` integer
            - `diskType` string
            - `labels` object
            - `machineType` string
            - `preemptible` boolean
            - `tags` string[]
            - `zone` string
          - `hetzner` HetznerNodeSpec: HetznerNodeSpec Hetzner node settings
            - `network` string: network name
            - `type` string, required: server type
          - `kubevirt` KubevirtNodeSpec: KubevirtNodeSpec kubevirt specific node settings
            - `cpus` string, required: CPUs states how many cpus the kubevirt node will have.
            - `memory` string, required: Memory states the memory that kubevirt node will have.
            - `namespace` string, required: Namespace states in which namespace kubevirt node will be provisioned.
            - `pvcSize` string, required: PVCSize states the size of the provisioned pvc per node.
            - `sourceURL` string, required: SourceURL states the url from which the imported image will be downloaded.
            - `storageClassName` string, required: StorageClassName states the storage class name for the provisioned PVCs.
          - `openstack` OpenstackNodeSpec: OpenstackNodeSpec openstack node settings
            - `availabilityZone` string: if not set, the default AZ from the Datacenter spec will be used
            - `diskSize` integer: if set, the rootDisk will be a volume. If not, the rootDisk will be on ephemeral storage and its size will be derived from the flavor
            - `flavor` string, required: instance flavor
            - `image` string, required: image to use
            - `instanceReadyCheckPeriod` string: Period of time to check for instance ready status, i.e. 10s/1m
            - `instanceReadyCheckTimeout` string: Max time to wait for the instance to be ready, i.e. 10s/1m
            - `tags` object: Additional metadata to set
            - `useFloatingIP` boolean: Defines whether floating ip should be used
          - `packet` PacketNodeSpec: PacketNodeSpec specifies packet specific node settings
            - `instanceType` string, required: InstanceType denotes the plan to which the device will be provisioned.
            - `tags` string[]: additional instance tags
          - `vsphere` VSphereNodeSpec: VSphereNodeSpec VSphere node settings
            - `cpus` integer
            - `diskSizeGB` integer
            - `memory` integer
            - `template` string
        - `labels` object: Map of string keys and values that can be used to organize and categorize (scope and select) objects. It will be applied to Nodes allowing users run their apps on specific Node using labelSelector.
        - `operatingSystem` OperatingSystemSpec, required
          - `centos` CentOSSpec: CentOSSpec contains CentOS specific settings
            - `distUpgradeOnBoot` boolean: do a dist-upgrade on boot and reboot it required afterwards
          - `flatcar` FlatcarSpec: FlatcarSpec contains Flatcar Linux specific settings
            - `disableAutoUpdate` boolean: disable flatcar linux auto-update feature
          - `rhel` RHELSpec: RHELSpec contains rhel specific settings
            - `distUpgradeOnBoot` boolean: do a dist-upgrade on boot and reboot it required afterwards
            - `rhelSubscriptionManagerPassword` string
            - `rhelSubscriptionManagerUser` string
            - `rhsmOfflineToken` string
          - `sles` SLESSpec: SLESSpec contains SLES specific settings
            - `distUpgradeOnBoot` boolean: do a dist-upgrade on boot and reboot it required afterwards
          - `ubuntu` UbuntuSpec: UbuntuSpec ubuntu specific settings
            - `distUpgradeOnBoot` boolean: do a dist-upgrade on boot and reboot it required afterwards
        - `sshUserName` string
        - `taints` TaintSpec[]: List of taints to set on new nodes
          - `effect` string
          - `key` string
          - `value` string
        - `versions` NodeVersionInfo, required: NodeVersionInfo node version information
          - `kubelet` string
    - `status` MachineDeploymentStatus: [MachineDeploymentStatus] MachineDeploymentStatus defines the observed state of MachineDeployment
      - `availableReplicas` integer: Total number of available machines (ready for at least minReadySeconds) targeted by this deployment. +optional
      - `observedGeneration` integer: The generation observed by the deployment controller. +optional
      - `readyReplicas` integer: Total number of ready machines targeted by this deployment. +optional
      - `replicas` integer: Total number of non-terminated machines targeted by this deployment (their labels match the selector). +optional
      - `unavailableReplicas` integer: Total number of unavailable machines targeted by this deployment. This is the total number of machines that are still required for the deployment to have 100% available capacity. They may either be machines that are running but not yet available or machines that still have not been created. +optional
      - `updatedReplicas` integer: Total number of non-terminated machines targeted by this deployment that have the desired template spec. +optional

## Response `201`

Cluster

- Cluster: Note: Cluster has a custom MarshalJSON method defined and thus the output may vary
  - `annotations` object: Annotations that can be added to the resource
  - `creationTimestamp` string, date-time: CreationTimestamp is a timestamp representing the server time when this object was created.
  - `credential` string
  - `deletionTimestamp` string, date-time: DeletionTimestamp is a timestamp representing the server time when this object was deleted.
  - `id` string: ID unique value that identifies the resource generated by the server. Read-Only.
  - `inheritedLabels` object
  - `labels` object
  - `name` string: Name represents human readable name for the resource
  - `spec` ClusterSpec: ClusterSpec defines the cluster specification
    - `admissionPlugins` string[]: Additional Admission Controller plugins
    - `auditLogging` AuditLoggingSettings
      - `enabled` boolean
    - `cloud` CloudSpec
      - `alibaba` AlibabaCloudSpec
        - `accessKeyId` string
        - `accessKeySecret` string
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
      - `anexia` AnexiaCloudSpec
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `token` string
      - `aws` AWSCloudSpec
        - `accessKeyId` string
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `instanceProfileName` string
        - `roleARN` string: The IAM role, the control plane will use. The control plane will perform an assume-role
        - `roleName` string: DEPRECATED. Don't care for the role name. We only require the ControlPlaneRoleARN to be set so the control plane can perform the assume-role. We keep it for backwards compatibility (We use this name for cleanup purpose).
        - `routeTableId` string
        - `secretAccessKey` string
        - `securityGroupID` string
        - `vpcId` string
      - `azure` AzureCloudSpec
        - `assignAvailabilitySet` boolean
        - `availabilitySet` string
        - `clientID` string
        - `clientSecret` string
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `loadBalancerSKU` string
        - `resourceGroup` string
        - `routeTable` string
        - `securityGroup` string
        - `subnet` string
        - `subscriptionID` string
        - `tenantID` string
        - `vnet` string
        - `vnetResourceGroup` string
      - `bringyourown` BringYourOwnCloudSpec
      - `dc` string: DatacenterName where the users 'cloud' lives in.
      - `digitalocean` DigitaloceanCloudSpec
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `token` string
      - `fake` FakeCloudSpec
        - `token` string
      - `gcp` GCPCloudSpec
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `network` string
        - `serviceAccount` string
        - `subnetwork` string
      - `hetzner` HetznerCloudSpec
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `network` string: Network is the pre-existing Hetzner network in which the machines are running. While machines can be in multiple networks, a single one must be chosen for the HCloud CCM to work. If this is empty, the network configured on the datacenter will be used.
        - `token` string: Token is used to authenticate with the Hetzner cloud API.
      - `kubevirt` KubevirtCloudSpec
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `kubeconfig` string
      - `openstack` OpenstackCloudSpec
        - `applicationCredentialID` string
        - `applicationCredentialSecret` string
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `domain` string
        - `floatingIpPool` string: FloatingIPPool holds the name of the public network The public network is reachable from the outside world and should provide the pool of IP addresses to choose from. When specified, all worker nodes will receive a public ip from this floating ip pool Note that the network is external if the "External" field is set to true
        - `network` string: Network holds the name of the internal network When specified, all worker nodes will be attached to this network. If not specified, a network, subnet & router will be created Note that the network is internal if the "External" field is set to false
        - `password` string
        - `routerID` string
        - `securityGroups` string
        - `subnetID` string
        - `tenant` string
        - `tenantID` string
        - `token` string: Used internally during cluster creation
        - `useOctavia` boolean: Whether or not to use Octavia for LoadBalancer type of Service implementation instead of using Neutron-LBaaS. Attention:Openstack CCM use Octavia as default load balancer implementation since v1.17.0 Takes precedence over the 'use_octavia' flag provided at datacenter level if both are specified. +optional
        - `useToken` boolean
        - `username` string
      - `packet` PacketCloudSpec
        - `apiKey` string
        - `billingCycle` string
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `projectID` string
      - `vsphere` VSphereCloudSpec
        - `credentialsReference` GlobalSecretKeySelector: GlobalObjectKeySelector is needed as we can not use v1.SecretKeySelector because it is not cross namespace
          - `apiVersion` string: API version of the referent. +optional
          - `fieldPath` string: If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future. +optional
          - `key` string
          - `kind` string: Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds +optional
          - `name` string: Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names +optional
          - `namespace` string: Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ +optional
          - `resourceVersion` string: Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency +optional
          - `uid` string: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated.
        - `datastore` string: Datastore to be used for storing virtual machines and as a default for dynamic volume provisioning, it is mutually exclusive with DatastoreCluster. +optional
        - `datastoreCluster` string: DatastoreCluster to be used for storing virtual machines, it is mutually exclusive with Datastore. +optional
        - `folder` string: Folder is the folder to be used to group the provisioned virtual machines. +optional
        - `infraManagementUser` VSphereCredentials: VSphereCredentials credentials represents a credential for accessing vSphere
          - `password` string
          - `username` string
        - `password` string: Password is the vSphere user password. +optional
        - `resourcePool` string: ResourcePool is used to manage resources such as cpu and memory for vSphere virtual machines. The resource pool should be defined on vSphere cluster level. +optional
        - `storagePolicy` string: StoragePolicy to be used for storage provisioning
        - `username` string: Username is the vSphere user name. +optional
        - `vmNetName` string: VMNetName is the name of the vSphere network.
    - `clusterNetwork` ClusterNetworkingConfig: ClusterNetworkingConfig specifies the different networking parameters for a cluster.
      - `dnsDomain` string: Domain name for services.
      - `ipvs` IPVSConfiguration
        - `strictArp` boolean: StrictArp configure arp_ignore and arp_announce to avoid answering ARP queries from kube-ipvs0 interface. defaults to true.
      - `konnectivityEnabled` boolean: KonnectivityEnabled enables konnectivity for controlplane to node network communication.
      - `nodeLocalDNSCacheEnabled` boolean: NodeLocalDNSCacheEnabled controls whether the NodeLocal DNS Cache feature is enabled. Defaults to true.
      - `pods` NetworkRanges
        - `cidrBlocks` string[]
      - `proxyMode` string: ProxyMode defines the kube-proxy mode (ipvs/iptables). Defaults to ipvs.
      - `services` NetworkRanges
        - `cidrBlocks` string[]
    - `containerRuntime` string: ContainerRuntime to use, i.e. Docker or containerd. By default containerd will be used.
    - `enableUserSSHKeyAgent` boolean: EnableUserSSHKeyAgent control whether the UserSSHKeyAgent will be deployed in the user cluster or not. If it was enabled, the agent will be deployed and used to sync the user ssh keys, that the user attach to the created cluster. If the agent was disabled, it won't be deployed in the user cluster, thus after the cluster creation any attached ssh keys won't be synced to the worker nodes. Once the agent is enabled/disabled it cannot be changed after the cluster is being created.
    - `machineNetworks` MachineNetworkingConfig[]: MachineNetworks optionally specifies the parameters for IPAM.
      - `cidr` string
      - `dnsServers` string[]
      - `gateway` string
    - `mla` MLASettings
      - `loggingEnabled` boolean: LoggingEnabled is the flag for enabling logging in user cluster.
      - `loggingResources` ResourceRequirements
        - `limits` ResourceList
        - `requests` ResourceList
      - `monitoringEnabled` boolean: MonitoringEnabled is the flag for enabling monitoring in user cluster.
      - `monitoringResources` ResourceRequirements
        - `limits` ResourceList
        - `requests` ResourceList
    - `oidc` OIDCSettings
      - `clientId` string
      - `clientSecret` string
      - `extraScopes` string
      - `groupsClaim` string
      - `issuerUrl` string
      - `requiredClaim` string
      - `usernameClaim` string
    - `opaIntegration` OPAIntegrationSettings
      - `enabled` boolean: Enabled is the flag for enabling OPA integration
      - `experimentalEnableMutation` boolean: Enable mutation
      - `webhookTimeoutSeconds` integer: WebhookTimeout is the timeout that is set for the gatekeeper validating webhook admission review calls. By default 10 seconds.
    - `podNodeSelectorAdmissionPluginConfig` object: PodNodeSelectorAdmissionPluginConfig provides the configuration for the PodNodeSelector. It's used by the backend to create a configuration file for this plugin. The key:value from the map is converted to the namespace:<node-selectors-labels> in the file. The format in a file: podNodeSelectorPluginConfig: clusterDefaultNodeSelector: <node-selectors-labels> namespace1: <node-selectors-labels> namespace2: <node-selectors-labels>
    - `serviceAccount` ServiceAccountSettings
      - `apiAudiences` string[]: APIAudiences are the Identifiers of the API If this is not specified, it will be set to a single element list containing the issuer URL
      - `issuer` string: Issuer is the identifier of the service account token issuer If this is not specified, it will be set to the URL of apiserver by default
      - `tokenVolumeProjectionEnabled` boolean
    - `updateWindow` UpdateWindow
      - `length` string
      - `start` string
    - `usePodNodeSelectorAdmissionPlugin` boolean: If active the PodNodeSelector admission plugin is configured at the apiserver
    - `usePodSecurityPolicyAdmissionPlugin` boolean: If active the PodSecurityPolicy admission plugin is configured at the apiserver
    - `version` Semver: Semver is struct that encapsulates semver.Semver struct so we can use it in API +k8s:deepcopy-gen=true
  - `status` ClusterStatus: ClusterStatus defines the cluster status
    - `externalCCMMigration` string
    - `url` string: URL specifies the address at which the cluster is available
    - `version` Semver: Semver is struct that encapsulates semver.Semver struct so we can use it in API +k8s:deepcopy-gen=true
  - `type` string

## Other responses

- `401`: EmptyResponse is a empty response
- `403`: EmptyResponse is a empty response
- `default`: errorResponse

---

[API](https://skmtc.dev/kubermatic/apis/kubermatic-kubernetes-platform-api.md) - [All operations](https://skmtc.dev/kubermatic/apis/kubermatic-kubernetes-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kubermatic/apis/kubermatic-kubernetes-platform-api/revisions/815b9bf19db5?raw)
