curl --request GET \
--url https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances \
--header 'Authorization: Bearer <token>'import requests
url = "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances', 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://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances",
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://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances"
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://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances")
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{
"instances": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"crn": "crn:compute:sa-saopaulo-1:my-account:instance/web-01",
"name": "web-server-01",
"flavor": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"crn": "crn:compute:sa-saopaulo-1:platform:flavor/s1.small",
"name": "s1.small"
},
"image": {
"id": "550e8400-e29b-41d4-a716-446655440004",
"crn": "crn:compute:sa-saopaulo-1:platform:image/ubuntu/architecture/amd64/version/24.04",
"name": "ubuntu"
},
"iam_role": {
"id": "550e8400-e29b-41d4-a716-446655440005",
"crn": "crn:iam:::role/550e8400-e29b-41d4-a716-446655440005",
"name": "instance-role"
},
"faults": [
{
"code": "BACKUP_FAILED",
"severity": "error",
"message": "Backup upload failed.",
"details": {},
"first_at": "2023-11-07T05:31:56Z",
"last_at": "2023-11-07T05:31:56Z",
"occurrences": 1
}
],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"desired_state": "running",
"current_state": "running",
"status": "healthy",
"proxy_ok": true,
"description": "Primary web server",
"task_state": null,
"user_data": "<string>",
"metadata": {
"environment": "production",
"team": "backend"
},
"tags": {
"environment": "production",
"team": "backend"
},
"launched_at": "2026-01-15T09:31:12Z",
"terminated_at": null,
"retirement": {
"requested_at": "2023-11-07T05:31:56Z",
"drain_seconds": 1815,
"agent_acknowledged_at": "2023-11-07T05:31:56Z",
"drain_until": "2023-11-07T05:31:56Z"
},
"agent_version": "1.4.2",
"last_seen": "2026-01-15T09:31:00Z"
}
],
"meta": {
"total": 150,
"limit": 20,
"marker": "550e8400-e29b-41d4-a716-446655440000",
"has_more": true
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Listar las instancias de un balanceador de carga
Lista instancias completas de compute pertenecientes a este balanceador, con los mismos filtros, orden y paginación que un pool de instancias. Cada instancia incluye ResourceRefs y campos del ciclo de vida, además de la salud del balanceador (status, proxy_ok, last_seen, agent_version) y detalles opcionales de retirada. El número de secuencia estable está en metadata["basalt:pool:sequence_num"]. status describe la salud del proxy; current_state describe el ciclo de vida de la instancia.
curl --request GET \
--url https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances \
--header 'Authorization: Bearer <token>'import requests
url = "https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances', 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://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances",
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://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances"
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://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://loadbalancer.{region}.basaltic.sh/v1/load-balancers/{id}/instances")
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{
"instances": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"crn": "crn:compute:sa-saopaulo-1:my-account:instance/web-01",
"name": "web-server-01",
"flavor": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"crn": "crn:compute:sa-saopaulo-1:platform:flavor/s1.small",
"name": "s1.small"
},
"image": {
"id": "550e8400-e29b-41d4-a716-446655440004",
"crn": "crn:compute:sa-saopaulo-1:platform:image/ubuntu/architecture/amd64/version/24.04",
"name": "ubuntu"
},
"iam_role": {
"id": "550e8400-e29b-41d4-a716-446655440005",
"crn": "crn:iam:::role/550e8400-e29b-41d4-a716-446655440005",
"name": "instance-role"
},
"faults": [
{
"code": "BACKUP_FAILED",
"severity": "error",
"message": "Backup upload failed.",
"details": {},
"first_at": "2023-11-07T05:31:56Z",
"last_at": "2023-11-07T05:31:56Z",
"occurrences": 1
}
],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"desired_state": "running",
"current_state": "running",
"status": "healthy",
"proxy_ok": true,
"description": "Primary web server",
"task_state": null,
"user_data": "<string>",
"metadata": {
"environment": "production",
"team": "backend"
},
"tags": {
"environment": "production",
"team": "backend"
},
"launched_at": "2026-01-15T09:31:12Z",
"terminated_at": null,
"retirement": {
"requested_at": "2023-11-07T05:31:56Z",
"drain_seconds": 1815,
"agent_acknowledged_at": "2023-11-07T05:31:56Z",
"drain_until": "2023-11-07T05:31:56Z"
},
"agent_version": "1.4.2",
"last_seen": "2026-01-15T09:31:00Z"
}
],
"meta": {
"total": 150,
"limit": 20,
"marker": "550e8400-e29b-41d4-a716-446655440000",
"has_more": true
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}loadbalancer:GetLoadBalancer. Consulta permisos de balanceadores de carga para obtener la lista completa, lo que cubre cada una y un ejemplo de directiva.Autorizaciones
Un token bearer de OAuth 2.0, enviado como Authorization: Bearer <token>. Esta es la forma recomendada de autenticación.
Obtén el token intercambiando el par de claves de acceso de una cuenta de servicio en POST /v1/oauth/token con grant_type=client_credentials. Es el flujo estándar de credenciales de cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar el token por ti.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \ https://iam.basaltic.sh/v1/oauth/token
Los tokens duran una hora por defecto. El mismo par de claves de acceso también sirve como credencial AWS SigV4 para el endpoint de objetos compatible con S3, que solo acepta ese método de autenticación.
Parámetros de ruta
"4e1f8c2a-9b3d-4f6e-8a1c-2d5e7f9a0b3c"
Parámetros de consulta
CRN exacto del recurso, intersecado con todos los demás filtros antes de la paginación. Un CRN extranjero o no coincidente devuelve una página vacía; los CRN mal formados o vacíos devuelven 400. Las listas de archivos adjuntos anidados filtran el recurso representado, no el enlace.
Número máximo de artículos a devolver. Un valor por encima del máximo se le aplica en lugar de rechazarlo, por lo que una página más corta que la que solicitaste es normal — page until meta.has_more es falso, no hasta que una página se vea corta.
1 <= x <= 100Cursor de paginación opaco. Hacer eco del valor meta.marker de la página anterior para buscar la siguiente; no construirlo ni analizarlo. La forma interna del token varía según el punto final (un ID de recurso, una marca de tiempo, etc.) y no se garantiza su estabilidad entre versiones.
Nombre exacto, que distinga entre mayúsculas y minúsculas. Los valores vacíos no coinciden con recursos con nombre. Las listas de NIC de instancia coinciden con los nombres de interfaz dentro de las vinculaciones de instancia; pueden coincidir varias interfaces con el mismo nombre. Las IP flotantes no tienen identidad de nombre y devuelven una lista vacía para este filtro.
Filtrar por dónde están las instancias.
Donde se encuentra una instancia. Los estados de transición viven aquí, no en desired_state — nadie pide stopping.
pending, building, running, stopping, stopped, rebooting, migrating, deleting, deleted, error, crashed, paused, suspended Filtrar por referencia de tipo de instancia regional (UUID, CRN o nombre exacto).
"a1b2c3d4-e5f6-4789-9abc-def012345678"
Filtrar por referencia de imagen (UUID, CRN o nombre; las imágenes también aceptan nombre:versión).
"550e8400-e29b-41d4-a716-446655440001"

