Skip to main content
POST
/
organization
/
{organizationId}
/
cluster
Create a cluster
curl --request POST \
  --url https://api.qovery.com/organization/{organizationId}/cluster \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "region": "<string>",
  "description": "<string>",
  "cloud_provider_credentials": {
    "credentials": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "name": "<string>"
    },
    "region": "<string>"
  },
  "min_running_nodes": 1,
  "max_running_nodes": 1,
  "disk_size": 50,
  "disk_iops": 7800,
  "disk_throughput": 255,
  "instance_type": "T3A_LARGE",
  "kubernetes": "MANAGED",
  "production": true,
  "ssh_keys": [
    "<string>"
  ],
  "features": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "value": "<string>"
    }
  ],
  "metrics_parameters": {
    "enabled": true,
    "configuration": {
      "kind": "MANAGED_BY_QOVERY",
      "high_availability": true
    }
  },
  "infrastructure_charts_parameters": {
    "nginx_parameters": {
      "replica_count": 1,
      "default_ssl_certificate": "<string>",
      "publish_status_address": "<string>",
      "annotation_metal_lb_load_balancer_ips": "<string>",
      "annotation_external_dns_kubernetes_target": "<string>"
    },
    "cert_manager_parameters": {
      "kubernetes_namespace": "<string>"
    },
    "metal_lb_parameters": {
      "ip_address_pools": [
        "<string>"
      ]
    }
  },
  "labels_groups": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
    }
  ],
  "secret_manager_accesses": [
    {
      "name": "<string>",
      "endpoint": {
        "mode": "AWS_SECRET_MANAGER",
        "region": "<string>"
      },
      "authentication": {
        "mode": "AUTOMATICALLY_CONFIGURED"
      },
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
    }
  ]
}
'
import requests

url = "https://api.qovery.com/organization/{organizationId}/cluster"

payload = {
"name": "<string>",
"region": "<string>",
"description": "<string>",
"cloud_provider_credentials": {
"credentials": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"region": "<string>"
},
"min_running_nodes": 1,
"max_running_nodes": 1,
"disk_size": 50,
"disk_iops": 7800,
"disk_throughput": 255,
"instance_type": "T3A_LARGE",
"kubernetes": "MANAGED",
"production": True,
"ssh_keys": ["<string>"],
"features": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"value": "<string>"
}
],
"metrics_parameters": {
"enabled": True,
"configuration": {
"kind": "MANAGED_BY_QOVERY",
"high_availability": True
}
},
"infrastructure_charts_parameters": {
"nginx_parameters": {
"replica_count": 1,
"default_ssl_certificate": "<string>",
"publish_status_address": "<string>",
"annotation_metal_lb_load_balancer_ips": "<string>",
"annotation_external_dns_kubernetes_target": "<string>"
},
"cert_manager_parameters": { "kubernetes_namespace": "<string>" },
"metal_lb_parameters": { "ip_address_pools": ["<string>"] }
},
"labels_groups": [{ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a" }],
"secret_manager_accesses": [
{
"name": "<string>",
"endpoint": {
"mode": "AWS_SECRET_MANAGER",
"region": "<string>"
},
"authentication": { "mode": "AUTOMATICALLY_CONFIGURED" },
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
region: '<string>',
description: '<string>',
cloud_provider_credentials: {
credentials: {id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'},
region: '<string>'
},
min_running_nodes: 1,
max_running_nodes: 1,
disk_size: 50,
disk_iops: 7800,
disk_throughput: 255,
instance_type: 'T3A_LARGE',
kubernetes: 'MANAGED',
production: true,
ssh_keys: ['<string>'],
features: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', value: '<string>'}],
metrics_parameters: {
enabled: true,
configuration: {kind: 'MANAGED_BY_QOVERY', high_availability: true}
},
infrastructure_charts_parameters: {
nginx_parameters: {
replica_count: 1,
default_ssl_certificate: '<string>',
publish_status_address: '<string>',
annotation_metal_lb_load_balancer_ips: '<string>',
annotation_external_dns_kubernetes_target: '<string>'
},
cert_manager_parameters: {kubernetes_namespace: '<string>'},
metal_lb_parameters: {ip_address_pools: ['<string>']}
},
labels_groups: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'}],
secret_manager_accesses: [
{
name: '<string>',
endpoint: {mode: 'AWS_SECRET_MANAGER', region: '<string>'},
authentication: {mode: 'AUTOMATICALLY_CONFIGURED'},
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
]
})
};

fetch('https://api.qovery.com/organization/{organizationId}/cluster', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.qovery.com/organization/{organizationId}/cluster",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'region' => '<string>',
'description' => '<string>',
'cloud_provider_credentials' => [
'credentials' => [
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
],
'region' => '<string>'
],
'min_running_nodes' => 1,
'max_running_nodes' => 1,
'disk_size' => 50,
'disk_iops' => 7800,
'disk_throughput' => 255,
'instance_type' => 'T3A_LARGE',
'kubernetes' => 'MANAGED',
'production' => true,
'ssh_keys' => [
'<string>'
],
'features' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'value' => '<string>'
]
],
'metrics_parameters' => [
'enabled' => true,
'configuration' => [
'kind' => 'MANAGED_BY_QOVERY',
'high_availability' => true
]
],
'infrastructure_charts_parameters' => [
'nginx_parameters' => [
'replica_count' => 1,
'default_ssl_certificate' => '<string>',
'publish_status_address' => '<string>',
'annotation_metal_lb_load_balancer_ips' => '<string>',
'annotation_external_dns_kubernetes_target' => '<string>'
],
'cert_manager_parameters' => [
'kubernetes_namespace' => '<string>'
],
'metal_lb_parameters' => [
'ip_address_pools' => [
'<string>'
]
]
],
'labels_groups' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'secret_manager_accesses' => [
[
'name' => '<string>',
'endpoint' => [
'mode' => 'AWS_SECRET_MANAGER',
'region' => '<string>'
],
'authentication' => [
'mode' => 'AUTOMATICALLY_CONFIGURED'
],
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.qovery.com/organization/{organizationId}/cluster"

payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"region\": \"<string>\",\n \"description\": \"<string>\",\n \"cloud_provider_credentials\": {\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n },\n \"region\": \"<string>\"\n },\n \"min_running_nodes\": 1,\n \"max_running_nodes\": 1,\n \"disk_size\": 50,\n \"disk_iops\": 7800,\n \"disk_throughput\": 255,\n \"instance_type\": \"T3A_LARGE\",\n \"kubernetes\": \"MANAGED\",\n \"production\": true,\n \"ssh_keys\": [\n \"<string>\"\n ],\n \"features\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"value\": \"<string>\"\n }\n ],\n \"metrics_parameters\": {\n \"enabled\": true,\n \"configuration\": {\n \"kind\": \"MANAGED_BY_QOVERY\",\n \"high_availability\": true\n }\n },\n \"infrastructure_charts_parameters\": {\n \"nginx_parameters\": {\n \"replica_count\": 1,\n \"default_ssl_certificate\": \"<string>\",\n \"publish_status_address\": \"<string>\",\n \"annotation_metal_lb_load_balancer_ips\": \"<string>\",\n \"annotation_external_dns_kubernetes_target\": \"<string>\"\n },\n \"cert_manager_parameters\": {\n \"kubernetes_namespace\": \"<string>\"\n },\n \"metal_lb_parameters\": {\n \"ip_address_pools\": [\n \"<string>\"\n ]\n }\n },\n \"labels_groups\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"secret_manager_accesses\": [\n {\n \"name\": \"<string>\",\n \"endpoint\": {\n \"mode\": \"AWS_SECRET_MANAGER\",\n \"region\": \"<string>\"\n },\n \"authentication\": {\n \"mode\": \"AUTOMATICALLY_CONFIGURED\"\n },\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.qovery.com/organization/{organizationId}/cluster")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"region\": \"<string>\",\n \"description\": \"<string>\",\n \"cloud_provider_credentials\": {\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n },\n \"region\": \"<string>\"\n },\n \"min_running_nodes\": 1,\n \"max_running_nodes\": 1,\n \"disk_size\": 50,\n \"disk_iops\": 7800,\n \"disk_throughput\": 255,\n \"instance_type\": \"T3A_LARGE\",\n \"kubernetes\": \"MANAGED\",\n \"production\": true,\n \"ssh_keys\": [\n \"<string>\"\n ],\n \"features\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"value\": \"<string>\"\n }\n ],\n \"metrics_parameters\": {\n \"enabled\": true,\n \"configuration\": {\n \"kind\": \"MANAGED_BY_QOVERY\",\n \"high_availability\": true\n }\n },\n \"infrastructure_charts_parameters\": {\n \"nginx_parameters\": {\n \"replica_count\": 1,\n \"default_ssl_certificate\": \"<string>\",\n \"publish_status_address\": \"<string>\",\n \"annotation_metal_lb_load_balancer_ips\": \"<string>\",\n \"annotation_external_dns_kubernetes_target\": \"<string>\"\n },\n \"cert_manager_parameters\": {\n \"kubernetes_namespace\": \"<string>\"\n },\n \"metal_lb_parameters\": {\n \"ip_address_pools\": [\n \"<string>\"\n ]\n }\n },\n \"labels_groups\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"secret_manager_accesses\": [\n {\n \"name\": \"<string>\",\n \"endpoint\": {\n \"mode\": \"AWS_SECRET_MANAGER\",\n \"region\": \"<string>\"\n },\n \"authentication\": {\n \"mode\": \"AUTOMATICALLY_CONFIGURED\"\n },\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.qovery.com/organization/{organizationId}/cluster")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"region\": \"<string>\",\n \"description\": \"<string>\",\n \"cloud_provider_credentials\": {\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n },\n \"region\": \"<string>\"\n },\n \"min_running_nodes\": 1,\n \"max_running_nodes\": 1,\n \"disk_size\": 50,\n \"disk_iops\": 7800,\n \"disk_throughput\": 255,\n \"instance_type\": \"T3A_LARGE\",\n \"kubernetes\": \"MANAGED\",\n \"production\": true,\n \"ssh_keys\": [\n \"<string>\"\n ],\n \"features\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"value\": \"<string>\"\n }\n ],\n \"metrics_parameters\": {\n \"enabled\": true,\n \"configuration\": {\n \"kind\": \"MANAGED_BY_QOVERY\",\n \"high_availability\": true\n }\n },\n \"infrastructure_charts_parameters\": {\n \"nginx_parameters\": {\n \"replica_count\": 1,\n \"default_ssl_certificate\": \"<string>\",\n \"publish_status_address\": \"<string>\",\n \"annotation_metal_lb_load_balancer_ips\": \"<string>\",\n \"annotation_external_dns_kubernetes_target\": \"<string>\"\n },\n \"cert_manager_parameters\": {\n \"kubernetes_namespace\": \"<string>\"\n },\n \"metal_lb_parameters\": {\n \"ip_address_pools\": [\n \"<string>\"\n ]\n }\n },\n \"labels_groups\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"secret_manager_accesses\": [\n {\n \"name\": \"<string>\",\n \"endpoint\": {\n \"mode\": \"AWS_SECRET_MANAGER\",\n \"region\": \"<string>\"\n },\n \"authentication\": {\n \"mode\": \"AUTOMATICALLY_CONFIGURED\"\n },\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}"

response = http.request(request)
puts response.read_body
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "created_at": "2023-11-07T05:31:56Z",
  "organization": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
  },
  "name": "<string>",
  "region": "<string>",
  "updated_at": "2023-11-07T05:31:56Z",
  "description": "<string>",
  "min_running_nodes": 1,
  "max_running_nodes": 1,
  "disk_size": 50,
  "disk_iops": 7800,
  "disk_throughput": 255,
  "instance_type": "T3A_LARGE",
  "kubernetes": "MANAGED",
  "cpu": 10000,
  "memory": 4096,
  "estimated_cloud_provider_cost": 123,
  "has_access": true,
  "version": "<string>",
  "is_default": true,
  "is_demo": true,
  "production": true,
  "ssh_keys": [
    "<string>"
  ],
  "features": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "title": "<string>",
      "description": "<string>",
      "cost_per_month_in_cents": 9900,
      "cost_per_month": 99,
      "currency_code": "USD",
      "is_cloud_provider_paying_feature": true,
      "cloud_provider_feature_documentation": "https://cloud.provider.doc/feature",
      "is_qovery_paying_feature": true,
      "qovery_feature_documentation": "https://qovery.doc/feature",
      "value_type": "BOOLEAN",
      "value_object": {
        "value": "<string>"
      },
      "is_value_updatable": false,
      "accepted_values": [
        "<string>"
      ]
    }
  ],
  "metrics_parameters": {
    "enabled": true,
    "configuration": {
      "kind": "MANAGED_BY_QOVERY",
      "cloud_watch_export_config": {
        "enabled": true
      },
      "high_availability": true,
      "internal_network_monitoring": {
        "enabled": true
      },
      "alerting": {
        "enabled": true,
        "default_rule_labels": {},
        "spec_config_secret": "<string>",
        "spec_external_url": "<string>",
        "config_name": "<string>"
      }
    }
  },
  "infrastructure_outputs": {
    "kind": "AKS",
    "cluster_name": "<string>",
    "cluster_oidc_issuer": "<string>"
  },
  "infrastructure_charts_parameters": {
    "nginx_parameters": {
      "replica_count": 1,
      "default_ssl_certificate": "<string>",
      "publish_status_address": "<string>",
      "annotation_metal_lb_load_balancer_ips": "<string>",
      "annotation_external_dns_kubernetes_target": "<string>"
    },
    "cert_manager_parameters": {
      "kubernetes_namespace": "<string>"
    },
    "metal_lb_parameters": {
      "ip_address_pools": [
        "<string>"
      ]
    },
    "eks_anywhere_parameters": {
      "git_repository": {
        "url": "https://github.com/Qovery/eks-anywhere-config.git",
        "git_token_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "branch": "main",
        "commit_id": "4e3128725f47140002fa47d65d83195a51f5140f"
      },
      "yaml_file_path": "/clusters/cluster-a.yaml",
      "cluster_backup": {
        "s3": {
          "bucket": "<string>",
          "region": "<string>",
          "role_arn": "<string>",
          "key_prefix": "<string>"
        },
        "enabled": true,
        "timeout_seconds": 300,
        "certs_secret_name": "<string>"
      }
    }
  },
  "keda": {
    "enabled": true
  },
  "labels_groups": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
    }
  ],
  "secret_manager_accesses": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "name": "<string>",
      "created_at": "2023-11-07T05:31:56Z",
      "updated_at": "2023-11-07T05:31:56Z",
      "endpoint": {
        "mode": "AWS_SECRET_MANAGER",
        "region": "<string>"
      },
      "authentication": {
        "mode": "AUTOMATICALLY_CONFIGURED"
      }
    }
  ]
}

Authorizations

Authorization
string
header
required

JWT tokens should be used with OIDC account (human to machine). JWT tokens used by the Qovery console to communicate with the API have a TTL. Curl Example ' curl https://console.qovery.com/organization -H "Authorization: Bearer $qovery_token" '

Path Parameters

organizationId
string<uuid>
required

Organization ID

Body

application/json
name
string
required

name is case-insensitive

region
string
required
cloud_provider
enum<string>
required
Available options:
AWS,
SCW,
GCP,
DO,
AZURE,
OVH,
CIVO,
HETZNER,
ORACLE,
IBM,
ON_PREMISE
description
string
cloud_provider_credentials
object
min_running_nodes
integer
default:1
max_running_nodes
integer
default:1
disk_size
integer
default:40

Unit is in GB. The disk size to be used for the node configuration

Example:

50

disk_iops
integer

Unit is operation/seconds. The disk IOPS to be used for the node configuration

Required range: 3000 <= x <= 16000
Example:

7800

disk_throughput
integer

Unit is in MB/s. The disk thoughput to be used for the node configuration

Required range: 125 <= x <= 1000
Example:

255

instance_type
string

the instance type to be used for this cluster. The list of values can be retrieved via the endpoint /{CloudProvider}/instanceType

Example:

"T3A_LARGE"

kubernetes
enum<string>
default:MANAGED
Available options:
MANAGED,
SELF_MANAGED,
PARTIALLY_MANAGED
production
boolean

specific flag to indicate that this cluster is a production one

ssh_keys
string[]

Indicate your public ssh_key to remotely connect to your EC2 instance.

features
object[]
metrics_parameters
MetricsParameters · object
infrastructure_charts_parameters
object
keda
ClusterKeda · object
labels_groups
ClusterLabelsGroup · object[]
secret_manager_accesses
SecretManagerAccessRequestList · object[]

Response

Create cluster

id
string<uuid>
required
read-only
created_at
string<date-time>
required
read-only
organization
object
required
name
string
required

name is case-insensitive

region
string
required
cloud_provider
enum<string>
required
Available options:
AWS,
SCW,
GCP,
DO,
AZURE,
OVH,
CIVO,
HETZNER,
ORACLE,
IBM,
ON_PREMISE
updated_at
string<date-time>
read-only
description
string
min_running_nodes
integer
default:1
max_running_nodes
integer
default:1
disk_size
integer
default:20

Unit is in GB. The disk size to be used for the node configuration

Example:

50

disk_iops
integer

Unit is operation/seconds. The disk IOPS to be used for the node configuration

Required range: 3000 <= x <= 16000
Example:

7800

disk_throughput
integer

Unit is in MB/s. The disk thoughput to be used for the node configuration

Required range: 125 <= x <= 1000
Example:

255

instance_type
string

the instance type to be used for this cluster. The list of values can be retrieved via the endpoint /{CloudProvider}/instanceType

Example:

"T3A_LARGE"

kubernetes
enum<string>
default:MANAGED
Available options:
MANAGED,
SELF_MANAGED,
PARTIALLY_MANAGED
cpu
integer

unit is millicores (m). 1000m = 1 cpu

Example:

10000

memory
integer

unit is MB. 1024 MB = 1GB

Example:

4096

estimated_cloud_provider_cost
integer

This is an estimation of the cost this cluster will represent on your cloud proider bill, based on your current configuration

status
enum<string>
Available options:
BUILDING,
BUILD_ERROR,
CANCELED,
CANCELING,
DELETED,
DELETE_ERROR,
DELETE_QUEUED,
DELETING,
DEPLOYED,
DEPLOYING,
DEPLOYMENT_ERROR,
DEPLOYMENT_QUEUED,
DRY_RUN,
QUEUED,
READY,
STOPPED,
STOPPING,
STOP_ERROR,
STOP_QUEUED,
RESTART_QUEUED,
RESTARTING,
RESTARTED,
RESTART_ERROR,
INVALID_CREDENTIALS
has_access
boolean
version
string
is_default
boolean
is_demo
boolean

specific flag to indicate that this cluster is a demo one

production
boolean

specific flag to indicate that this cluster is a production one

ssh_keys
string[]

Indicate your public ssh_key to remotely connect to your EC2 instance.

features
object[]
deployment_status
enum<string>
Available options:
NEVER_DEPLOYED,
OUT_OF_DATE,
UP_TO_DATE
metrics_parameters
MetricsParameters · object
infrastructure_outputs
object
infrastructure_charts_parameters
object
keda
ClusterKeda · object
labels_groups
ClusterLabelsGroup · object[]
secret_manager_accesses
SecretManagerAccessList · object[]