VM Nodes endpoints (Admin API)
32 FeatherPanel Admin API endpoints from admin/vm-nodes.php: methods, paths, auth, permissions, rate limits, parameters and responses.
Last synced from FeatherPanel 3faf369 on .
On this page
Defined in backend/app/routes/admin/vm-nodes.php. Authentication used here: Admin. Read Authentication for how to send credentials and Rate limits and errors for the response envelope.
Paths, methods, permissions and rate limits come from the route file. Summaries, parameters and response codes come from the OpenAPI annotations on the controllers; endpoints without annotations show only what the route file declares.
Endpoints
GET/api/admin/vm-nodes
Get all Proxmox VM nodes Retrieve a paginated list of all VM nodes (Proxmox hypervisors) with optional search and VPS-location filtering.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Page number for pagination |
limit | query | integer | no | Number of records per page |
search | query | string | no | Search term to filter VM nodes by name or FQDN |
location_id | query | integer | no | Location ID to filter VM nodes by (must be type=vps) |
Response data field | Type | Description |
|---|---|---|
vm_nodes | VmNode[] | |
pagination | VmNodePagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/vm-nodes" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 VM nodes retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/vm-nodes/{id}
Get VM node by ID Retrieve a specific VM node by its ID.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
Response data field | Type | Description |
|---|---|---|
vm_node | VmNode |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 VM node retrieved successfully · 400 Bad request - Invalid VM node ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 VM node not found
PUT/api/admin/vm-nodes
Create new VM node Create a new VM node (Proxmox hypervisor) associated with a VPS/VDS location.
Request body: VmNodeCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | yes | VM Node name |
description | string | no | VM Node description |
location_id | integer | yes | Location ID (must be type=vps) |
fqdn | string | yes | Proxmox host FQDN or IP |
scheme | string | no | Connection scheme |
port | integer | no | Proxmox API port |
user | string | yes | Proxmox API user (e.g. root@pam) |
token_id | string | yes | Proxmox API token ID |
secret | string | yes | Proxmox API token secret |
tls_no_verify | string | no | Skip TLS verification |
timeout | integer | no | Timeout in seconds |
addional_headers | string | no | Additional HTTP headers (JSON encoded, optional) |
additional_params | string | no | Additional query parameters (JSON encoded, optional) |
storage_tpm | string | no | Preferred Proxmox storage for TPM state |
storage_efi | string | no | Preferred Proxmox storage for EFI disk |
storage_backups | string | no | Preferred Proxmox storage for backups |
storage_iso_user | string | no | Proxmox storage for user-uploaded ISOs |
storage_iso_allowed | string | no | Comma-separated ISO storages users may mount from |
rescue_iso | string | no | Proxmox volid of the rescue ISO |
feathertail_enabled | integer | no | Enable FeatherTail agent integration |
feathertail_url | string | no | FeatherTail agent base URL |
feathertail_tls_no_verify | integer | no | Skip TLS verification for FeatherTail |
id | integer | no | Optional VM node ID (useful for migrations) |
Response data field | Type | Description |
|---|---|---|
vm_node | VmNode |
curl -X PUT "$PANEL_URL/api/admin/vm-nodes" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","description":"","location_id":0,"fqdn":"","scheme":"","port":0,"user":"","token_id":"","secret":"","tls_no_verify":"","timeout":0,"addional_headers":"","additional_params":"","storage_tpm":"","storage_efi":"","storage_backups":"","storage_iso_user":"","storage_iso_allowed":"","rescue_iso":"","feathertail_enabled":0,"feathertail_url":"","feathertail_tls_no_verify":0,"id":0}'Plugin events: featherpanel:vds:node:create
Responses: 201 VM node created successfully · 400 Bad request - Invalid JSON, validation errors, location not found or not VPS · 401 Unauthorized · 403 Forbidden - Insufficient permissions
PATCH/api/admin/vm-nodes/{id}
Update VM node Update an existing VM node. Only provided fields will be updated. Validates location existence and type.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
Request body: VmNodeUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | no | VM Node name |
description | string | no | VM Node description |
location_id | integer | no | Location ID (must be type=vps) |
fqdn | string | no | Proxmox host FQDN or IP |
scheme | string | no | Connection scheme |
port | integer | no | Proxmox API port |
user | string | no | Proxmox API user (e.g. root@pam) |
token_id | string | no | Proxmox API token ID |
secret | string | no | Proxmox API token secret |
tls_no_verify | string | no | Skip TLS verification |
timeout | integer | no | Timeout in seconds |
addional_headers | string | no | Additional HTTP headers (JSON encoded, optional) |
additional_params | string | no | Additional query parameters (JSON encoded, optional) |
storage_tpm | string | no | Preferred Proxmox storage for TPM state |
storage_efi | string | no | Preferred Proxmox storage for EFI disk |
storage_backups | string | no | Preferred Proxmox storage for backups |
storage_iso_user | string | no | Proxmox storage for user-uploaded ISOs |
storage_iso_allowed | string | no | Comma-separated ISO storages users may mount from |
rescue_iso | string | no | Proxmox volid of the rescue ISO |
feathertail_enabled | integer | no | Enable FeatherTail agent integration |
feathertail_url | string | no | FeatherTail agent base URL |
feathertail_tls_no_verify | integer | no | Skip TLS verification for FeatherTail |
Response data field | Type | Description |
|---|---|---|
vm_node | VmNode |
curl -X PATCH "$PANEL_URL/api/admin/vm-nodes/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","description":"","location_id":0,"fqdn":"","scheme":"","port":0,"user":"","token_id":"","secret":"","tls_no_verify":"","timeout":0,"addional_headers":"","additional_params":"","storage_tpm":"","storage_efi":"","storage_backups":"","storage_iso_user":"","storage_iso_allowed":"","rescue_iso":"","feathertail_enabled":0,"feathertail_url":"","feathertail_tls_no_verify":0}'Plugin events: featherpanel:vds:node:update
Responses: 200 VM node updated successfully · 400 Bad request - Invalid JSON, no data provided, validation errors, location not found, or invalid location type · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 VM node not found
DELETE/api/admin/vm-nodes/{id}
Delete VM node Permanently delete a VM node from the database. This does not touch the Proxmox host itself.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/vm-nodes/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:vds:node:delete
Responses: 200 VM node deleted successfully · 400 Bad request - Invalid VM node ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 VM node not found
GET/api/admin/vm-nodes/{id}/test-connection
Test connection to Proxmox VM node Performs a lightweight connectivity check to Proxmox using the stored API token and returns basic status and discovered cluster nodes.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
Response data field | Type | Description |
|---|---|---|
ok | boolean | |
status_code | integer | |
latency_ms | integer | |
nodes | object[] |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/test-connection" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Connection successful · 400 Bad request - Invalid VM node ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 VM node not found · 500 Connection failed
POST/api/admin/vm-nodes/{id}/test-connection
Test connection to Proxmox VM node Performs a lightweight connectivity check to Proxmox using the stored API token and returns basic status and discovered cluster nodes.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
Response data field | Type | Description |
|---|---|---|
ok | boolean | |
status_code | integer | |
latency_ms | integer | |
nodes | object[] |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/test-connection" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Connection successful · 400 Bad request - Invalid VM node ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 VM node not found · 500 Connection failed
GET/api/admin/vm-nodes/{id}/info
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/info" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/ips
List IPs for a VM node Retrieve all IP addresses configured for a specific VM node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
page | query | integer | no | Page number for pagination |
limit | query | integer | no | Number of records per page |
Response data field | Type | Description |
|---|---|---|
ips | object[] | |
pagination | object |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/ips" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 VM node IPs retrieved successfully · 400 Invalid VM node ID · 404 VM node not found
PUT/api/admin/vm-nodes/{id}/ips
Create IP for VM node Create a new IP address for a specific VM node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
| Body field | Type | Required | Description |
|---|---|---|---|
ip | string | yes | IP address |
cidr | integer | no | CIDR prefix length |
gateway | string | no | Gateway IP |
is_primary | string | no | Mark as primary IP |
address_scope | string | no | Public or private address |
assignment_mode | string | no | Static cloud-init or FeatherTail DHCP |
pve_node | string | no | Proxmox cluster node this IP may be used on (null = any) |
notes | string | no | Notes |
curl -X PUT "$PANEL_URL/api/admin/vm-nodes/$ID/ips" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"ip":"","cidr":0,"gateway":"","is_primary":"","address_scope":"","assignment_mode":"","pve_node":"","notes":""}'Plugin events: featherpanel:vds:node:ip:create
Responses: 201 IP created successfully · 400 Invalid VM node ID or payload · 404 VM node not found
PATCH/api/admin/vm-nodes/{id}/ips/{ipId}
Update IP for VM node Update an existing IP entry for a VM node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
ipId | path | integer | yes | VM IP ID |
| Body field | Type | Required | Description |
|---|---|---|---|
ip | string | no | IP address |
cidr | integer | no | CIDR prefix length |
gateway | string | no | Gateway IP |
is_primary | string | no | Mark as primary IP |
address_scope | string | no | Public or private address |
assignment_mode | string | no | Static cloud-init or FeatherTail DHCP |
pve_node | string | no | Proxmox cluster node this IP may be used on (null = any) |
notes | string | no | Notes |
curl -X PATCH "$PANEL_URL/api/admin/vm-nodes/$ID/ips/$IP_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"ip":"","cidr":0,"gateway":"","is_primary":"","address_scope":"","assignment_mode":"","pve_node":"","notes":""}'Plugin events: featherpanel:vds:node:ip:update
Responses: 200 IP updated successfully · 400 Invalid IDs or payload · 404 VM node or IP not found
DELETE/api/admin/vm-nodes/{id}/ips/{ipId}
Delete IP from VM node Delete an IP entry from a VM node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
ipId | path | integer | yes | VM IP ID |
curl -X DELETE "$PANEL_URL/api/admin/vm-nodes/$ID/ips/$IP_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:vds:node:ip:delete
Responses: 200 IP deleted successfully · 400 Invalid IDs · 404 VM node or IP not found
POST/api/admin/vm-nodes/{id}/ips/{ipId}/primary
Set primary IP for VM node Mark a specific IP as the primary IP for a VM node. Clears the primary flag on all other IPs for this node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
ipId | path | integer | yes | VM IP ID |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/ips/$IP_ID/primary" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:vds:node:ip:primary
Responses: 200 Primary IP set successfully · 400 Invalid IDs · 404 VM node or IP not found
GET/api/admin/vm-nodes/{id}/free-ips
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/free-ips" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/proxmox-vms
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/proxmox-vms" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/cluster-nodes
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/cluster-nodes" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/bridges
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/bridges" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/storage
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/storage" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/backup-storage
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/backup-storage" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/iso-storage
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/iso-storage" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/templates
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/templates" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"POST/api/admin/vm-nodes/{id}/templates
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/templates" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:vds:template:create
GET/api/admin/vm-nodes/{id}/firewall
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/firewall" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"PUT/api/admin/vm-nodes/{id}/firewall/options
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X PUT "$PANEL_URL/api/admin/vm-nodes/$ID/firewall/options" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"POST/api/admin/vm-nodes/{id}/firewall/rules
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/firewall/rules" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"DELETE/api/admin/vm-nodes/{id}/firewall/rules/{pos}
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes | |
pos | path | - | yes |
curl -X DELETE "$PANEL_URL/api/admin/vm-nodes/$ID/firewall/rules/$POS" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/vm-nodes/{id}/setup-command
Get FeatherTail setup commands Returns APT install and config commands for FeatherTail on this Proxmox node (includes panel-issued token).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/setup-command" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Setup commands · 404 VM node not found
POST/api/admin/vm-nodes/{id}/feathertail/reset-token
Reset FeatherTail agent token Regenerates the FeatherTail Bearer token. Re-run the setup command on the Proxmox node afterward.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/feathertail/reset-token" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Token reset · 404 VM node not found
POST/api/admin/vm-nodes/{id}/feathertail/test
Test FeatherTail agent connection Calls FeatherTail GET /api/v1/system/health using the stored URL and token.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | VM Node ID |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/feathertail/test" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Probe result · 404 VM node not found
GET/api/admin/vm-nodes/{id}/feathertail/leases
List FeatherTail DHCP leases
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes |
curl -X GET "$PANEL_URL/api/admin/vm-nodes/$ID/feathertail/leases" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Lease list · 404 VM node not found
POST/api/admin/vm-nodes/{id}/feathertail/leases
Assign a FeatherTail DHCP lease
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes |
| Body field | Type | Required | Description |
|---|---|---|---|
vmid | integer | yes | |
hostname | string | yes | |
ip | string | yes | |
gateway | string | yes | |
cidr | integer | yes | |
dns_servers | string[] | no | |
lease_time_secs | integer | no |
curl -X POST "$PANEL_URL/api/admin/vm-nodes/$ID/feathertail/leases" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"vmid":0,"hostname":"","ip":"","gateway":"","cidr":0,"dns_servers":[],"lease_time_secs":0}'Responses: 200 Lease assigned · 400 Invalid payload · 404 VM node not found
DELETE/api/admin/vm-nodes/{id}/feathertail/leases/vm/{vmid}
Delete FeatherTail DHCP lease by VMID
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | |
vmid | path | integer | yes |
curl -X DELETE "$PANEL_URL/api/admin/vm-nodes/$ID/feathertail/leases/vm/$VMID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Lease deleted · 404 VM node not found