curl --request POST \ --url 'https://api.e2enetworks.com/myaccount/api/v1/gpu/tenant_clusters/?project_id=<PROJECT_ID>&location=<LOCATION>&apikey=<API_KEY>' \ --header 'Authorization: Bearer <API_TOKEN>' \ --header 'Content-Type: application/json' \ --data '{ "name": "string", "description": "string", "tenant_k8s_version_id": 0, "control_plane_replicas": 3, "control_plane_sku_id": 0, "control_plane_sku_item_price_id": 0, "control_plane_committed_instance_policy": "auto_renew", "control_plane_next_sku_item_price_id": 0, "vpc_id": 0, "subnet_id": 0, "worker_pools": [ { "name": "string", "sku_id": 0, "sku_item_price_id": 0, "replicas": 0, "committed_instance_policy": "auto_renew", "next_sku_item_price_id": 0, "labels": [ { "key": "team", "value": "ml" } ], "taints": [ { "key": "dedicated", "value": "gpu", "effect": "NoSchedule" } ] } ]}'import requests
response = requests.post( "https://api.e2enetworks.com/myaccount/api/v1/gpu/tenant_clusters/", params={"project_id": "<PROJECT_ID>", "location": "<LOCATION>", "apikey": "<API_KEY>"}, headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "name": "string", "description": "string", "tenant_k8s_version_id": 0, "control_plane_replicas": 3, "control_plane_sku_id": 0, "control_plane_sku_item_price_id": 0, "control_plane_committed_instance_policy": "auto_renew", "control_plane_next_sku_item_price_id": 0, "vpc_id": 0, "subnet_id": 0, "worker_pools": [ { "name": "string", "sku_id": 0, "sku_item_price_id": 0, "replicas": 0, "committed_instance_policy": "auto_renew", "next_sku_item_price_id": 0, "labels": [ { "key": "team", "value": "ml", }, ], "taints": [ { "key": "dedicated", "value": "gpu", "effect": "NoSchedule", }, ], }, ], },)print(response.json())const url = new URL("https://api.e2enetworks.com/myaccount/api/v1/gpu/tenant_clusters/");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": "string", "description": "string", "tenant_k8s_version_id": 0, "control_plane_replicas": 3, "control_plane_sku_id": 0, "control_plane_sku_item_price_id": 0, "control_plane_committed_instance_policy": "auto_renew", "control_plane_next_sku_item_price_id": 0, "vpc_id": 0, "subnet_id": 0, "worker_pools": [ { "name": "string", "sku_id": 0, "sku_item_price_id": 0, "replicas": 0, "committed_instance_policy": "auto_renew", "next_sku_item_price_id": 0, "labels": [ { "key": "team", "value": "ml" } ], "taints": [ { "key": "dedicated", "value": "gpu", "effect": "NoSchedule" } ] } ] }),});console.log(await response.json());Creates a Kubernetes cluster whose nodes run as virtual machines in your VPC. The call returns at once with status queued; the cluster then moves through cluster_provisioning, worker_joining, and worker_joined to ready, or ends at failed. Call Get Kubernetes Cluster to follow it.
The control plane runs on a CPU plan. The cluster needs at least one worker pool, and pool names must be unique in the cluster, ignoring case. A cluster name must be unique in the project, ignoring case. Pods use 172.30.0.0/16 and Services 172.31.0.0/16 on every cluster; neither can be set.
Before anything is created, the server checks credit and free stock for every pool. A committed plan charges its whole term upfront.
Note: Get version IDs from List Kubernetes Versions. The VPC must be Active and in the same project and region.
Parameters
Section titled “Parameters”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
Cluster name, unique in the project.
Optional free text.
The id of a version from List Kubernetes Versions. It cannot be changed later.
Control plane node count. Use 3 for a cluster you depend on; 1 suits a cluster you are trying out, such as for development. It cannot be changed later.
A CPU computing resource for the control plane.
An hourly or committed plan of that resource, in this region.
Required when the control plane plan is committed. What happens when the term ends.
Required with a committed plan: the plan of the same resource to continue on, a committed plan with auto_renew or an hourly plan with convert_to_hourly_billing.
An Active VPC in this project and region. It cannot be changed later.
A subnet of that VPC. The nodes take their addresses from it.
One entry for each worker node pool.
object
Lowercase letters, numbers, and hyphens, starting and ending with a letter or number; unique in the cluster, ignoring case.
The computing resource for this pool’s nodes.
An hourly or committed plan of that resource, in this region.
Node count.
Required when the pool’s plan is committed.
Required with a committed plan: a committed plan of the same resource with auto_renew, or an hourly one with convert_to_hourly_billing.
Node labels for this pool. Keys must be unique.
object
The key without the node.e2enetworks.com/ prefix, which the platform adds. Up to 63 letters, numbers, -, _, or ., starting and ending with a letter or number.
Example
teamRequired. The same characters as the key.
Example
mlNode taints for this pool. Each key and effect pair must be unique.
object
The key without the node.e2enetworks.com/ prefix, which the platform adds. Up to 63 letters, numbers, -, _, or ., starting and ending with a letter or number.
Example
dedicatedMay be empty.
Example
gpuNoExecute evicts running pods that do not tolerate the taint.
Example
NoScheduleResponses
Section titled “Responses”The cluster is queued for creation.
object
object
object
resizing while the pool moves to a new fixed size, scaling while its autoscaler changes the node count.
The node count the pool is set to.
The pool’s nodes that are up and ready.
object
The key without the node.e2enetworks.com/ prefix, which the platform adds. Up to 63 letters, numbers, -, _, or ., starting and ending with a letter or number.
Required. The same characters as the key.
object
The key without the node.e2enetworks.com/ prefix, which the platform adds. Up to 63 letters, numbers, -, _, or ., starting and ending with a letter or number.
May be empty.
NoExecute evicts running pods that do not tolerate the taint.
The computing resource and pricing plan a node pool runs on.
object
object
object
hourly or committed.
Set only for a pool on a committed plan.
object
The computing resource and pricing plan a node pool runs on.
object
object
object
hourly or committed.
The pool’s size bounds. A min_replicas lower than max_replicas means the pool is autoscaled; equal values are a fixed size.
object
object
Example
{ "code": 201, "data": { "id": 103, "name": "tir-k8s-prod", "project_id": 18773, "region": "Delhi", "status": "queued", "tenant_k8s_version_id": 1, "tenant_k8s_version": "v1.31.4", "node_pools": [ { "id": 22, "tenant_cluster_id": 103, "name": "app-workers", "role": "control_plane", "status": "queued", "replicas": 2, "ready_replicas": 2, "labels": [ { "key": "team", "value": "ml" } ], "taints": [ { "key": "dedicated", "value": "gpu", "effect": "NoSchedule" } ], "sku_details": { "specs": { "sku_id": 101, "name": "C3.8GB", "series": "CPU", "cpu": 4, "memory": 8 }, "plan": { "sku_item_price_id": 1001, "sku_type": "hourly", "committed_days": 0, "unit_price": 4.5, "currency": "INR" } }, "committed_info": { "updation_policy": "auto_renew", "next_sku_item_price": { "specs": { "sku_id": 101, "name": "C3.8GB", "series": "CPU", "cpu": 4, "memory": 8 }, "plan": { "sku_item_price_id": 1001, "sku_type": "hourly", "committed_days": 0, "unit_price": 4.5, "currency": "INR" } }, "end_date": "2026-11-20T10:15:00Z" }, "autoscaling": { "min_replicas": 2, "max_replicas": 2 }, "created_at": "2026-10-20T10:15:00Z", "updated_at": "2026-10-20T10:42:00Z" } ], "created_at": "2026-10-20T10:15:00Z" }, "errors": {}, "message": "Tenant cluster creation queued successfully"}