curl --request GET \
--url https://api.ornn.com/v1/markets/books/{gpuSlug}/quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/markets/books/{gpuSlug}/quote"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ornn.com/v1/markets/books/{gpuSlug}/quote', 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/markets/books/{gpuSlug}/quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/v1/markets/books/{gpuSlug}/quote"
req, _ := http.NewRequest("GET", 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.get("https://api.ornn.com/v1/markets/books/{gpuSlug}/quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/markets/books/{gpuSlug}/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"gpuSlug": "nvidia_h100_sxm",
"saleType": "spot",
"region": null,
"nodes": [
{
"pricePerGpuHourMicroUsd": 2650000,
"gpus": 8,
"region": "us-east-11",
"interruptsAt": "2026-10-21T00:00:00.000Z",
"interruptReason": "reservation"
},
{
"pricePerGpuHourMicroUsd": 2650000,
"gpus": 8,
"region": "eu-west-2",
"interruptsAt": "2026-11-03T00:00:00.000Z",
"interruptReason": "listing_end"
}
]
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "order_book_not_found",
"message": "There is no order book for that GPU type."
}
}{
"detail": {
"code": "invalid_quantity",
"message": "Order one or more GPUs or one or more nodes."
}
}{
"code": "<string>",
"detail": "<string>"
}Quote a bid
Previews what a bid placed now would take, node by node in the order it would take them, without placing anything. Send exactly one of gpus or nodes; nodes needs orderType market. Each line shows the price you would pay per GPU-hour, the GPUs taken on that node, the location it would run at, and when it is next scheduled to end. Your own organization’s asks are skipped. The book can move before you bid; the quote is not a reservation of capacity.
curl --request GET \
--url https://api.ornn.com/v1/markets/books/{gpuSlug}/quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/markets/books/{gpuSlug}/quote"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ornn.com/v1/markets/books/{gpuSlug}/quote', 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/markets/books/{gpuSlug}/quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/v1/markets/books/{gpuSlug}/quote"
req, _ := http.NewRequest("GET", 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.get("https://api.ornn.com/v1/markets/books/{gpuSlug}/quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/markets/books/{gpuSlug}/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"gpuSlug": "nvidia_h100_sxm",
"saleType": "spot",
"region": null,
"nodes": [
{
"pricePerGpuHourMicroUsd": 2650000,
"gpus": 8,
"region": "us-east-11",
"interruptsAt": "2026-10-21T00:00:00.000Z",
"interruptReason": "reservation"
},
{
"pricePerGpuHourMicroUsd": 2650000,
"gpus": 8,
"region": "eu-west-2",
"interruptsAt": "2026-11-03T00:00:00.000Z",
"interruptReason": "listing_end"
}
]
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "order_book_not_found",
"message": "There is no order book for that GPU type."
}
}{
"detail": {
"code": "invalid_quantity",
"message": "Order one or more GPUs or one or more nodes."
}
}{
"code": "<string>",
"detail": "<string>"
}ornn market quote --gpu-slug <gpu-slug> --nodes 2.
A quote places nothing. Read it immediately before placing a bid to check each node’s price and its estimated interruption time.Authorizations
Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.
Path Parameters
Catalog GPU slug of the order book, from List order books.
Query Parameters
spot (the default): a reservation on the node can end the VM. on-demand: only you, the seller or the listing's end ends it.
spot, on-demand A region with an order book, for example us-east-11 (see GET /v1/markets/books). Omit for every location.
GPUs, one or more, taken from the lowest asks first; one node can supply part of them. Send this or nodes, not both.
x >= 1Nodes, one or more, with orderType market. Each node taken gives every GPU free on it, as one or more VMs. Send this or gpus, not both.
x >= 1limit or market.
limit, market Required for limit: the most you would pay per GPU-hour, fees included.
x >= 1Response
The nodes the bid would take now.
spot: a reservation on the node can end the VM. on-demand: only a stop or the listing's end ends it.
spot, on-demand The location quoted; null for any location.
One entry per node the bid would take now, in order, with the GPUs it would take there. Fewer GPUs or nodes than requested means the rest would rest (limit) or be cancelled (market).
Show child attributes
Show child attributes
Was this page helpful?