curl --request GET \
--url https://api.ornn.com/v1/observability/nodes/{node_id}/telemetry/query \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/observability/nodes/{node_id}/telemetry/query"
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/observability/nodes/{node_id}/telemetry/query', 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/observability/nodes/{node_id}/telemetry/query",
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/observability/nodes/{node_id}/telemetry/query"
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/observability/nodes/{node_id}/telemetry/query")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/observability/nodes/{node_id}/telemetry/query")
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{
"tier": "full",
"windows": [
{
"metric": "gpu_utilization",
"start": "2026-10-14T11:00:00+00:00",
"end": "2026-10-14T11:00:00+00:00",
"mean": 87.5,
"median": 87.5,
"std": 0,
"min": 87.5,
"max": 87.5
}
]
}{
"error": "max_points_out_of_range"
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"error": "not_found"
}{
"code": "<string>",
"detail": "<string>"
}Query node telemetry history
Returns metric windows for a physical node over a time range, clamped to your reservation window. Ornn picks a resolution tier from the span and max_points. Set gpu_uuid to read one GPU’s history over at most 24 hours.
curl --request GET \
--url https://api.ornn.com/v1/observability/nodes/{node_id}/telemetry/query \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ornn.com/v1/observability/nodes/{node_id}/telemetry/query"
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/observability/nodes/{node_id}/telemetry/query', 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/observability/nodes/{node_id}/telemetry/query",
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/observability/nodes/{node_id}/telemetry/query"
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/observability/nodes/{node_id}/telemetry/query")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornn.com/v1/observability/nodes/{node_id}/telemetry/query")
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{
"tier": "full",
"windows": [
{
"metric": "gpu_utilization",
"start": "2026-10-14T11:00:00+00:00",
"end": "2026-10-14T11:00:00+00:00",
"mean": 87.5,
"median": 87.5,
"std": 0,
"min": 87.5,
"max": 87.5
}
]
}{
"error": "max_points_out_of_range"
}{
"code": "<string>",
"detail": "<string>"
}{
"code": "<string>",
"detail": "<string>"
}{
"error": "not_found"
}{
"code": "<string>",
"detail": "<string>"
}ornn machines metrics <machine> --start <time> --end <time> --max-points 240 --format json.Authorizations
Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.
Path Parameters
A physical node ID from List reserved GPU nodes.
Query Parameters
Range start, RFC 3339.
Range end, RFC 3339. An end at or before start returns no data.
Target number of points per metric, from 1 to 500. Defaults to 240.
1 <= x <= 500Comma-separated metric names. Omit for every customer metric. Accepted names are cpu_utilization, cpu_temperature, gpu_utilization, gpu_temperature, gpu_power_w, gpu_fan_speed_percent, component_temperature_max, memory_utilization, gpu_memory_utilization, storage_utilization, and ethernet_latency_ms; other names are ignored.
One GPU's UUID from the gpus reading. The range must span 24 hours or less.
Was this page helpful?