curl --request PUT \
--url https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form bios_type=seabios \
--form sev_snp_enabled=false \
--form guest_agent_enabled=true \
--form tpm_enabled=true \
--form measured_boot_enabled=false \
--form measured_boot_kernel.0='@example-file' \
--form measured_boot_kernel.1='@example-file' \
--form measured_boot_initrd.0='@example-file' \
--form measured_boot_initrd.1='@example-file'import requests
url = "https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options"
files = {
"measured_boot_kernel.0": ("example-file", open("example-file", "rb")),
"measured_boot_kernel.1": ("example-file", open("example-file", "rb")),
"measured_boot_initrd.0": ("example-file", open("example-file", "rb")),
"measured_boot_initrd.1": ("example-file", open("example-file", "rb"))
}
payload = {
"bios_type": "seabios",
"sev_snp_enabled": "false",
"guest_agent_enabled": "true",
"tpm_enabled": "true",
"measured_boot_enabled": "false"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('bios_type', 'seabios');
form.append('sev_snp_enabled', 'false');
form.append('guest_agent_enabled', 'true');
form.append('tpm_enabled', 'true');
form.append('measured_boot_enabled', 'false');
form.append('measured_boot_kernel.0', '{
"fileName": "example-file"
}');
form.append('measured_boot_kernel.1', '{
"fileName": "example-file"
}');
form.append('measured_boot_initrd.0', '{
"fileName": "example-file"
}');
form.append('measured_boot_initrd.1', '{
"fileName": "example-file"
}');
const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options', 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://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"bios_type": "seabios",
"sev_snp_enabled": false,
"sev_snp_supported": false,
"guest_agent_enabled": true,
"tpm_enabled": false
}{
"message": "Unauthenticated."
}{
"message": "This API key is not allowed to do that in this team. It needs the \"snapshot.delete\" permission."
}{
"message": "Not found."
}{
"message": "The name field is required.",
"errors": {}
}{
"message": "Too Many Attempts."
}Update hardware settings
Overview
Updates hardware settings and returns the complete settings. Send only changed fields: bios_type, sev_snp_enabled, guest_agent_enabled or tpm_enabled. Firmware and memory encryption require powering off and on. Memory encryption requires UEFI and sev_snp_supported=true. Disabling the TPM permanently deletes its state and can make TPM-protected data inaccessible.
Permissions
Requires the server.update (Change server settings) permission for the selected team. Resources outside that team return 404.
curl --request PUT \
--url https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form bios_type=seabios \
--form sev_snp_enabled=false \
--form guest_agent_enabled=true \
--form tpm_enabled=true \
--form measured_boot_enabled=false \
--form measured_boot_kernel.0='@example-file' \
--form measured_boot_kernel.1='@example-file' \
--form measured_boot_initrd.0='@example-file' \
--form measured_boot_initrd.1='@example-file'import requests
url = "https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options"
files = {
"measured_boot_kernel.0": ("example-file", open("example-file", "rb")),
"measured_boot_kernel.1": ("example-file", open("example-file", "rb")),
"measured_boot_initrd.0": ("example-file", open("example-file", "rb")),
"measured_boot_initrd.1": ("example-file", open("example-file", "rb"))
}
payload = {
"bios_type": "seabios",
"sev_snp_enabled": "false",
"guest_agent_enabled": "true",
"tpm_enabled": "true",
"measured_boot_enabled": "false"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('bios_type', 'seabios');
form.append('sev_snp_enabled', 'false');
form.append('guest_agent_enabled', 'true');
form.append('tpm_enabled', 'true');
form.append('measured_boot_enabled', 'false');
form.append('measured_boot_kernel.0', '{
"fileName": "example-file"
}');
form.append('measured_boot_kernel.1', '{
"fileName": "example-file"
}');
form.append('measured_boot_initrd.0', '{
"fileName": "example-file"
}');
form.append('measured_boot_initrd.1', '{
"fileName": "example-file"
}');
const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options', 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://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.advinservers.com/api/v1/client/servers/{server}/settings/hardware/options")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bios_type\"\r\n\r\nseabios\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sev_snp_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guest_agent_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tpm_enabled\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_enabled\"\r\n\r\nfalse\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_kernel.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"measured_boot_initrd.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"bios_type": "seabios",
"sev_snp_enabled": false,
"sev_snp_supported": false,
"guest_agent_enabled": true,
"tpm_enabled": false
}{
"message": "Unauthenticated."
}{
"message": "This API key is not allowed to do that in this team. It needs the \"snapshot.delete\" permission."
}{
"message": "Not found."
}{
"message": "The name field is required.",
"errors": {}
}{
"message": "Too Many Attempts."
}Authorizations
Your API key, sent as a bearer token. Create one in the control panel under API Keys, give it only the permissions the integration needs, and copy it when it is created. It cannot be shown again. Each key is restricted to one owned team. The key determines the team for every request.
Path Parameters
The server UUID
"ecc6f4f1"
Body
Send a JSON object containing the fields below. Required fields are marked in the schema.
The value of bios_type.
ovmf, seabios Whether sev snp is enabled.
Whether guest agent is enabled.
Whether tpm is enabled.
Select measured direct boot for the next start. This does not verify the running OS.
The UUID of a Boot Images library entry in the server’s team. Select this instead of uploading boot files.
The Linux kernel file, up to 64 MiB. Send both boot files together.
The matching initramfs file, up to 128 MiB.
The SHA-256 checksum calculated from your trusted kernel file.
^[a-fA-F0-9]{64}$The SHA-256 checksum calculated from your trusted initramfs file.
^[a-fA-F0-9]{64}$The exact kernel command line. Spaces are preserved; single quotes, backslashes and control characters are refused. Never include secrets.
~^[\x20-\x26\x28-\x5b\x5d-\x7e]{1,4096}$~Response
The record, as a JSON object. There is no envelope.
The boot firmware: seabios is legacy BIOS and ovmf is UEFI.
seabios, ovmf "seabios"
Whether memory encryption is switched on for this server.
false
Whether the host supports memory encryption. Enabling encryption is rejected if this is false.
false
Whether the guest agent is enabled.
true
Whether the server has a virtual TPM 2.0 device.
false