curl --request POST \
--url https://controller.simplecloud.app/v0/persistent-servers/convert-to-group \
--header 'Content-Type: application/json' \
--header 'X-Network-Credential: <api-key>' \
--header 'X-Network-ID: <x-network-id>' \
--data '
{
"deployment": {
"hosts": [
{
"name": "main-host-1",
"priority": 1
}
]
},
"scaling": {
"available_slots": 10,
"max_servers": 3,
"min_servers": 0,
"player_threshold": 0.8,
"scale_down": {
"idle_time": "3m",
"ignore_players": true
},
"scaling_mode": "SERVERS"
}
}
'import requests
url = "https://controller.simplecloud.app/v0/persistent-servers/convert-to-group"
payload = {
"deployment": { "hosts": [
{
"name": "main-host-1",
"priority": 1
}
] },
"scaling": {
"available_slots": 10,
"max_servers": 3,
"min_servers": 0,
"player_threshold": 0.8,
"scale_down": {
"idle_time": "3m",
"ignore_players": True
},
"scaling_mode": "SERVERS"
}
}
headers = {
"X-Network-ID": "<x-network-id>",
"X-Network-Credential": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Network-ID': '<x-network-id>',
'X-Network-Credential': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
deployment: {hosts: [{name: 'main-host-1', priority: 1}]},
scaling: {
available_slots: 10,
max_servers: 3,
min_servers: 0,
player_threshold: 0.8,
scale_down: {idle_time: '3m', ignore_players: true},
scaling_mode: 'SERVERS'
}
})
};
fetch('https://controller.simplecloud.app/v0/persistent-servers/convert-to-group', 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://controller.simplecloud.app/v0/persistent-servers/convert-to-group",
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([
'deployment' => [
'hosts' => [
[
'name' => 'main-host-1',
'priority' => 1
]
]
],
'scaling' => [
'available_slots' => 10,
'max_servers' => 3,
'min_servers' => 0,
'player_threshold' => 0.8,
'scale_down' => [
'idle_time' => '3m',
'ignore_players' => true
],
'scaling_mode' => 'SERVERS'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Network-Credential: <api-key>",
"X-Network-ID: <x-network-id>"
],
]);
$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://controller.simplecloud.app/v0/persistent-servers/convert-to-group"
payload := strings.NewReader("{\n \"deployment\": {\n \"hosts\": [\n {\n \"name\": \"main-host-1\",\n \"priority\": 1\n }\n ]\n },\n \"scaling\": {\n \"available_slots\": 10,\n \"max_servers\": 3,\n \"min_servers\": 0,\n \"player_threshold\": 0.8,\n \"scale_down\": {\n \"idle_time\": \"3m\",\n \"ignore_players\": true\n },\n \"scaling_mode\": \"SERVERS\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Network-ID", "<x-network-id>")
req.Header.Add("X-Network-Credential", "<api-key>")
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://controller.simplecloud.app/v0/persistent-servers/convert-to-group")
.header("X-Network-ID", "<x-network-id>")
.header("X-Network-Credential", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"deployment\": {\n \"hosts\": [\n {\n \"name\": \"main-host-1\",\n \"priority\": 1\n }\n ]\n },\n \"scaling\": {\n \"available_slots\": 10,\n \"max_servers\": 3,\n \"min_servers\": 0,\n \"player_threshold\": 0.8,\n \"scale_down\": {\n \"idle_time\": \"3m\",\n \"ignore_players\": true\n },\n \"scaling_mode\": \"SERVERS\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://controller.simplecloud.app/v0/persistent-servers/convert-to-group")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Network-ID"] = '<x-network-id>'
request["X-Network-Credential"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"deployment\": {\n \"hosts\": [\n {\n \"name\": \"main-host-1\",\n \"priority\": 1\n }\n ]\n },\n \"scaling\": {\n \"available_slots\": 10,\n \"max_servers\": 3,\n \"min_servers\": 0,\n \"player_threshold\": 0.8,\n \"scale_down\": {\n \"idle_time\": \"3m\",\n \"ignore_players\": true\n },\n \"scaling_mode\": \"SERVERS\"\n }\n}"
response = http.request(request)
puts response.read_body{
"active": true,
"created_at": "2023-01-01T12:00:00Z",
"deployment": {
"hosts": [
{
"name": "main-host-1",
"priority": 1
}
],
"strategy": "whitelist"
},
"max_memory": 2048,
"max_players": 50,
"min_memory": 1024,
"name": "lobby",
"priority": 10,
"properties": {},
"scaling": {
"available_slots": 10,
"max_servers": 3,
"min_servers": 0,
"player_threshold": 0.8,
"scale_down": {
"idle_time": "3m",
"ignore_players": true
},
"scaling_mode": "SERVERS"
},
"server_group_id": "123e4567-e89b-12d3-a456-426614174000",
"source": {
"blueprint": "123e4567-e89b-12d3-a456-426614174000",
"image": "ghcr.io/user/custom-image:latest",
"type": "blueprint"
},
"tags": [
"<string>"
],
"type": "SERVER",
"updated_at": "2023-01-01T12:00:00Z",
"workflows": {
"manual": [
"<string>"
],
"when": {
"start": [
"<string>"
],
"stop": [
"<string>"
]
}
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Convert a stopped persistent server to a group
Requires an inactive source with no server records. Copies shared settings and transfers plugin and collection assignments, then deletes the source atomically. Returns a new inactive group with a new ID. deployment.hosts must be supplied: [] allows all hosts (stored as an empty blacklist); a nonempty list is stored as a whitelist. Scaling must be supplied. World files and running instances are not migrated. Requires source read/delete and destination write permissions.
curl --request POST \
--url https://controller.simplecloud.app/v0/persistent-servers/convert-to-group \
--header 'Content-Type: application/json' \
--header 'X-Network-Credential: <api-key>' \
--header 'X-Network-ID: <x-network-id>' \
--data '
{
"deployment": {
"hosts": [
{
"name": "main-host-1",
"priority": 1
}
]
},
"scaling": {
"available_slots": 10,
"max_servers": 3,
"min_servers": 0,
"player_threshold": 0.8,
"scale_down": {
"idle_time": "3m",
"ignore_players": true
},
"scaling_mode": "SERVERS"
}
}
'import requests
url = "https://controller.simplecloud.app/v0/persistent-servers/convert-to-group"
payload = {
"deployment": { "hosts": [
{
"name": "main-host-1",
"priority": 1
}
] },
"scaling": {
"available_slots": 10,
"max_servers": 3,
"min_servers": 0,
"player_threshold": 0.8,
"scale_down": {
"idle_time": "3m",
"ignore_players": True
},
"scaling_mode": "SERVERS"
}
}
headers = {
"X-Network-ID": "<x-network-id>",
"X-Network-Credential": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Network-ID': '<x-network-id>',
'X-Network-Credential': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
deployment: {hosts: [{name: 'main-host-1', priority: 1}]},
scaling: {
available_slots: 10,
max_servers: 3,
min_servers: 0,
player_threshold: 0.8,
scale_down: {idle_time: '3m', ignore_players: true},
scaling_mode: 'SERVERS'
}
})
};
fetch('https://controller.simplecloud.app/v0/persistent-servers/convert-to-group', 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://controller.simplecloud.app/v0/persistent-servers/convert-to-group",
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([
'deployment' => [
'hosts' => [
[
'name' => 'main-host-1',
'priority' => 1
]
]
],
'scaling' => [
'available_slots' => 10,
'max_servers' => 3,
'min_servers' => 0,
'player_threshold' => 0.8,
'scale_down' => [
'idle_time' => '3m',
'ignore_players' => true
],
'scaling_mode' => 'SERVERS'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Network-Credential: <api-key>",
"X-Network-ID: <x-network-id>"
],
]);
$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://controller.simplecloud.app/v0/persistent-servers/convert-to-group"
payload := strings.NewReader("{\n \"deployment\": {\n \"hosts\": [\n {\n \"name\": \"main-host-1\",\n \"priority\": 1\n }\n ]\n },\n \"scaling\": {\n \"available_slots\": 10,\n \"max_servers\": 3,\n \"min_servers\": 0,\n \"player_threshold\": 0.8,\n \"scale_down\": {\n \"idle_time\": \"3m\",\n \"ignore_players\": true\n },\n \"scaling_mode\": \"SERVERS\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Network-ID", "<x-network-id>")
req.Header.Add("X-Network-Credential", "<api-key>")
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://controller.simplecloud.app/v0/persistent-servers/convert-to-group")
.header("X-Network-ID", "<x-network-id>")
.header("X-Network-Credential", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"deployment\": {\n \"hosts\": [\n {\n \"name\": \"main-host-1\",\n \"priority\": 1\n }\n ]\n },\n \"scaling\": {\n \"available_slots\": 10,\n \"max_servers\": 3,\n \"min_servers\": 0,\n \"player_threshold\": 0.8,\n \"scale_down\": {\n \"idle_time\": \"3m\",\n \"ignore_players\": true\n },\n \"scaling_mode\": \"SERVERS\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://controller.simplecloud.app/v0/persistent-servers/convert-to-group")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Network-ID"] = '<x-network-id>'
request["X-Network-Credential"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"deployment\": {\n \"hosts\": [\n {\n \"name\": \"main-host-1\",\n \"priority\": 1\n }\n ]\n },\n \"scaling\": {\n \"available_slots\": 10,\n \"max_servers\": 3,\n \"min_servers\": 0,\n \"player_threshold\": 0.8,\n \"scale_down\": {\n \"idle_time\": \"3m\",\n \"ignore_players\": true\n },\n \"scaling_mode\": \"SERVERS\"\n }\n}"
response = http.request(request)
puts response.read_body{
"active": true,
"created_at": "2023-01-01T12:00:00Z",
"deployment": {
"hosts": [
{
"name": "main-host-1",
"priority": 1
}
],
"strategy": "whitelist"
},
"max_memory": 2048,
"max_players": 50,
"min_memory": 1024,
"name": "lobby",
"priority": 10,
"properties": {},
"scaling": {
"available_slots": 10,
"max_servers": 3,
"min_servers": 0,
"player_threshold": 0.8,
"scale_down": {
"idle_time": "3m",
"ignore_players": true
},
"scaling_mode": "SERVERS"
},
"server_group_id": "123e4567-e89b-12d3-a456-426614174000",
"source": {
"blueprint": "123e4567-e89b-12d3-a456-426614174000",
"image": "ghcr.io/user/custom-image:latest",
"type": "blueprint"
},
"tags": [
"<string>"
],
"type": "SERVER",
"updated_at": "2023-01-01T12:00:00Z",
"workflows": {
"manual": [
"<string>"
],
"when": {
"start": [
"<string>"
],
"stop": [
"<string>"
]
}
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Network password or signed JWT. Password authentication also requires X-Network-ID and grants full access to that network. JWT permissions still apply.
Headers
Network ID
Query Parameters
Source persistent server ID
Body
Destination deployment and scaling
Response
Created
Response for creating a new server group
true
"2023-01-01T12:00:00Z"
Deployment configuration for a server group
Show child attributes
Show child attributes
2048
50
1024
"lobby"
10
Show child attributes
Show child attributes
Scaling configuration for server groups
Show child attributes
Show child attributes
"123e4567-e89b-12d3-a456-426614174000"
Source configuration for server groups
Show child attributes
Show child attributes
"SERVER"
"2023-01-01T12:00:00Z"
Workflows configuration for server groups
Show child attributes
Show child attributes
Was this page helpful?