curl --request POST \ --url 'https://api.e2enetworks.com/myaccount/api/v1/gpu/notebooks/autoscale-groups/from-vm/?project_id=<PROJECT_ID>&location=<LOCATION>&apikey=<API_KEY>' \ --header 'Authorization: Bearer <API_TOKEN>' \ --header 'Content-Type: application/json' \ --data '{ "vm_id": 4984, "name": "example-group", "min_replicas": 2, "max_replicas": 10, "desired_replicas": 2, "sku_item_price_id": 1190, "disk_size_gb": 50, "scale_mode": "elastic", "policy_type": "elastic_cpu", "cpu_threshold_percent": 60, "memory_threshold_percent": 70, "network_threshold_bytes_per_sec": 10000000, "scale_in_stabilization_seconds": 300, "scale_out_stabilization_seconds": 30, "watch_period": 3, "period_duration": 10, "public_ip_enabled": true, "scale_up_operator": ">", "scale_down_operator": "<", "scale_down_threshold_percent": 30, "health_check_type": "vm_status", "health_check_port": 80, "health_check_path": "/", "health_check_protocol": "http", "health_check_interval_seconds": 30, "health_check_timeout_seconds": 5, "health_check_unhealthy_threshold": 2, "health_check_healthy_threshold": 1, "startup_grace_period_seconds": 300, "auto_replace_unhealthy": true, "ssh_key_ids": [ 0 ], "security_group_id": 45, "public_key": "ssh-ed25519 AAAA... user@example.com", "scheduled_policies": [ { "name": "weekday-morning", "cron_expression": "0 9 * * 1-5", "timezone_name": "UTC", "target_min_replicas": 4, "target_max_replicas": 10, "duration_seconds": 28800, "enabled": true } ]}'import requests
response = requests.post( "https://api.e2enetworks.com/myaccount/api/v1/gpu/notebooks/autoscale-groups/from-vm/", params={"project_id": "<PROJECT_ID>", "location": "<LOCATION>", "apikey": "<API_KEY>"}, headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "vm_id": 4984, "name": "example-group", "min_replicas": 2, "max_replicas": 10, "desired_replicas": 2, "sku_item_price_id": 1190, "disk_size_gb": 50, "scale_mode": "elastic", "policy_type": "elastic_cpu", "cpu_threshold_percent": 60, "memory_threshold_percent": 70, "network_threshold_bytes_per_sec": 10000000, "scale_in_stabilization_seconds": 300, "scale_out_stabilization_seconds": 30, "watch_period": 3, "period_duration": 10, "public_ip_enabled": True, "scale_up_operator": ">", "scale_down_operator": "<", "scale_down_threshold_percent": 30, "health_check_type": "vm_status", "health_check_port": 80, "health_check_path": "/", "health_check_protocol": "http", "health_check_interval_seconds": 30, "health_check_timeout_seconds": 5, "health_check_unhealthy_threshold": 2, "health_check_healthy_threshold": 1, "startup_grace_period_seconds": 300, "auto_replace_unhealthy": True, "ssh_key_ids": [ 0, ], "security_group_id": 45, "public_key": "ssh-ed25519 AAAA... user@example.com", "scheduled_policies": [ { "name": "weekday-morning", "cron_expression": "0 9 * * 1-5", "timezone_name": "UTC", "target_min_replicas": 4, "target_max_replicas": 10, "duration_seconds": 28800, "enabled": True, }, ], },)print(response.json())const url = new URL("https://api.e2enetworks.com/myaccount/api/v1/gpu/notebooks/autoscale-groups/from-vm/");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({ "vm_id": 4984, "name": "example-group", "min_replicas": 2, "max_replicas": 10, "desired_replicas": 2, "sku_item_price_id": 1190, "disk_size_gb": 50, "scale_mode": "elastic", "policy_type": "elastic_cpu", "cpu_threshold_percent": 60, "memory_threshold_percent": 70, "network_threshold_bytes_per_sec": 10000000, "scale_in_stabilization_seconds": 300, "scale_out_stabilization_seconds": 30, "watch_period": 3, "period_duration": 10, "public_ip_enabled": true, "scale_up_operator": ">", "scale_down_operator": "<", "scale_down_threshold_percent": 30, "health_check_type": "vm_status", "health_check_port": 80, "health_check_path": "/", "health_check_protocol": "http", "health_check_interval_seconds": 30, "health_check_timeout_seconds": 5, "health_check_unhealthy_threshold": 2, "health_check_healthy_threshold": 1, "startup_grace_period_seconds": 300, "auto_replace_unhealthy": true, "ssh_key_ids": [ 0 ], "security_group_id": 45, "public_key": "ssh-ed25519 AAAA... user@example.com", "scheduled_policies": [ { "name": "weekday-morning", "cron_expression": "0 9 * * 1-5", "timezone_name": "UTC", "target_min_replicas": 4, "target_max_replicas": 10, "duration_seconds": 28800, "enabled": true } ] }),});console.log(await response.json());Creates an Auto Scaling Group from a Running VM, which must be sent as vm_id. The API first takes a live snapshot of the VM without stopping it, which stays in the VM’s snapshot list, then launches the group from it. The group is returned as Creating at once.
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
ID of the VM to copy. The VM must be Running, on a plan that supports snapshots, and a CPU plan. The API takes a live snapshot of it first, without stopping it, . The snapshot stays in the VM’s snapshot list.
Example
4984The group’s name, unique among the project’s groups that are not deleted. Omitted or blank, it becomes ag- followed by the source VM’s name.
Example
example-groupMinimum VMs: the group never scales below this on its own. At least 1.
Example
2Maximum VMs: at least one more than min_replicas, and at most 60.
Example
10How many VMs the group starts with, from min_replicas to max_replicas. Required.
Example
2The plan every VM runs on: an active, CPU, hourly VM plan in the group’s region. Optional: it defaults to the source’s plan if that is billed by the hour, otherwise the request is refused. sku_id and plan_id are accepted in its place.
Example
1190Disk per VM, in GB. Not less than the source’s disk size and at most 2,000. Defaults to the source’s disk size.
Example
50elastic scales on usage, scheduled only on schedules, both on both. Default elastic. With scheduled or both, scheduled_policies must hold at least one schedule.
Example
elasticThe usage measure for elastic and both: CPU, memory, CPU and memory together, or network throughput. Default elastic_cpu. It is not used when scale_mode is scheduled.
Example
elastic_cpuTarget average CPU use, in percent, a whole number from 10 to 99.
Example
60Target average memory use, in percent, a whole number from 10 to 99.
Example
70Target network throughput per VM, in bytes per second (received plus sent), a whole number.
Example
10000000How long usage must stay below the target before VMs are removed, in seconds. At least 120; a lower value is refused. cooldown_period is accepted in its place. Default 120.
Example
300How long usage must stay above the target before VMs are added, in seconds, at least 1. scale_out_cooldown_seconds is accepted in its place. When not sent, the wait is watch_period times period_duration. When sent, watch_period is set to this value divided by period_duration, rounded, at least 1.
Example
30Number of watched periods before VMs are added. Default 3.
Example
3Length of one watched period, in seconds. Default 10.
Example
10Leave this field out. Every VM gets a public IP address.
Example
true> or >=. Leave this field out.
Example
>< or <=. Leave this field out.
Example
<Leave this field out.
Example
30vm_status checks that the VM is running; http and tcp probe health_check_port on the VM’s private address. Default vm_status.
Example
vm_statusPort to probe, 1 to 65535. Required for http and tcp.
Example
80Path to request for http; must start with /. Default /.
Example
/http or https, for http checks.
Example
httpSeconds between checks, at least 15. Default 30.
Example
30Seconds to wait for an answer, at least 1. Default 5.
Example
5Failed checks in a row before a VM is unhealthy, at least 1. Default 2.
Example
2Passing checks in a row before a VM is healthy again, at least 1. Default 1.
Example
1Seconds after a VM starts before its checks count, at least 1. health_check_grace_period_seconds is accepted in its place. Default 300.
Example
300Replace a VM that stays unhealthy. Default true.
Example
trueIDs of your SSH keys to install on every VM. Keys that are not yours are refused. A security group must be sent with them.
ID of one Security Group in the project and region, applied to every VM.
Example
45A public key to install when ssh_key_ids is empty. If both are empty, the source VM’s keys are used.
Example
ssh-ed25519 AAAA... user@example.comSchedules, created with the group. Required and non-empty when scale_mode is scheduled or both. A schedule that is refused is reported in scheduled_policy_results and does not fail the request.
object
A label for the schedule. At most 128 characters.
Example
weekday-morningRequired. A cron expression: minute, hour, day of month, month, day of week. At most 64 characters.
Example
0 9 * * 1-5Any time zone name, such as Asia/Kolkata. At most 64 characters. Default UTC.
Example
UTCRequired. The Minimum VMs the schedule sets, at least 1.
Example
4Required. The Maximum VMs it sets: above target_min_replicas, at most 60.
Example
10How long the schedule holds its range, 60 to 2,592,000 seconds (30 days). Omit or null to hold until another schedule changes it.
Example
28800Default true. A disabled schedule does not run and holds no capacity.
Example
trueResponses
Section titled “Responses”The group, as Creating
object
object
The group’s name.
An identifier for the group, used when you contact support. It cannot be changed.
Cooldown while the group is Running, usage is not over the target, and fewer than scale_in_stabilization_seconds have passed since the last usage-based size change; otherwise status.
true while the group is in that cooldown. The group will not remove VMs during it.
Seconds left of that hold. null when not holding.
Estimated seconds left of the launch.
An identifier for the project in the region, used when you contact support.
The group’s rates for one VM, in the currency of its plan. null when the group has no plan.
object
Compute price per VM per hour.
Disk price per GB per month.
Disk size included in the compute price, in GB.
Disk size per VM that is charged, in GB.
Hours in the month used for the monthly figure.
Compute plus disk, per VM per hour.
Compute plus disk, per VM per month.
How the group’s usage-based scaling has behaved. Based on the group’s recent scale events.
object
The period the counts cover.
Times in that period that usage-based scaling added VMs and the count reached Maximum VMs.
Times in that period that usage-based scaling reversed direction.
Hints on the group’s settings.
object
object
object
Why the group is or is not changing size now: not_running, schedule_only, at_max_capacity, condition_met_stabilizing, in_cooldown, at_min_capacity, below_target or active.
object
While the group is Creating, how many VMs are still starting. null otherwise.
A coarse launch phase: validated, network_applied, created, launching or ready. null for other steps.
The launch checklist. Empty once the group is past launching, except for a Failed group, where it shows the step that failed.
object
Step identifier.
What the step does.
While the step runs, a live line; on the step that failed, the reason.
true when the current launch step has run longer than usual.
Why the group is Failed. Read it only when status is Failed.
The cause of a failed launch: credit, quota, inventory, config or transient.
true for a Creating or Failed group that has never been Running.
The region.
Minimum VMs in force now. While a schedule or Scale Now holds the minimum higher, this is the held value.
Maximum VMs in force now.
The saved Minimum VMs.
The saved Maximum VMs.
When the schedule hold now in force ends. null when none.
The minimum a Scale Now hold sets. null when no hold is in force.
When the Scale Now hold ends.
The number of VMs the group is set to run.
Same as scale_in_stabilization_seconds.
Number of watched periods before the group adds VMs.
Length of one watched period, in seconds.
How long usage must stay below the target before VMs are removed, in seconds. At least 120.
How long usage must stay above the target before VMs are added, in seconds.
Same value as scale_out_stabilization_seconds, under its older name.
Every VM in a group gets a public IP address.
http or https, for http checks.
Same value as health_check_grace_period_seconds.
The operating system of the source image.
The plan the group’s VMs run on.
Average CPU use across the group’s VMs, as last measured.
The VM the group was made from. null once that VM is deleted.
The source VM’s identifier, kept after the VM is deleted.
Disk per VM, in GB.
One schedule of the group.
object
When the schedule runs: minute, hour, day of month, month, day of week.
The time zone of cron_expression.
The Minimum VMs the schedule sets.
The Maximum VMs the schedule sets.
How long the schedule holds its range, in seconds. null when it holds until another schedule changes it.
When the schedule’s hold ends. null when no hold is in force.
When the schedule next runs. null while it is disabled.
When the schedule last ran.
ID of the user who created the group.
object
Example
{ "code": 201, "message": "Created Successfully", "data": { "id": 412, "name": "example-group", "vmpool_name": "example-group-ab12", "status": "Creating", "display_status": "Creating", "in_cooldown": false, "cooldown_seconds_remaining": null, "stage": "snapshotting_source_vm", "stage_message": "Ready", "stage_percent": 5, "stage_started_at": "2026-10-21T11:19:02+00:00", "eta_seconds": 0, "launch_started_at": "2026-10-21T11:17:29+00:00", "became_ready_at": null, "namespace": "project-example", "pricing": { "currency": "INR", "compute_hourly_per_vm": 5.5, "disk_rate_per_gb_month": 4, "free_disk_gb": 30, "billable_disk_gb": 20, "disk_monthly_per_vm": 80, "disk_hourly_per_vm": 0.11, "hours_per_month_basis": 730, "hourly_per_vm": 5.61, "monthly_per_vm": 4174.5 }, "scaling_health": { "window": "24h", "max_capacity_reached_count": 0, "oscillation_count": 0, "recommendations": [ { "code": "raise_maximum", "severity": "warning", "facts": { "times_at_max": 3, "window": "24h", "current_max": 5 } } ], "current_state": { "code": "below_target", "facts": { "metric": "cpu", "current": 31, "target": 60 } } }, "ready_count": null, "booting_count": null, "provisioning_phase": "ready", "progress_steps": [ { "key": "creating_vmpool", "label": "Creating scale group", "description": "Creating the group that will hold your VMs.", "status": "done", "message": null, "started_at": "2026-10-21T11:17:31+00:00", "completed_at": "2026-10-21T11:17:51+00:00", "duration_seconds": 20 } ], "is_delayed": false, "delayed_message": null, "failure_reason": null, "failure_kind": null, "can_relaunch": false, "has_ever_reached_running_state": true, "location": "Delhi", "min_replicas": 3, "max_replicas": 10, "base_min_replicas": 2, "base_max_replicas": 10, "active_window_ends_at": null, "manual_override_min_replicas": null, "manual_override_ends_at": null, "desired_replicas": 3, "policy_type": "elastic_cpu", "scale_mode": "elastic", "cpu_threshold_percent": 60, "memory_threshold_percent": null, "network_threshold_bytes_per_sec": null, "custom_parameter_name": null, "custom_threshold_percent": null, "cooldown_period": 300, "watch_period": 3, "period_duration": 10, "scale_in_stabilization_seconds": 300, "scale_out_stabilization_seconds": 30, "scale_out_cooldown_seconds": 30, "public_ip_enabled": true, "scale_up_operator": ">", "scale_down_operator": "<", "scale_down_threshold_percent": null, "thresholds_enforced": false, "health_check_type": "vm_status", "health_check_protocol": null, "health_check_port": null, "health_check_path": "/", "health_check_interval_seconds": 30, "health_check_timeout_seconds": 5, "health_check_unhealthy_threshold": 2, "health_check_healthy_threshold": 1, "startup_grace_period_seconds": 300, "health_check_grace_period_seconds": 300, "auto_replace_unhealthy": true, "backup_snapshot_id": null, "image_name": "example-vm snapshot", "image_os": "Ubuntu", "machine_size": "4 vCPU · 8 GB RAM", "sku_item_price_id": 1190, "current_cpu_percent": 31.5, "current_memory_percent": null, "source_vm_id": 4984, "source_vm_name": "example-vm", "source_vm_slug_name": "example-vm-abc123", "disk_size_gb": 50, "active_node_count": 0, "scheduled_policies": [ { "id": 88, "group_id": 412, "name": "weekday-morning", "cron_expression": "0 9 * * 1-5", "timezone_name": "UTC", "target_min_replicas": 4, "target_max_replicas": 10, "enabled": true, "duration_seconds": 28800, "window_ends_at": null, "next_run_at": "2026-10-26T09:00:00+00:00", "last_run_at": null, "created_at": "2026-10-21T11:17:29+00:00" } ], "ssh_key_ids": [ 17 ], "security_group_id": 45, "created_at": "2026-10-21T11:17:29+00:00", "created_by": 1, "scheduled_policy_results": [ { "input": { "name": "weekday-morning" }, "success": true, "errors": {} } ] }, "errors": {}}A field is missing or outside its limit, for example “min_replicas must be a positive integer.”, “max_replicas must be greater than min_replicas.”, “max_replicas cannot exceed the platform limit of 60 replicas per group.”, “desired_replicas is required and must be an integer.”, “scale_in_stabilization_seconds must be at least 120 seconds, so a new VM can finish booting before the group scales in.”, “cpu_threshold_percent must be between 10 and 99.”, “disk_size_gb must be at most 2000 GB.”, “One or more ssh_key_ids are invalid.”, an unknown plan, a GPU plan or a plan not billed by the hour (“sku_item_price_id must be a CPU-only SKU; Autoscale Groups only support CPU-only pools.”), or a name already used (“An autoscale group named ‘example-group’ already exists in this project.”). errors is the sentence. Also: “vm_id is required.”, the VM is not Running (as shown), “Snapshots are not supported for this plan.”, or the VM is a GPU VM (“This VM is a GPU instance; Autoscale Groups only support CPU-only pools.”). errors is “Project ID is missing or invalid” when project_id is missing or not a number.
object
object
Example
{ "code": 400, "message": "Bad Request", "data": {}, "errors": "VM must be Running to create an autoscale group from it. Current status: Stopped."}The caller lacks the permission the call needs on the project, or the region is not allowed.
object
object
Example
{ "code": 403, "message": "Forbidden", "data": {}, "errors": "You don't have permission to access this service. Please verify your policy or project."}No VM with that ID in the project.
object
object
Example
{ "code": 404, "message": "Bad Request", "data": {}, "errors": "VM 4984 not found."}The launch could not be started. The group is saved and marked Failed.
object
object
Example
{ "code": 500, "message": "Internal Server Error", "data": "Failed to start autoscale from-vm provision workflow.", "errors": {}}