curl --request POST \ --url 'https://api.e2enetworks.com/myaccount/api/v1/gpu/gateway/{gateway_id}/target-groups/?project_id=<PROJECT_ID>&location=<LOCATION>&apikey=<API_KEY>' \ --header 'Authorization: Bearer <API_TOKEN>' \ --header 'Content-Type: application/json' \ --data '{ "name": "api-pool", "backend_type": "raw_ip", "algorithm": "ROUND_ROBIN", "port": 80, "protocol": "HTTP", "health_check_config": { "protocol": "HTTP", "path": "/healthz" }, "request_timeout_seconds": 300, "retry_attempts": 0, "targets": [ { "ip_address": "203.0.113.10", "port": 8080, "weight": 1, "name": "web-1" } ]}'import requests
response = requests.post( "https://api.e2enetworks.com/myaccount/api/v1/gpu/gateway/{gateway_id}/target-groups/", params={"project_id": "<PROJECT_ID>", "location": "<LOCATION>", "apikey": "<API_KEY>"}, headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "name": "api-pool", "backend_type": "raw_ip", "algorithm": "ROUND_ROBIN", "port": 80, "protocol": "HTTP", "health_check_config": { "protocol": "HTTP", "path": "/healthz", }, "request_timeout_seconds": 300, "retry_attempts": 0, "targets": [ { "ip_address": "203.0.113.10", "port": 8080, "weight": 1, "name": "web-1", }, ], },)print(response.json())const url = new URL("https://api.e2enetworks.com/myaccount/api/v1/gpu/gateway/{gateway_id}/target-groups/");url.search = new URLSearchParams({ project_id: "<PROJECT_ID>", location: "<LOCATION>", apikey: "<API_KEY>" });
const response = await fetch(url, { method: "POST", headers: { "Authorization": "Bearer <API_TOKEN>", "Content-Type": "application/json" }, body: JSON.stringify({ "name": "api-pool", "backend_type": "raw_ip", "algorithm": "ROUND_ROBIN", "port": 80, "protocol": "HTTP", "health_check_config": { "protocol": "HTTP", "path": "/healthz" }, "request_timeout_seconds": 300, "retry_attempts": 0, "targets": [ { "ip_address": "203.0.113.10", "port": 8080, "weight": 1, "name": "web-1" } ] }),});console.log(await response.json());Creates a backend group: a named set of backends with its own port, protocol, health check, timeout and retries. On an HTTP, HTTPS or gRPC Load Balancer a group gets no traffic until a Rule sends traffic to it. Needs the Create permission for Load Balancers.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Load Balancer ID
Query Parameters
Section titled “Query Parameters”Project ID
Active IAM ID (To access contact person account) Find your Active IAM ID here
Location
Request Bodyrequired
Section titled “Request Bodyrequired”object
The group’s name, up to 255 characters, not used by another group of this Load Balancer.
Example
api-poolWhat kind of backend the group holds; every backend in it must be of this kind. Defaults to raw_ip. autoscale is for HTTP and HTTPS Load Balancers only.
Example
raw_ipHow requests are spread across the group: ROUND_ROBIN, LEAST_REQUEST, LEAST_CONNECTION, RANDOM or SOURCE_IP_HASH (the same client address always reaches the same backend). null or left out uses the Load Balancer’s algorithm.
Example
ROUND_ROBINThe port the group’s backends listen on, 1 to 65535. Defaults to 80.
Example
80HTTP, HTTPS or GRPC, up to 16 characters. Defaults to HTTP.
Example
HTTPHow the group’s backends are checked. An empty object {} uses the Load Balancer’s own health check.
object
TCP, HTTP or GRPC.
Example
HTTPPath to request. For HTTP only. Defaults to /.
Example
/healthzStatus codes that count as healthy. For HTTP only. Defaults to [200].
Seconds between checks. Defaults to 10.
Example
10Seconds to wait for an answer. Defaults to 3.
Example
3Passed checks in a row before an unhealthy backend gets traffic again. Defaults to 2.
Example
2Failed checks in a row before a backend stops getting traffic. Defaults to 3.
Example
3Example
{ "protocol": "HTTP", "path": "/healthz"}Seconds a request to the group may take before it fails. A whole number, 0 or more; null or left out keeps the default.
Example
300How many times a failed request is sent again. A whole number; 0 turns retries off.
Example
0The backends of the group. On update the list replaces the group’s backends, so a backend left out is removed. The same backend and port may appear once per group.
object
ID of a backend already in the group, to keep it and change it. Leave out for a new one.
Example
31IPv4 or IPv6 address. Required when backend_type is raw_ip.
Example
203.0.113.10Port the backend listens on, 1 to 65535. Defaults to the group’s port.
Example
8080Share of the group’s traffic this backend gets, relative to the others: a whole number, 0 or more. Defaults to 1.
Example
1A label, up to 255 characters.
Example
web-1Required for vm, inference and autoscale: the VM’s name, the inference ID, or the Auto Scaling Group’s pool name.
Example
web-01Example
[ { "ip_address": "203.0.113.10", "port": 8080, "weight": 1, "name": "web-1" }]Responses
Section titled “Responses”The backend group that was created
object
object
The group’s name.
What kind of backend the group holds.
How requests are spread across the group. null uses the Load Balancer’s algorithm.
The port the group’s backends listen on.
HTTP, HTTPS or GRPC.
How the group’s backends are checked. An empty object {} uses the Load Balancer’s own health check.
object
TCP, HTTP or GRPC.
Path to request. For HTTP only. Defaults to /.
Status codes that count as healthy. For HTTP only. Defaults to [200].
Seconds between checks. Defaults to 10.
Seconds to wait for an answer. Defaults to 3.
Passed checks in a row before an unhealthy backend gets traffic again. Defaults to 2.
Failed checks in a row before a backend stops getting traffic. Defaults to 3.
Seconds a request to the group may take. null when not set.
Times a failed request is sent again. null when not set.
The backends of the group, in the order they were added.
object
Set for vm, inference and autoscale backends.
object
Example
{ "code": 201, "message": "Created Successfully", "data": { "id": 7, "name": "api-pool", "backend_type": "vm", "algorithm": "ROUND_ROBIN", "port": 80, "protocol": "HTTP", "health_check_config": { "protocol": "HTTP", "path": "/healthz", "interval_seconds": 10 }, "request_timeout_seconds": 300, "retry_attempts": 0, "targets": [ { "id": 31, "ip_address": "203.0.113.10", "port": 8080, "weight": 1, "name": "web-1", "resource_ref": null } ], "created_at": "2026-10-21T11:17:29Z", "updated_at": "2026-10-21T11:17:29Z" }, "errors": {}}A field is wrong or the group could not be saved. errors is a message, or an object keyed by field, each holding a list of messages (non_field_errors for a check across fields): “A raw-IP target-group member requires ‘ip_address’.”, “A VM target-group member requires ‘resource_ref’ (the VM/pool name).”, “An inference target-group member requires ‘resource_ref’ (the inference id).”, “An autoscale target-group member requires ‘resource_ref’ (the autoscale group’s pool name).”, “Inference ‘’ was not found in this project.”, “Autoscale group ‘’ was not found in this project.”, “Autoscale-group backends are supported on L7 (HTTP/HTTPS) load balancers only.”, “Duplicate backend ‘project_id is missing or not a number.
object
object
object
Example
{ "code": 400, "message": "Bad Request", "data": {}, "errors": { "non_field_errors": [ "Duplicate backend '203.0.113.10' on port 8080 in this group — each backend:port may appear once per group." ] }}No Load Balancer with that ID in the project and region.
object
object
Example
{ "code": 404, "message": "Bad Request", "data": {}, "errors": "Gateway not found"}