# VM Nodes endpoints (Admin API)

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

Source: https://featherpanel.com/docs/api/reference/admin/vm-nodes/

Defined in [`backend/app/routes/admin/vm-nodes.php`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php). Authentication used here: **Admin**. Read [Authentication](https://featherpanel.com/docs/api/authentication/) for how to send credentials and [Rate limits and errors](https://featherpanel.com/docs/api/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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes`
- Controller: [`VmNodesController::index`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L26)

**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 |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-show`
- Controller: [`VmNodesController::show`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L36)

**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 |  |

```bash
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: Admin
- Permission: `admin.nodes.create`
- Route name: `admin-vm-nodes-create`
- Controller: [`VmNodesController::create`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L51)

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

Request body: [`VmNodeCreate`](https://featherpanel.com/docs/api/schemas/#schema-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) |
| `id` | integer | no | Optional VM node ID (useful for migrations) |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `vm_node` | VmNode |  |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-created)

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: Admin
- Permission: `admin.nodes.edit`
- Route name: `admin-vm-nodes-update`
- Controller: [`VmNodesController::update`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L62)

**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`](https://featherpanel.com/docs/api/schemas/#schema-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) |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `vm_node` | VmNode |  |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-updated)

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: Admin
- Permission: `admin.nodes.delete`
- Route name: `admin-vm-nodes-delete`
- Controller: [`VmNodesController::delete`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L78)

**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 |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-deleted)

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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-test-connection`
- Controller: [`VmNodesController::testConnection`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L94)

**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\[\] |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-test-connection`
- Controller: [`VmNodesController::testConnection`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L94)

**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\[\] |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-info`
- Controller: [`VmNodesController::getInfo`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L110)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-ips-index`
- Controller: [`VmNodesController::listIps`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L126)

**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 |  |

```bash
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: Admin
- Permission: `admin.nodes.edit`
- Route name: `admin-vm-nodes-ips-create`
- Controller: [`VmNodesController::createIp`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L142)

**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 |
| `notes` | string | no | Notes |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-ip-created)

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: Admin
- Permission: `admin.nodes.edit`
- Route name: `admin-vm-nodes-ips-update`
- Controller: [`VmNodesController::updateIp`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L158)

**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 |
| `notes` | string | no | Notes |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-ip-updated)

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: Admin
- Permission: `admin.nodes.edit`
- Route name: `admin-vm-nodes-ips-delete`
- Controller: [`VmNodesController::deleteIp`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L175)

**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 |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-ip-deleted)

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: Admin
- Permission: `admin.nodes.edit`
- Route name: `admin-vm-nodes-ips-set-primary`
- Controller: [`VmNodesController::setPrimaryIp`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L192)

**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 |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-node-ip-primary-set)

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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-free-ips`
- Controller: [`VmNodesController::freeIps`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L209)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-proxmox-vms`
- Controller: [`VmNodesController::proxmoxVms`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L225)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-cluster-nodes`
- Controller: [`VmNodesController::clusterNodes`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L241)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-bridges`
- Controller: [`VmNodesController::bridges`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L257)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-storage`
- Controller: [`VmNodesController::storage`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L273)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-backup-storage`
- Controller: [`VmNodesController::backupStorage`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L289)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.view`
- Route name: `admin-vm-nodes-templates`
- Controller: [`VmNodesController::templates`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L305)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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: Admin
- Permission: `admin.nodes.edit`
- Route name: `admin-vm-nodes-templates-create`
- Controller: [`VmNodesController::createTemplate`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Admin/VmNodesController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/admin/vm-nodes.php#L321)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
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`](https://featherpanel.com/docs/plugins/events/vds-node/#vds-template-created)
