curl --request PUT \
--url https://api.ornn.com/commerce/reservations/{reservationId}/disk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vmDiskId": "77777777-7777-4777-8777-777777777777"
}
'import requests
url = "https://api.ornn.com/commerce/reservations/{reservationId}/disk"
payload = { "vmDiskId": "77777777-7777-4777-8777-777777777777" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({vmDiskId: '77777777-7777-4777-8777-777777777777'})
};
fetch('https://api.ornn.com/commerce/reservations/{reservationId}/disk', 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/commerce/reservations/{reservationId}/disk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'vmDiskId' => '77777777-7777-4777-8777-777777777777'
]),
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/commerce/reservations/{reservationId}/disk"
payload := strings.NewReader("{\n \"vmDiskId\": \"77777777-7777-4777-8777-777777777777\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.ornn.com/commerce/reservations/{reservationId}/disk")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vmDiskId\": \"77777777-7777-4777-8777-777777777777\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/commerce/reservations/{reservationId}/disk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"vmDiskId\": \"77777777-7777-4777-8777-777777777777\"\n}"
response = http.request(request)
puts response.read_body{
"reservationId": "11111111-1111-4111-8111-111111111111",
"customerId": "22222222-2222-4222-8222-222222222222",
"status": "confirmed",
"isSpot": false,
"provisioningType": "virtual-machine",
"gpuSlug": "h100",
"gpusPerNode": 8,
"reservedNodeCount": 1,
"reservedGpuCount": 8,
"startsAt": "2026-10-15T00:00:00Z",
"endsAt": "2026-10-22T00:00:00Z",
"vmDiskId": "77777777-7777-4777-8777-777777777777",
"deployedAt": null,
"pendingOperation": null
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "reservation_disk_locked",
"message": "Choose the disk before activating this reservation."
}
}{
"detail": {
"code": "disk_not_supported",
"message": "Only virtual machine reservations boot a disk."
}
}{
"code": "<string>",
"detail": "<string>"
}Choose a VM disk
Saves the disk Ornn boots when it creates this reservation’s VMs. Saving a disk does not launch anything. You can change the choice until the reservation is activated; after activation the disk is locked. Send null to clear the choice, in which case activation uses your organization’s newest disk, or an Ornn disk if your organization has none. Ornn checks that your organization can use the disk when it creates the VM. Bare Metal, Kubernetes, and Slurm reservations do not use a VM disk.
curl --request PUT \
--url https://api.ornn.com/commerce/reservations/{reservationId}/disk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vmDiskId": "77777777-7777-4777-8777-777777777777"
}
'import requests
url = "https://api.ornn.com/commerce/reservations/{reservationId}/disk"
payload = { "vmDiskId": "77777777-7777-4777-8777-777777777777" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({vmDiskId: '77777777-7777-4777-8777-777777777777'})
};
fetch('https://api.ornn.com/commerce/reservations/{reservationId}/disk', 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/commerce/reservations/{reservationId}/disk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'vmDiskId' => '77777777-7777-4777-8777-777777777777'
]),
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/commerce/reservations/{reservationId}/disk"
payload := strings.NewReader("{\n \"vmDiskId\": \"77777777-7777-4777-8777-777777777777\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.ornn.com/commerce/reservations/{reservationId}/disk")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vmDiskId\": \"77777777-7777-4777-8777-777777777777\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/commerce/reservations/{reservationId}/disk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"vmDiskId\": \"77777777-7777-4777-8777-777777777777\"\n}"
response = http.request(request)
puts response.read_body{
"reservationId": "11111111-1111-4111-8111-111111111111",
"customerId": "22222222-2222-4222-8222-222222222222",
"status": "confirmed",
"isSpot": false,
"provisioningType": "virtual-machine",
"gpuSlug": "h100",
"gpusPerNode": 8,
"reservedNodeCount": 1,
"reservedGpuCount": 8,
"startsAt": "2026-10-15T00:00:00Z",
"endsAt": "2026-10-22T00:00:00Z",
"vmDiskId": "77777777-7777-4777-8777-777777777777",
"deployedAt": null,
"pendingOperation": null
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "reservation_disk_locked",
"message": "Choose the disk before activating this reservation."
}
}{
"detail": {
"code": "disk_not_supported",
"message": "Only virtual machine reservations boot a disk."
}
}{
"code": "<string>",
"detail": "<string>"
}GET /v1/orchestrator/disks and use an entry’s id. The CLI does not set reservation disks. For the full flow, see Use the API.Authorizations
Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.
Path Parameters
Reservation ID.
Body
An Ornn disk or one of your organization's disks. Null clears the choice.
Response
The saved choice. The reservation now carries the disk in vmDiskId.
confirmed, active, completed, cancelled virtual-machine, bare-metal, kubernetes, slurm Your agreed reservation rate in integer micro-USD per GPU-hour, including any fee you pay. Historical reservations without a saved rate show the linked listing term price.
Original agreed duration in hours, separate from operational start and end dates. Renewable reservations retain this duration with a null end date. Null when no duration was agreed.
Whether the reservation contract permits renewal.
Was this page helpful?