curl --request POST \
--url https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"mode": "reboot",
"request_id": "reboot-2026-10-16-a"
}
'import requests
url = "https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot"
payload = {
"mode": "reboot",
"request_id": "reboot-2026-10-16-a"
}
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({mode: 'reboot', request_id: 'reboot-2026-10-16-a'})
};
fetch('https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot', 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.ornn.com/v1/orchestrator/nodes/{node_id}/reboot",
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([
'mode' => 'reboot',
'request_id' => 'reboot-2026-10-16-a'
]),
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.ornn.com/v1/orchestrator/nodes/{node_id}/reboot"
payload := strings.NewReader("{\n \"mode\": \"reboot\",\n \"request_id\": \"reboot-2026-10-16-a\"\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.ornn.com/v1/orchestrator/nodes/{node_id}/reboot")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"mode\": \"reboot\",\n \"request_id\": \"reboot-2026-10-16-a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot")
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 \"mode\": \"reboot\",\n \"request_id\": \"reboot-2026-10-16-a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "33333333-3333-4333-8333-333333333333",
"node_id": "33333333-3333-4333-8333-333333333333",
"reservation_id": "11111111-1111-4111-8111-111111111111",
"packet_id": "99999999-9999-4999-8999-999999999999",
"mode": "reboot",
"reboot": {
"packet_id": "99999999-9999-4999-8999-999999999999",
"status": "in_progress",
"started_at": "2026-10-16T14:00:00Z",
"detail": null
}
}{
"detail": {
"code": "invalid_reboot_mode",
"message": "Choose reboot or hard reset."
}
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "node_not_found",
"message": "Ornn could not find that node in this cluster."
}
}{
"detail": {
"code": "reboot_in_progress",
"message": "This node is already rebooting. Wait for it to finish before requesting another action."
}
}{
"detail": {
"code": "reboot_enqueue_failed",
"message": "Ornn could not send the reboot to this machine. Try again in a moment."
}
}{
"code": "<string>",
"detail": "<string>"
}Reboot or hard reset a Bare Metal host
Reboots a Bare Metal host. A reboot keeps your Linux user, home directory, SSH keys, and attached volumes. hard_reset wipes tenant data on the host (Linux user, home directory, authorized keys, and temporary files) and then reboots; Ornn restores the reservation’s SSH keys afterward, so the reservation must have at least one. A reboot response includes reboot.status; poll the node until it is succeeded or failed, then confirm SSH. Another reboot request while one is in progress returns the existing reboot. Reuse the same request_id to retry safely without a second reboot. This route acts on hosts, not individual VMs: pass a node_id, never a VM id. To restart one VM, use POST /v1/orchestrator/nodes//virtual-machines//reboot. Nodes in a Kubernetes or Slurm cluster cannot be rebooted here.
curl --request POST \
--url https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"mode": "reboot",
"request_id": "reboot-2026-10-16-a"
}
'import requests
url = "https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot"
payload = {
"mode": "reboot",
"request_id": "reboot-2026-10-16-a"
}
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({mode: 'reboot', request_id: 'reboot-2026-10-16-a'})
};
fetch('https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot', 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.ornn.com/v1/orchestrator/nodes/{node_id}/reboot",
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([
'mode' => 'reboot',
'request_id' => 'reboot-2026-10-16-a'
]),
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.ornn.com/v1/orchestrator/nodes/{node_id}/reboot"
payload := strings.NewReader("{\n \"mode\": \"reboot\",\n \"request_id\": \"reboot-2026-10-16-a\"\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.ornn.com/v1/orchestrator/nodes/{node_id}/reboot")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"mode\": \"reboot\",\n \"request_id\": \"reboot-2026-10-16-a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/orchestrator/nodes/{node_id}/reboot")
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 \"mode\": \"reboot\",\n \"request_id\": \"reboot-2026-10-16-a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "33333333-3333-4333-8333-333333333333",
"node_id": "33333333-3333-4333-8333-333333333333",
"reservation_id": "11111111-1111-4111-8111-111111111111",
"packet_id": "99999999-9999-4999-8999-999999999999",
"mode": "reboot",
"reboot": {
"packet_id": "99999999-9999-4999-8999-999999999999",
"status": "in_progress",
"started_at": "2026-10-16T14:00:00Z",
"detail": null
}
}{
"detail": {
"code": "invalid_reboot_mode",
"message": "Choose reboot or hard reset."
}
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "node_not_found",
"message": "Ornn could not find that node in this cluster."
}
}{
"detail": {
"code": "reboot_in_progress",
"message": "This node is already rebooting. Wait for it to finish before requesting another action."
}
}{
"detail": {
"code": "reboot_enqueue_failed",
"message": "Ornn could not send the reboot to this machine. Try again in a moment."
}
}{
"code": "<string>",
"detail": "<string>"
}ornn machines reboot <node-id> and ornn machines reset <node-id> --erase-local-data.Authorizations
Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.
Path Parameters
A Bare Metal host node_id from the reservation's node list. Not a VM id.
Body
Omit the body for a plain reboot.
reboot keeps data on the host. hard_reset wipes tenant data on the host before rebooting.
reboot, hard_reset Optional client token. A repeated request with the same request_id returns the original request instead of rebooting again.
Response
The reboot or hard reset was queued. This does not mean the host is back.
The ID you passed in the path.
The host node being rebooted.
Identifier of the queued request.
reboot, hard_reset Reboot progress, or null for a hard reset.
Show child attributes
Show child attributes
Was this page helpful?