curl --request POST \
--url https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"provider": "AWS",
"region": "eu-west-3",
"credentials": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"platform": {
"templateKey": "<string>",
"templateVersion": "<string>",
"layerSelections": {},
"managedConfig": {}
},
"production": false,
"clusterInputs": {}
}
'import requests
url = "https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster"
payload = {
"name": "<string>",
"provider": "AWS",
"region": "eu-west-3",
"credentials": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a" },
"platform": {
"templateKey": "<string>",
"templateVersion": "<string>",
"layerSelections": {},
"managedConfig": {}
},
"production": False,
"clusterInputs": {}
}
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>',
provider: 'AWS',
region: 'eu-west-3',
credentials: {id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'},
platform: {
templateKey: '<string>',
templateVersion: '<string>',
layerSelections: {},
managedConfig: {}
},
production: false,
clusterInputs: {}
})
};
fetch('https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster', 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/v1/organization/{organizationId}/selfManagedCluster",
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>',
'provider' => 'AWS',
'region' => 'eu-west-3',
'credentials' => [
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'platform' => [
'templateKey' => '<string>',
'templateVersion' => '<string>',
'layerSelections' => [
],
'managedConfig' => [
]
],
'production' => false,
'clusterInputs' => [
]
]),
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/v1/organization/{organizationId}/selfManagedCluster"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"provider\": \"AWS\",\n \"region\": \"eu-west-3\",\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n },\n \"platform\": {\n \"templateKey\": \"<string>\",\n \"templateVersion\": \"<string>\",\n \"layerSelections\": {},\n \"managedConfig\": {}\n },\n \"production\": false,\n \"clusterInputs\": {}\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/v1/organization/{organizationId}/selfManagedCluster")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"provider\": \"AWS\",\n \"region\": \"eu-west-3\",\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n },\n \"platform\": {\n \"templateKey\": \"<string>\",\n \"templateVersion\": \"<string>\",\n \"layerSelections\": {},\n \"managedConfig\": {}\n },\n \"production\": false,\n \"clusterInputs\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster")
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 \"provider\": \"AWS\",\n \"region\": \"eu-west-3\",\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n },\n \"platform\": {\n \"templateKey\": \"<string>\",\n \"templateVersion\": \"<string>\",\n \"layerSelections\": {},\n \"managedConfig\": {}\n },\n \"production\": false,\n \"clusterInputs\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"production": true,
"provider": "AWS",
"region": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"credentials": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"registry": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "ECR"
},
"platform": {
"templateKey": "<string>",
"templateVersion": "<string>",
"layerSelections": {},
"managedConfig": {}
},
"clusterInputs": {},
"layers": [
{
"key": "<string>",
"status": "ENABLED",
"reason": "<string>",
"componentKeys": [
"<string>"
]
}
]
}Create a self-managed cluster run by the Qovery Operator
Creates a self-managed cluster on an existing AWS cloud credential of the organization. The organization’s plan must include self-managed clusters, otherwise the call answers 403. The credential only needs ECR permissions for the cluster itself, including ecr:DescribeRepositories in us-east-1, which Qovery calls to check the credential whatever the cluster region; features that call other AWS services with the credential, such as managed databases or Terraform services using the cluster credentials, need more. The credential, including its ECR access in the cluster region, and the platform configuration are checked before anything is created. One transaction then writes the cluster, its Qovery DNS and build providers, its default ECR registry derived from the credential, its initial deployment status, its platform configuration and its Qovery Operator enrollment. Only the AWS provider is supported. Install the Operator next with the cluster’s Operator bootstrap.
curl --request POST \
--url https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"provider": "AWS",
"region": "eu-west-3",
"credentials": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"platform": {
"templateKey": "<string>",
"templateVersion": "<string>",
"layerSelections": {},
"managedConfig": {}
},
"production": false,
"clusterInputs": {}
}
'import requests
url = "https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster"
payload = {
"name": "<string>",
"provider": "AWS",
"region": "eu-west-3",
"credentials": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a" },
"platform": {
"templateKey": "<string>",
"templateVersion": "<string>",
"layerSelections": {},
"managedConfig": {}
},
"production": False,
"clusterInputs": {}
}
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>',
provider: 'AWS',
region: 'eu-west-3',
credentials: {id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'},
platform: {
templateKey: '<string>',
templateVersion: '<string>',
layerSelections: {},
managedConfig: {}
},
production: false,
clusterInputs: {}
})
};
fetch('https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster', 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/v1/organization/{organizationId}/selfManagedCluster",
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>',
'provider' => 'AWS',
'region' => 'eu-west-3',
'credentials' => [
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'platform' => [
'templateKey' => '<string>',
'templateVersion' => '<string>',
'layerSelections' => [
],
'managedConfig' => [
]
],
'production' => false,
'clusterInputs' => [
]
]),
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/v1/organization/{organizationId}/selfManagedCluster"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"provider\": \"AWS\",\n \"region\": \"eu-west-3\",\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n },\n \"platform\": {\n \"templateKey\": \"<string>\",\n \"templateVersion\": \"<string>\",\n \"layerSelections\": {},\n \"managedConfig\": {}\n },\n \"production\": false,\n \"clusterInputs\": {}\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/v1/organization/{organizationId}/selfManagedCluster")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"provider\": \"AWS\",\n \"region\": \"eu-west-3\",\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n },\n \"platform\": {\n \"templateKey\": \"<string>\",\n \"templateVersion\": \"<string>\",\n \"layerSelections\": {},\n \"managedConfig\": {}\n },\n \"production\": false,\n \"clusterInputs\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qovery.com/v1/organization/{organizationId}/selfManagedCluster")
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 \"provider\": \"AWS\",\n \"region\": \"eu-west-3\",\n \"credentials\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n },\n \"platform\": {\n \"templateKey\": \"<string>\",\n \"templateVersion\": \"<string>\",\n \"layerSelections\": {},\n \"managedConfig\": {}\n },\n \"production\": false,\n \"clusterInputs\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organizationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"production": true,
"provider": "AWS",
"region": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"credentials": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"registry": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "ECR"
},
"platform": {
"templateKey": "<string>",
"templateVersion": "<string>",
"layerSelections": {},
"managedConfig": {}
},
"clusterInputs": {},
"layers": [
{
"key": "<string>",
"status": "ENABLED",
"reason": "<string>",
"componentKeys": [
"<string>"
]
}
]
}Authorizations
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
Organization ID
Body
AWS "eu-west-3"
AWS cloud credential of the organization that the cluster runs on. This operation only takes and returns its id.
Show child attributes
Show child attributes
Platform template release selected for a cluster, with its layer selections and component configuration. Sensitive managedConfig values are redacted in responses.
Show child attributes
Show child attributes
String values keyed first by component key and then by input key
Show child attributes
Show child attributes
Response
Created self-managed cluster
AWS, SCW, GCP, DO, AZURE, OVH, CIVO, HETZNER, ORACLE, IBM, ON_PREMISE AWS cloud credential of the organization that the cluster runs on. This operation only takes and returns its id.
Show child attributes
Show child attributes
Default ECR registry of the cluster, derived from its cloud credential and region.
Show child attributes
Show child attributes
Platform template release selected for a cluster, with its layer selections and component configuration. Sensitive managedConfig values are redacted in responses.
Show child attributes
Show child attributes
String values keyed first by component key and then by input key
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?