List sanitized server inventory for the authenticated owner
curl --request GET \
--url https://api.kombify.io/v1/techstack/api/v1/inventory/servers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kombify.io/v1/techstack/api/v1/inventory/servers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kombify.io/v1/techstack/api/v1/inventory/servers', 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.kombify.io/v1/techstack/api/v1/inventory/servers",
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.kombify.io/v1/techstack/api/v1/inventory/servers"
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.kombify.io/v1/techstack/api/v1/inventory/servers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kombify.io/v1/techstack/api/v1/inventory/servers")
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{
"data": {
"observed_at": "2023-11-07T05:31:56Z",
"freshness": {
"state": "fresh",
"stale_after_seconds": 1,
"age_seconds": 1,
"reason_code": "<string>"
},
"inventory_revision": 1,
"collection_cursor": "<string>",
"page_size": 100,
"servers": [
{
"id": "<string>",
"name": "<string>",
"observed_at": "2023-11-07T05:31:56Z",
"freshness": {
"state": "fresh",
"stale_after_seconds": 1,
"age_seconds": 1,
"reason_code": "<string>"
},
"inventory_revision": 1,
"addresses": {
"public_ips": [
"<string>"
],
"private_ips": [
"<string>"
],
"local_ips": [
"<string>"
],
"domains": [
"<string>"
]
},
"platform": {
"os": "<string>",
"os_version": "<string>",
"arch": "<string>"
},
"stackkit": {
"name": "<string>",
"version": "<string>",
"variant": "<string>"
},
"lifecycle": {
"state": "<string>",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z"
},
"desired": {
"state": "running",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z"
},
"lease": {
"state": "<string>",
"id": "<string>"
},
"cleanup": {
"state": "not_requested",
"provider_absence_verified": true,
"verified_at": "2023-11-07T05:31:56Z"
},
"connection": {
"state": "<string>",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z",
"observed_at": "2023-11-07T05:31:56Z"
},
"health": {
"state": "<string>",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z",
"observed_at": "2023-11-07T05:31:56Z"
},
"stack_id": "<string>",
"provider": "<string>"
}
],
"next_cursor": "<string>"
},
"meta": {
"total": 123,
"page": 123,
"per_page": 123,
"managed_runtime_inventory_complete": true,
"worker_inventory_sha256": "<string>",
"managed_runtime_active_lease_ids": [
"<string>"
],
"managed_runtime_inactive_lease_ids": [
"<string>"
],
"managed_runtime_lease_generation_digests": [
{
"lease_id": "<string>",
"resource_generation_digest": "<string>"
}
],
"managed_runtime_duplicate_lease_ids": [
"<string>"
],
"managed_runtime_attachment_conflict_lease_ids": [
"<string>"
]
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}Inventory
List sanitized server inventory for the authenticated owner
Returns only servers owned by the authenticated subject in the trusted tenant context. Tenant and owner overrides are not accepted. Raw metadata, channel endpoints, provider-resource references, credentials, SSH material, tokens, and logs are never returned. The lease projection contains only an opaque identifier and state. Cursor pages share one authorization- and filter-bound collection watermark and exclude later inserts.
GET
/
api
/
v1
/
inventory
/
servers
List sanitized server inventory for the authenticated owner
curl --request GET \
--url https://api.kombify.io/v1/techstack/api/v1/inventory/servers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kombify.io/v1/techstack/api/v1/inventory/servers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kombify.io/v1/techstack/api/v1/inventory/servers', 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.kombify.io/v1/techstack/api/v1/inventory/servers",
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.kombify.io/v1/techstack/api/v1/inventory/servers"
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.kombify.io/v1/techstack/api/v1/inventory/servers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kombify.io/v1/techstack/api/v1/inventory/servers")
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{
"data": {
"observed_at": "2023-11-07T05:31:56Z",
"freshness": {
"state": "fresh",
"stale_after_seconds": 1,
"age_seconds": 1,
"reason_code": "<string>"
},
"inventory_revision": 1,
"collection_cursor": "<string>",
"page_size": 100,
"servers": [
{
"id": "<string>",
"name": "<string>",
"observed_at": "2023-11-07T05:31:56Z",
"freshness": {
"state": "fresh",
"stale_after_seconds": 1,
"age_seconds": 1,
"reason_code": "<string>"
},
"inventory_revision": 1,
"addresses": {
"public_ips": [
"<string>"
],
"private_ips": [
"<string>"
],
"local_ips": [
"<string>"
],
"domains": [
"<string>"
]
},
"platform": {
"os": "<string>",
"os_version": "<string>",
"arch": "<string>"
},
"stackkit": {
"name": "<string>",
"version": "<string>",
"variant": "<string>"
},
"lifecycle": {
"state": "<string>",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z"
},
"desired": {
"state": "running",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z"
},
"lease": {
"state": "<string>",
"id": "<string>"
},
"cleanup": {
"state": "not_requested",
"provider_absence_verified": true,
"verified_at": "2023-11-07T05:31:56Z"
},
"connection": {
"state": "<string>",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z",
"observed_at": "2023-11-07T05:31:56Z"
},
"health": {
"state": "<string>",
"reason_code": "<string>",
"changed_at": "2023-11-07T05:31:56Z",
"observed_at": "2023-11-07T05:31:56Z"
},
"stack_id": "<string>",
"provider": "<string>"
}
],
"next_cursor": "<string>"
},
"meta": {
"total": 123,
"page": 123,
"per_page": 123,
"managed_runtime_inventory_complete": true,
"worker_inventory_sha256": "<string>",
"managed_runtime_active_lease_ids": [
"<string>"
],
"managed_runtime_inactive_lease_ids": [
"<string>"
],
"managed_runtime_lease_generation_digests": [
{
"lease_id": "<string>",
"resource_generation_digest": "<string>"
}
],
"managed_runtime_duplicate_lease_ids": [
"<string>"
],
"managed_runtime_attachment_conflict_lease_ids": [
"<string>"
]
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "<string>",
"details": "<unknown>"
}
}التفويضات
OIDC/JWKS bearer token. Self-hosted defaults to Pocket ID; SaaS uses Auth0 through the edge. PocketBase JWT is legacy migration compatibility only.
معلمات الاستعلام
النطاق المطلوب:
1 <= x <= 200Maximum string length:
2048