curl --request POST \
--url https://api.ornn.com/commerce/reservations/{reservationId}/activate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/commerce/reservations/{reservationId}/activate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ornn.com/commerce/reservations/{reservationId}/activate', 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}/activate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ornn.com/commerce/reservations/{reservationId}/activate"
req, _ := http.NewRequest("POST", url, nil)
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.post("https://api.ornn.com/commerce/reservations/{reservationId}/activate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/commerce/reservations/{reservationId}/activate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"reservationId": "11111111-1111-4111-8111-111111111111",
"customerId": "22222222-2222-4222-8222-222222222222",
"status": "active",
"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": "2026-10-15T00:02:11Z",
"pendingOperation": null
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "outside_reservation_window",
"message": "Activate this reservation during its reserved time window."
}
}{
"detail": {
"code": "controller_required",
"message": "Use the cluster lifecycle for Kubernetes or Slurm reservations."
}
}{
"code": "<string>",
"detail": "<string>"
}Activate a reservation
Requests machines for a VM or Bare Metal reservation during its reserved window. Ornn also activates reservations automatically when their window starts, so you only need this call to start sooner within the window or to retry a pending activation. A VM reservation gets one VM per reserved node, booted from the saved disk; a Bare Metal reservation is assigned its hosts. Activation does not install your SSH keys; launch access afterward. A 200 response means machines were requested, not that they are reachable. Repeating the call on an activated reservation returns it unchanged. If you receive 409 runtime_pending, repeat the same request. Kubernetes and Slurm reservations use the cluster routes instead. Requires an approved organization.
curl --request POST \
--url https://api.ornn.com/commerce/reservations/{reservationId}/activate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/commerce/reservations/{reservationId}/activate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ornn.com/commerce/reservations/{reservationId}/activate', 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}/activate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ornn.com/commerce/reservations/{reservationId}/activate"
req, _ := http.NewRequest("POST", url, nil)
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.post("https://api.ornn.com/commerce/reservations/{reservationId}/activate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/commerce/reservations/{reservationId}/activate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"reservationId": "11111111-1111-4111-8111-111111111111",
"customerId": "22222222-2222-4222-8222-222222222222",
"status": "active",
"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": "2026-10-15T00:02:11Z",
"pendingOperation": null
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "outside_reservation_window",
"message": "Activate this reservation during its reserved time window."
}
}{
"detail": {
"code": "controller_required",
"message": "Use the cluster lifecycle for Kubernetes or Slurm reservations."
}
}{
"code": "<string>",
"detail": "<string>"
}Authorizations
Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.
Path Parameters
Reservation ID.
Response
Activation requested. deployedAt is set when machines were requested.
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?