Quote Spot bids
curl --request GET \
--url https://api.ornn.com/v1/markets/spot/books/{gpuSlug}/quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/markets/spot/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/spot/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/spot/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/spot/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/spot/books/{gpuSlug}/quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/markets/spot/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",
"fills": [
{
"pricePerGpuHourMicroUsd": 2650000,
"interruptsAt": "2026-10-21T00:00:00.000Z",
"interruptReason": "reservation"
},
{
"pricePerGpuHourMicroUsd": 2650000,
"interruptsAt": "2026-11-03T00:00:00.000Z",
"interruptReason": "listing_end"
}
]
}{
"detail": {
"code": "invalid_request",
"message": "Check the request details and try again."
}
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "order_book_not_found",
"message": "There is no spot market for that GPU type."
}
}{
"detail": {
"code": "invalid_gpus",
"message": "Spot orders take 1, 2, 4, or 8 GPUs."
}
}{
"code": "<string>",
"detail": "<string>"
}Quote Spot bids
Previews what identical bids placed now would fill at, one after another, without placing anything. Each fill shows the price you would pay and when spot on its node 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.
GET
/
v1
/
markets
/
spot
/
books
/
{gpuSlug}
/
quote
Quote Spot bids
curl --request GET \
--url https://api.ornn.com/v1/markets/spot/books/{gpuSlug}/quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/markets/spot/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/spot/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/spot/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/spot/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/spot/books/{gpuSlug}/quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/markets/spot/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",
"fills": [
{
"pricePerGpuHourMicroUsd": 2650000,
"interruptsAt": "2026-10-21T00:00:00.000Z",
"interruptReason": "reservation"
},
{
"pricePerGpuHourMicroUsd": 2650000,
"interruptsAt": "2026-11-03T00:00:00.000Z",
"interruptReason": "listing_end"
}
]
}{
"detail": {
"code": "invalid_request",
"message": "Check the request details and try again."
}
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"detail": {
"code": "order_book_not_found",
"message": "There is no spot market for that GPU type."
}
}{
"detail": {
"code": "invalid_gpus",
"message": "Spot orders take 1, 2, 4, or 8 GPUs."
}
}{
"code": "<string>",
"detail": "<string>"
}A quote places nothing. Read it immediately before placing bids to check the price and the 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 listSpotBooks.
Query Parameters
GPUs per VM.
Available options:
1, 2, 4, 8 limit or market.
Available options:
limit, market Required for limit: the most you would pay per GPU-hour, fees included.
Required range:
x >= 1How many identical bids to quote, from 1 to 16. Defaults to 1.
Required range:
1 <= x <= 16Was this page helpful?