curl --request GET \
--url https://billing.basaltic.sh/v1/pricesimport requests
url = "https://billing.basaltic.sh/v1/prices"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://billing.basaltic.sh/v1/prices', 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://billing.basaltic.sh/v1/prices",
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://billing.basaltic.sh/v1/prices"
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://billing.basaltic.sh/v1/prices")
.asString();require 'uri'
require 'net/http'
url = URI("https://billing.basaltic.sh/v1/prices")
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{
"prices": [
{
"sku": "compute.instance.s1.medium",
"service": "compute",
"resource_type": "instance",
"name": "s1.medium",
"unit": "hour",
"unit_price": "0.085",
"currency": "BRL",
"metadata": {
"class": "shared",
"vcpus": 2,
"memory_gb": 4
},
"description": "2 vCPU, 4 GB RAM"
}
],
"as_of": "2023-11-07T05:31:56Z"
}{
"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"
}
}Listar preços de catálogo
O catálogo de preços públicos — cada taxa cobrada pela plataforma, em vigor agora (ou em at). Esse endpoint é público e não requer credenciais: as taxas são idênticas para cada chamador, sem descontos específicos de conta ou termos de uso comprometido, portanto, não há nada de tenant-scope para proteger. Ele existe para que o site de marketing e o console leiam os preços do faturamento em vez de espelhá-los na fonte, onde eles variam toda vez que uma migração recomeça.
Como não requer credenciais, as solicitações são limitadas por taxa por IP do cliente. As respostas carregam um curto Cache-Control público — o catálogo muda em uma migração, não em uma solicitação.
curl --request GET \
--url https://billing.basaltic.sh/v1/pricesimport requests
url = "https://billing.basaltic.sh/v1/prices"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://billing.basaltic.sh/v1/prices', 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://billing.basaltic.sh/v1/prices",
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://billing.basaltic.sh/v1/prices"
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://billing.basaltic.sh/v1/prices")
.asString();require 'uri'
require 'net/http'
url = URI("https://billing.basaltic.sh/v1/prices")
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{
"prices": [
{
"sku": "compute.instance.s1.medium",
"service": "compute",
"resource_type": "instance",
"name": "s1.medium",
"unit": "hour",
"unit_price": "0.085",
"currency": "BRL",
"metadata": {
"class": "shared",
"vcpus": 2,
"memory_gb": 4
},
"description": "2 vCPU, 4 GB RAM"
}
],
"as_of": "2023-11-07T05:31:56Z"
}{
"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"
}
}Parâmetros de consulta
Apenas SKUs faturados por este serviço.
"compute"
"instance"
Exatamente um SKU.
"compute.instance.s1.medium"
Apenas SKUs cujo metadata.family corresponde — como os produtos gerenciados são separados dos tipos de instância de computação geral.
"loadbalancer"
Leia o catálogo a partir deste instante em vez de agora, para mostrar um preço histórico. RFC 3339.
"2026-01-01T00:00:00Z"

