curl "https://api.ornnai.com/api/neocloud/sites?city=Paris" \
-H "Authorization: Bearer YOUR_API_KEY"import requests
resp = requests.get(
"https://api.ornnai.com/api/neocloud/sites",
params={"city": "Paris"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
sites = resp.json()["sites"]
const res = await fetch(
"https://api.ornnai.com/api/neocloud/sites?city=Paris",
{ headers: { Authorization: "Bearer YOUR_API_KEY" } },
);
const { sites } = await res.json();
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ornnai.com/api/neocloud/sites",
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.ornnai.com/api/neocloud/sites"
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.ornnai.com/api/neocloud/sites")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornnai.com/api/neocloud/sites")
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{
"success": true,
"count": 5,
"query": {
"city": "Paris",
"scope": "neocloud",
"limit": 100,
"offset": 0
},
"sites": [
{
"company": "Lambda Labs",
"site_name": "Lambda Labs Paris",
"city": "Paris",
"country": "France",
"gpu_types": "H100 SXM",
"gpu_qty": 2000,
"power_capacity_mw": 2,
"chip_generation": "Hopper",
"category": "GPU-as-a-Service",
"key_customer": null,
"status": "Operational",
"dc_tier": "Tier III+",
"latitude": 48.8848,
"longitude": 2.2693,
"is_neocloud": true
}
]
}{
"error": "Bad request",
"message": "Invalid GPU type. Allowed: H100 SXM, H200, A100 SXM4, B200, RTX PRO 6000 WS"
}{
"error": "Unauthorized",
"message": "API key required. Use Authorization: Bearer YOUR_API_KEY"
}Query neo-cloud sites by region
GPU data-center sites in a region, by city, coordinates with radius, or country, with GPU types, quantity, and power capacity.
Return GPU data-center sites in a geographic region, looked up by city name, by coordinates with a radius, or by country name alone. Each site includes GPU types, quantity, power capacity, chip generation, business category, and key customer, along with its location. By default only neo-cloud sites (GPU-as-a-service providers) are returned. Pass scope=all to include the full site set (AI supercomputers and other GPU asset owners). A country-only query is the drill-down from /api/neocloud/sites/aggregate?by=country: pass a bucket’s key as country (and the same scope) to list the sites behind it, including the Unknown bucket for sites with no country on file. A large country can exceed the default limit=100 — page with limit/offset to reach the full bucket, or pass limit=all to return every matching site in one response.
curl "https://api.ornnai.com/api/neocloud/sites?city=Paris" \
-H "Authorization: Bearer YOUR_API_KEY"import requests
resp = requests.get(
"https://api.ornnai.com/api/neocloud/sites",
params={"city": "Paris"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
sites = resp.json()["sites"]
const res = await fetch(
"https://api.ornnai.com/api/neocloud/sites?city=Paris",
{ headers: { Authorization: "Bearer YOUR_API_KEY" } },
);
const { sites } = await res.json();
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ornnai.com/api/neocloud/sites",
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.ornnai.com/api/neocloud/sites"
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.ornnai.com/api/neocloud/sites")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ornnai.com/api/neocloud/sites")
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{
"success": true,
"count": 5,
"query": {
"city": "Paris",
"scope": "neocloud",
"limit": 100,
"offset": 0
},
"sites": [
{
"company": "Lambda Labs",
"site_name": "Lambda Labs Paris",
"city": "Paris",
"country": "France",
"gpu_types": "H100 SXM",
"gpu_qty": 2000,
"power_capacity_mw": 2,
"chip_generation": "Hopper",
"category": "GPU-as-a-Service",
"key_customer": null,
"status": "Operational",
"dc_tier": "Tier III+",
"latitude": 48.8848,
"longitude": 2.2693,
"is_neocloud": true
}
]
}{
"error": "Bad request",
"message": "Invalid GPU type. Allowed: H100 SXM, H200, A100 SXM4, B200, RTX PRO 6000 WS"
}{
"error": "Unauthorized",
"message": "API key required. Use Authorization: Bearer YOUR_API_KEY"
}Overview
Return GPU data-center sites in a geographic region, looked up by city name, by coordinates with a radius, or by country name alone. A country-only query is the drill-down from the aggregate endpoint: pass aby=country bucket’s key as country (and the same scope) to list the sites behind it, including the Unknown bucket for sites with no country on file. A large country can exceed the default limit=100 — page with limit/offset to reach the full bucket, or pass limit=all to return every matching site in one response. Each site includes GPU types, quantity, power capacity, chip generation, business category, and key customer, along with its location. By default only neo-cloud sites (GPU-as-a-service providers) are returned. Pass scope=all to include the full site set (AI supercomputers and other GPU asset owners).Authorizations
API key passed as a Bearer token. Create one in the dashboard.
Query Parameters
City name (matches city or site name).
"Paris"
Latitude for geo-radius query.
48.8566
Longitude for geo-radius query.
2.3522
Radius in km around lat/lng (default 50, max 500).
100
neocloud (default) or all.
neocloud, all Normalized country name. Works alone as the region (drill-down from the aggregate endpoint; 'Unknown' matches sites with no country on file), or narrows a city/coordinate query.
"France"
Filter by GPU type (substring match).
"H100"
Page size, 1-1000 (default 100). Pass all to return every matching site in one response.
Response
Sites in the region.

