curl --request GET \
--url https://catalog.basaltic.sh/v1/regionsimport requests
url = "https://catalog.basaltic.sh/v1/regions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://catalog.basaltic.sh/v1/regions', 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://catalog.basaltic.sh/v1/regions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://catalog.basaltic.sh/v1/regions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://catalog.basaltic.sh/v1/regions")
.asString();require 'uri'
require 'net/http'
url = URI("https://catalog.basaltic.sh/v1/regions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"regions": [
{
"state": "active",
"crn": "crn:catalog::platform:region/sa-saopaulo-1",
"code": "sa-saopaulo-1",
"name": "São Paulo 1",
"location": "São Paulo, Brazil",
"country_code": "BR"
}
],
"default": "sa-saopaulo-1",
"meta": {
"limit": 1,
"has_more": false
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests, please try again later",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}List regions
List published regions, including planned and retiring locations. No authentication is required. Requests are rate-limited per client IP. Exact name and CRN filters combine with AND; an empty name matches nothing and an empty or malformed CRN returns 400. The default is the configured accepting region if it is in the result, otherwise the first accepting region by code, or an empty string when none accepts new resources.
Successful responses may be cached privately for 60 seconds. Discovery does not grant provisioning permissions or guarantee capacity or health. A catalog outage or retirement does not delete resources or change their existing placement.
curl --request GET \
--url https://catalog.basaltic.sh/v1/regionsimport requests
url = "https://catalog.basaltic.sh/v1/regions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://catalog.basaltic.sh/v1/regions', 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://catalog.basaltic.sh/v1/regions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://catalog.basaltic.sh/v1/regions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://catalog.basaltic.sh/v1/regions")
.asString();require 'uri'
require 'net/http'
url = URI("https://catalog.basaltic.sh/v1/regions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"regions": [
{
"state": "active",
"crn": "crn:catalog::platform:region/sa-saopaulo-1",
"code": "sa-saopaulo-1",
"name": "São Paulo 1",
"location": "São Paulo, Brazil",
"country_code": "BR"
}
],
"default": "sa-saopaulo-1",
"meta": {
"limit": 1,
"has_more": false
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests, please try again later",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Query Parameters
Exact resource name, combined with crn using AND before pagination. Empty values are filters. Resources without a name never match.
Exact returned CRN, combined with name using AND before pagination. Malformed or empty CRNs return 400; valid mismatched or foreign CRNs return an empty page. Resources without a CRN never match. Organization-scoped CRNs use the authenticated organization.

