Get cluster metrics
curl --request GET \
--url https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics \
--header 'X-API-Key: <api-key>' \
--header 'X-Project-ID: <x-project-id>'import requests
url = "https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics"
headers = {
"X-Project-ID": "<x-project-id>",
"X-API-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Project-ID': '<x-project-id>', 'X-API-Key': '<api-key>'}
};
fetch('https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics', 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.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>",
"X-Project-ID: <x-project-id>"
],
]);
$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.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Project-ID", "<x-project-id>")
req.Header.Add("X-API-Key", "<api-key>")
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.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics")
.header("X-Project-ID", "<x-project-id>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Project-ID"] = '<x-project-id>'
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"cpu_used_millicores": 123,
"cpu_capacity_millicores": 123,
"mem_used_bytes": 123,
"mem_capacity_bytes": 123,
"pod_count": 123,
"pod_capacity": 123,
"nodes_ready": 123,
"nodes_total": 123,
"nodes": [
{
"name": "<string>",
"internal_ip": "<string>",
"roles": "control-plane,etcd",
"ready": true,
"cpu_used_millicores": 123,
"cpu_capacity_millicores": 123,
"mem_used_bytes": 123,
"mem_capacity_bytes": 123
}
],
"control_plane": {
"sampled_at": "2023-11-07T05:31:56Z",
"etcd_p99_ms": 123,
"etcd_p99_ms_max_24h": 123,
"apiserver_5xx_24h": 123,
"restarts_apiserver_24h": 123,
"restarts_etcd_24h": 123,
"restarts_scheduler_24h": 123,
"restarts_controller_24h": 123,
"restarts_cilium_op_24h": 123,
"leader_changes_24h": 123,
"not_ready_minutes_24h": 123,
"nodes_not_ready": 123
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Observability
Get Cluster Metrics
Live utilization (CPU, memory, pods, per-node breakdown) plus a 24-hour control-plane health summary. Values refresh every 60 seconds.
GET
/
api
/
v1
/
k8s
/
clusters
/
{cluster_id}
/
metrics
Get cluster metrics
curl --request GET \
--url https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics \
--header 'X-API-Key: <api-key>' \
--header 'X-Project-ID: <x-project-id>'import requests
url = "https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics"
headers = {
"X-Project-ID": "<x-project-id>",
"X-API-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Project-ID': '<x-project-id>', 'X-API-Key': '<api-key>'}
};
fetch('https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics', 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.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>",
"X-Project-ID: <x-project-id>"
],
]);
$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.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Project-ID", "<x-project-id>")
req.Header.Add("X-API-Key", "<api-key>")
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.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics")
.header("X-Project-ID", "<x-project-id>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rafftechnologies.com/api/v1/k8s/clusters/{cluster_id}/metrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Project-ID"] = '<x-project-id>'
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"cpu_used_millicores": 123,
"cpu_capacity_millicores": 123,
"mem_used_bytes": 123,
"mem_capacity_bytes": 123,
"pod_count": 123,
"pod_capacity": 123,
"nodes_ready": 123,
"nodes_total": 123,
"nodes": [
{
"name": "<string>",
"internal_ip": "<string>",
"roles": "control-plane,etcd",
"ready": true,
"cpu_used_millicores": 123,
"cpu_capacity_millicores": 123,
"mem_used_bytes": 123,
"mem_capacity_bytes": 123
}
],
"control_plane": {
"sampled_at": "2023-11-07T05:31:56Z",
"etcd_p99_ms": 123,
"etcd_p99_ms_max_24h": 123,
"apiserver_5xx_24h": 123,
"restarts_apiserver_24h": 123,
"restarts_etcd_24h": 123,
"restarts_scheduler_24h": 123,
"restarts_controller_24h": 123,
"restarts_cilium_op_24h": 123,
"leader_changes_24h": 123,
"not_ready_minutes_24h": 123,
"nodes_not_ready": 123
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Updated August 24, 2026
Authorizations
API key for authentication. Each key is bound to a specific account.
Headers
Project ID. Required for all mutating operations (create, delete, power actions, resize).
Path Parameters
Cluster ID (short id, e.g. q7z7zg)
Response
Cluster metrics
Show child attributes
Show child attributes
24-hour control-plane health summary, sampled every minute. Absent until the first sample after the cluster starts running.
Show child attributes
Show child attributes
Last modified on August 24, 2026
⌘I