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, RTX 5090, B200, RTX PRO 6000 WS"
}{
"error": "Unauthorized",
"message": "API key required. Use Authorization: Bearer YOUR_API_KEY"
}Query neo-cloud sites by region
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.
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, RTX 5090, 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. 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"
Response
Sites in the region.

