View .md

VM Nodes endpoints (Admin API)

21 FeatherPanel Admin API endpoints from admin/vm-nodes.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Last synced from FeatherPanel 15b94e9 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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodesController: VmNodesController::indexroute source

Get all Proxmox VM nodes Retrieve a paginated list of all VM nodes (Proxmox hypervisors) with optional search and VPS-location filtering.

ParameterInTypeRequiredDescription
pagequeryintegernoPage number for pagination
limitqueryintegernoNumber of records per page
searchquerystringnoSearch term to filter VM nodes by name or FQDN
location_idqueryintegernoLocation ID to filter VM nodes by (must be type=vps)
Response data fieldTypeDescription
vm_nodesVmNode[]
paginationVmNodePagination
searchobject
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}

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-showController: VmNodesController::showroute source

Get VM node by ID Retrieve a specific VM node by its ID.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
Response data fieldTypeDescription
vm_nodeVmNode
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

Auth: AdminPermission: admin.nodes.createRoute name: admin-vm-nodes-createController: VmNodesController::createroute source

Create new VM node Create a new VM node (Proxmox hypervisor) associated with a VPS/VDS location.

Request body: VmNodeCreate (application/json)

Body fieldTypeRequiredDescription
namestringyesVM Node name
descriptionstringnoVM Node description
location_idintegeryesLocation ID (must be type=vps)
fqdnstringyesProxmox host FQDN or IP
schemestringnoConnection scheme
portintegernoProxmox API port
userstringyesProxmox API user (e.g. root@pam)
token_idstringyesProxmox API token ID
secretstringyesProxmox API token secret
tls_no_verifystringnoSkip TLS verification
timeoutintegernoTimeout in seconds
addional_headersstringnoAdditional HTTP headers (JSON encoded, optional)
additional_paramsstringnoAdditional query parameters (JSON encoded, optional)
idintegernoOptional VM node ID (useful for migrations)
Response data fieldTypeDescription
vm_nodeVmNode
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":"","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}

Auth: AdminPermission: admin.nodes.editRoute name: admin-vm-nodes-updateController: VmNodesController::updateroute source

Update VM node Update an existing VM node. Only provided fields will be updated. Validates location existence and type.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID

Request body: VmNodeUpdate (application/json)

Body fieldTypeRequiredDescription
namestringnoVM Node name
descriptionstringnoVM Node description
location_idintegernoLocation ID (must be type=vps)
fqdnstringnoProxmox host FQDN or IP
schemestringnoConnection scheme
portintegernoProxmox API port
userstringnoProxmox API user (e.g. root@pam)
token_idstringnoProxmox API token ID
secretstringnoProxmox API token secret
tls_no_verifystringnoSkip TLS verification
timeoutintegernoTimeout in seconds
addional_headersstringnoAdditional HTTP headers (JSON encoded, optional)
additional_paramsstringnoAdditional query parameters (JSON encoded, optional)
Response data fieldTypeDescription
vm_nodeVmNode
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":""}'

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}

Auth: AdminPermission: admin.nodes.deleteRoute name: admin-vm-nodes-deleteController: VmNodesController::deleteroute source

Delete VM node Permanently delete a VM node from the database. This does not touch the Proxmox host itself.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
Response data fieldTypeDescription
messagestringSuccess 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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-test-connectionController: VmNodesController::testConnectionroute source

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.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
Response data fieldTypeDescription
okboolean
status_codeinteger
latency_msinteger
nodesobject[]
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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-test-connectionController: VmNodesController::testConnectionroute source

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.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
Response data fieldTypeDescription
okboolean
status_codeinteger
latency_msinteger
nodesobject[]
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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-infoController: VmNodesController::getInforoute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-ips-indexController: VmNodesController::listIpsroute source

List IPs for a VM node Retrieve all IP addresses configured for a specific VM node.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
pagequeryintegernoPage number for pagination
limitqueryintegernoNumber of records per page
Response data fieldTypeDescription
ipsobject[]
paginationobject
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

Auth: AdminPermission: admin.nodes.editRoute name: admin-vm-nodes-ips-createController: VmNodesController::createIproute source

Create IP for VM node Create a new IP address for a specific VM node.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
Body fieldTypeRequiredDescription
ipstringyesIP address
cidrintegernoCIDR prefix length
gatewaystringnoGateway IP
is_primarystringnoMark as primary IP
notesstringnoNotes
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":"","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}

Auth: AdminPermission: admin.nodes.editRoute name: admin-vm-nodes-ips-updateController: VmNodesController::updateIproute source

Update IP for VM node Update an existing IP entry for a VM node.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
ipIdpathintegeryesVM IP ID
Body fieldTypeRequiredDescription
ipstringnoIP address
cidrintegernoCIDR prefix length
gatewaystringnoGateway IP
is_primarystringnoMark as primary IP
notesstringnoNotes
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":"","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}

Auth: AdminPermission: admin.nodes.editRoute name: admin-vm-nodes-ips-deleteController: VmNodesController::deleteIproute source

Delete IP from VM node Delete an IP entry from a VM node.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
ipIdpathintegeryesVM 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

Auth: AdminPermission: admin.nodes.editRoute name: admin-vm-nodes-ips-set-primaryController: VmNodesController::setPrimaryIproute source

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.

ParameterInTypeRequiredDescription
idpathintegeryesVM Node ID
ipIdpathintegeryesVM 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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-free-ipsController: VmNodesController::freeIpsroute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-proxmox-vmsController: VmNodesController::proxmoxVmsroute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-cluster-nodesController: VmNodesController::clusterNodesroute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-bridgesController: VmNodesController::bridgesroute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-storageController: VmNodesController::storageroute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-backup-storageController: VmNodesController::backupStorageroute source
ParameterInTypeRequiredDescription
idpath-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}/templates

Auth: AdminPermission: admin.nodes.viewRoute name: admin-vm-nodes-templatesController: VmNodesController::templatesroute source
ParameterInTypeRequiredDescription
idpath-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

Auth: AdminPermission: admin.nodes.editRoute name: admin-vm-nodes-templates-createController: VmNodesController::createTemplateroute source
ParameterInTypeRequiredDescription
idpath-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