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 precios de catálogo
El catálogo de precios públicos: todas las tarifas que cobra la plataforma, vigentes ahora (o en at). Este punto final es público y no requiere credenciales: las tarifas son idénticas para cada persona que llama, sin descuentos específicos de cuenta ni términos de uso comprometido, por lo que no hay nada que proteger en el ámbito del inquilino. Existe para que el sitio de marketing y la consola lean los precios de la facturación en lugar de reflejarlos en el origen, donde se desvían cada vez que se reinicia una migración.
Debido a que no requiere credenciales, las solicitudes están limitadas por la velocidad por IP del cliente. Las respuestas llevan un corto Cache-Control público — el catálogo cambia en una migración, no en una solicitud.
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
Solo SKU facturados por este servicio.
"compute"
"instance"
Exactamente un SKU.
"compute.instance.s1.medium"
Solo los SKU cuyo metadata.family coincida: cómo los productos administrados se separan de los tipos de instancia de cómputo generales.
"loadbalancer"
Lea el catálogo a partir de este instante en lugar de ahora, para mostrar un precio histórico. RFC3339.
"2026-01-01T00:00:00Z"

