curl --request PATCH \
--url https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"health_check": {
"enabled": true,
"protocol": "http",
"path": "/healthz",
"port": 32767,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"matcher": "200-299,301"
},
"proxy_protocol": true,
"tags": {
"environment": "production",
"team": "backend"
}
}
'import requests
url = "https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}"
payload = {
"health_check": {
"enabled": True,
"protocol": "http",
"path": "/healthz",
"port": 32767,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"matcher": "200-299,301"
},
"proxy_protocol": True,
"tags": {
"environment": "production",
"team": "backend"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
health_check: {
enabled: true,
protocol: 'http',
path: '/healthz',
port: 32767,
interval_sec: 30,
timeout_sec: 5,
healthy_threshold: 3,
unhealthy_threshold: 3,
matcher: '200-299,301'
},
proxy_protocol: true,
tags: {environment: 'production', team: 'backend'}
})
};
fetch('https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}', 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/target-groups/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'health_check' => [
'enabled' => true,
'protocol' => 'http',
'path' => '/healthz',
'port' => 32767,
'interval_sec' => 30,
'timeout_sec' => 5,
'healthy_threshold' => 3,
'unhealthy_threshold' => 3,
'matcher' => '200-299,301'
],
'proxy_protocol' => true,
'tags' => [
'environment' => 'production',
'team' => 'backend'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}"
payload := strings.NewReader("{\n \"health_check\": {\n \"enabled\": true,\n \"protocol\": \"http\",\n \"path\": \"/healthz\",\n \"port\": 32767,\n \"interval_sec\": 30,\n \"timeout_sec\": 5,\n \"healthy_threshold\": 3,\n \"unhealthy_threshold\": 3,\n \"matcher\": \"200-299,301\"\n },\n \"proxy_protocol\": true,\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"health_check\": {\n \"enabled\": true,\n \"protocol\": \"http\",\n \"path\": \"/healthz\",\n \"port\": 32767,\n \"interval_sec\": 30,\n \"timeout_sec\": 5,\n \"healthy_threshold\": 3,\n \"unhealthy_threshold\": 3,\n \"matcher\": \"200-299,301\"\n },\n \"proxy_protocol\": true,\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"health_check\": {\n \"enabled\": true,\n \"protocol\": \"http\",\n \"path\": \"/healthz\",\n \"port\": 32767,\n \"interval_sec\": 30,\n \"timeout_sec\": 5,\n \"healthy_threshold\": 3,\n \"unhealthy_threshold\": 3,\n \"matcher\": \"200-299,301\"\n },\n \"proxy_protocol\": true,\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}"
response = http.request(request)
puts response.read_body{
"target_group": {
"id": "b8c9d0e1-f2a3-4456-b7c8-d9e0f1a2b3c4",
"crn": "crn:loadbalancer:sa-saopaulo-1:my-account:target-group/web-backends",
"account_id": "6f9619ff-8b86-4d01-b42d-00cf4fc964ff",
"name": "web-targets",
"protocol": "http",
"target_type": "instance",
"port": 8080,
"health_check": {
"enabled": true,
"protocol": "http",
"path": "/healthz",
"port": 8080,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"matcher": "200-299,301"
},
"proxy_protocol": false,
"session_affinity": {
"type": "cookie",
"cookie_name": "BASALTICLB",
"duration_sec": 86400
},
"target_mode": "static",
"tags": {
"environment": "production",
"team": "backend"
},
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"instance_pool_id": "a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7"
}
}{
"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"
}
}Actualizar las comprobaciones de estado, el encuadre o la afinidad de sesión de un grupo de destinos
curl --request PATCH \
--url https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"health_check": {
"enabled": true,
"protocol": "http",
"path": "/healthz",
"port": 32767,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"matcher": "200-299,301"
},
"proxy_protocol": true,
"tags": {
"environment": "production",
"team": "backend"
}
}
'import requests
url = "https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}"
payload = {
"health_check": {
"enabled": True,
"protocol": "http",
"path": "/healthz",
"port": 32767,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"matcher": "200-299,301"
},
"proxy_protocol": True,
"tags": {
"environment": "production",
"team": "backend"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
health_check: {
enabled: true,
protocol: 'http',
path: '/healthz',
port: 32767,
interval_sec: 30,
timeout_sec: 5,
healthy_threshold: 3,
unhealthy_threshold: 3,
matcher: '200-299,301'
},
proxy_protocol: true,
tags: {environment: 'production', team: 'backend'}
})
};
fetch('https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}', 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/target-groups/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'health_check' => [
'enabled' => true,
'protocol' => 'http',
'path' => '/healthz',
'port' => 32767,
'interval_sec' => 30,
'timeout_sec' => 5,
'healthy_threshold' => 3,
'unhealthy_threshold' => 3,
'matcher' => '200-299,301'
],
'proxy_protocol' => true,
'tags' => [
'environment' => 'production',
'team' => 'backend'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}"
payload := strings.NewReader("{\n \"health_check\": {\n \"enabled\": true,\n \"protocol\": \"http\",\n \"path\": \"/healthz\",\n \"port\": 32767,\n \"interval_sec\": 30,\n \"timeout_sec\": 5,\n \"healthy_threshold\": 3,\n \"unhealthy_threshold\": 3,\n \"matcher\": \"200-299,301\"\n },\n \"proxy_protocol\": true,\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"health_check\": {\n \"enabled\": true,\n \"protocol\": \"http\",\n \"path\": \"/healthz\",\n \"port\": 32767,\n \"interval_sec\": 30,\n \"timeout_sec\": 5,\n \"healthy_threshold\": 3,\n \"unhealthy_threshold\": 3,\n \"matcher\": \"200-299,301\"\n },\n \"proxy_protocol\": true,\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://loadbalancer.{region}.basaltic.sh/v1/target-groups/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"health_check\": {\n \"enabled\": true,\n \"protocol\": \"http\",\n \"path\": \"/healthz\",\n \"port\": 32767,\n \"interval_sec\": 30,\n \"timeout_sec\": 5,\n \"healthy_threshold\": 3,\n \"unhealthy_threshold\": 3,\n \"matcher\": \"200-299,301\"\n },\n \"proxy_protocol\": true,\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n }\n}"
response = http.request(request)
puts response.read_body{
"target_group": {
"id": "b8c9d0e1-f2a3-4456-b7c8-d9e0f1a2b3c4",
"crn": "crn:loadbalancer:sa-saopaulo-1:my-account:target-group/web-backends",
"account_id": "6f9619ff-8b86-4d01-b42d-00cf4fc964ff",
"name": "web-targets",
"protocol": "http",
"target_type": "instance",
"port": 8080,
"health_check": {
"enabled": true,
"protocol": "http",
"path": "/healthz",
"port": 8080,
"interval_sec": 30,
"timeout_sec": 5,
"healthy_threshold": 3,
"unhealthy_threshold": 3,
"matcher": "200-299,301"
},
"proxy_protocol": false,
"session_affinity": {
"type": "cookie",
"cookie_name": "BASALTICLB",
"duration_sec": 86400
},
"target_mode": "static",
"tags": {
"environment": "production",
"team": "backend"
},
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"instance_pool_id": "a1b2c3d4-e5f6-4789-a0b1-c2d3e4f5a6b7"
}
}{
"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"
}
}loadbalancer:UpdateTargetGroup. 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
UUID, CRN o nombre exacto del ámbito de la cuenta
"b8c9d0e1-f2a3-4456-b7c8-d9e0f1a2b3c4"
Cuerpo
Los nombres se fijan en la creación porque forman el CRN utilizado por las directivas de IAM. El envío de nombre en una actualización, incluyendo un valor sin cambios, vacío o nulo, devuelve un error de validación.
Combinar los campos suministrados en la comprobación existente. Los campos omitidos se conservan; null o un objeto vacío deja la comprobación sin cambios. Establezca enabled=false para deshabilitar las sondas sin borrar la configuración, y enabled=true para habilitar la configuración guardada. Establezca port=0 para usar el puerto de tráfico de cada destino; cero tiempos/umbral y un emparejador vacío restablecen sus valores predeterminados. Un protocolo vacío hereda el protocolo del grupo de destino. Borrar la ruta de una comprobación HTTP/HTTPS habilitada explícitamente no es válido.
Show child attributes
Show child attributes
Activar el enmarcado PROXY v2 en conexiones ascendentes. Omitir el campo deja la configuración actual; establecer true/false lo invierte explícitamente.
Reemplaza la configuración de viscosidad. Omitir el campo lo deja solo; desactivarlo es un {"type": "none"} explícito.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
{ "environment": "production", "team": "backend" }
Respuesta
OK
Show child attributes
Show child attributes

