# Nodes endpoints (Daemon-facing)

> 12 FeatherPanel Daemon-facing endpoints from wings/nodes.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Source: https://featherpanel.com/docs/api/reference/wings/nodes/

Defined in [`backend/app/routes/wings/nodes.php`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/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/wings/admin`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-admin-index`
- Controller: [`WingsAdminController::index`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L27)

**Wings admin index** Welcome endpoint for Wings admin functionality. Requires Wings node token authentication (token ID and secret).

Response data: [`WingsAdminResponse`](https://featherpanel.com/docs/api/schemas/#schema-wingsadminresponse)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `message` | string | Welcome message |

```bash
curl -X GET "$PANEL_URL/api/wings/admin" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Welcome message · `401` Unauthorized - Invalid authentication · `403` Forbidden - Insufficient permissions · `500` Internal server error

### GET `/api/wings/admin/node/{id}/system`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-system`
- Controller: [`WingsAdminController::system`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L39)

**Get node system information** Retrieve detailed system information for a specific node from Wings daemon. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |

Response data: [`NodeSystemInfo`](https://featherpanel.com/docs/api/schemas/#schema-nodesysteminfo)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `node` | object | Node information |
| `wings` | object | Detailed system information from Wings |

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/system" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:wings:node:system:info:retrieved`](https://featherpanel.com/docs/plugins/events/wings/#wings-node-system-info-retrieved)

Responses: `200` Node system information retrieved successfully · `400` Bad request - Missing or invalid node ID · `401` Unauthorized - Invalid authentication · `403` Forbidden - Insufficient permissions · `404` Not found - Node not found · `500` Internal server error - Wings connection failed

### GET `/api/wings/admin/node/{id}/utilization`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-utilization`
- Controller: [`WingsAdminController::utilization`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L56)

**Get node utilization** Retrieve system utilization data for a specific node from Wings daemon. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |

Response data: [`NodeUtilization`](https://featherpanel.com/docs/api/schemas/#schema-nodeutilization)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `node` | object | Node information |
| `utilization` | object | System utilization data |

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/utilization" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:wings:node:utilization:retrieved`](https://featherpanel.com/docs/plugins/events/wings/#wings-node-utilization-retrieved)

Responses: `200` Node utilization retrieved successfully · `400` Bad request - Missing or invalid node ID · `401` Unauthorized - Invalid authentication · `403` Forbidden - Insufficient permissions · `404` Not found - Node not found · `500` Internal server error - Wings connection failed

### GET `/api/wings/admin/node/{id}/ips`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-ips`
- Controller: [`WingsAdminController::getIps`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L73)

**Get node IPs** Retrieve available IP addresses for a specific node from Wings daemon. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |

Response data: [`NodeIps`](https://featherpanel.com/docs/api/schemas/#schema-nodeips)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `node` | object | Node information |
| `ips` | string\[\] | Available IP addresses |

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/ips" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:wings:node:ips:retrieved`](https://featherpanel.com/docs/plugins/events/wings/#wings-node-ips-retrieved)

Responses: `200` Node IPs retrieved successfully · `400` Bad request - Missing or invalid node ID · `401` Unauthorized - Invalid authentication · `403` Forbidden - Insufficient permissions · `404` Not found - Node not found · `500` Internal server error - Wings connection failed

### GET `/api/wings/admin/node/{id}/network`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-network`
- Controller: [`WingsAdminController::getNetwork`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L90)

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

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/network" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### GET `/api/wings/admin/node/{id}/docker/disk`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-docker-disk`
- Controller: [`WingsAdminController::getDockerDiskUsage`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L107)

**Get Docker disk usage** Retrieve Docker disk usage information for a specific node from Wings daemon. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |

Response data: [`NodeDockerDiskUsage`](https://featherpanel.com/docs/api/schemas/#schema-nodedockerdiskusage)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `node` | object | Node information |
| `dockerDiskUsage` | object | Docker disk usage data |

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/docker/disk" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:wings:docker:disk:usage:retrieved`](https://featherpanel.com/docs/plugins/events/wings/#wings-docker-disk-usage-retrieved)

Responses: `200` Docker disk usage retrieved successfully · `400` Bad request - Missing or invalid node ID · `401` Unauthorized - Invalid authentication · `403` Forbidden - Insufficient permissions · `404` Not found - Node not found · `500` Internal server error - Wings connection failed

### DELETE `/api/wings/admin/node/{id}/docker/prune`

- Auth: Admin
- Permission: `admin.nodes.edit`
- Route name: `wings-node-docker-prune`
- Controller: [`WingsAdminController::getDockerPrune`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L124)

**Prune Docker images** Execute Docker image pruning on a specific node to free up disk space. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |

Response data: [`NodeDockerPrune`](https://featherpanel.com/docs/api/schemas/#schema-nodedockerprune)

| Response `data` field | Type | Description |
| --- | --- | --- |
| `node` | object | Node information |
| `dockerPrune` | object | Docker prune results |

```bash
curl -X DELETE "$PANEL_URL/api/wings/admin/node/$ID/docker/prune" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:wings:docker:prune:completed`](https://featherpanel.com/docs/plugins/events/wings/#wings-docker-prune-completed)

Responses: `200` Docker prune completed successfully · `400` Bad request - Missing or invalid node ID · `401` Unauthorized - Invalid authentication · `403` Forbidden - Insufficient permissions · `404` Not found - Node not found · `500` Internal server error - Wings connection failed

### GET `/api/wings/admin/node/{id}/modules`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-modules-list`
- Controller: [`WingsAdminController::listModules`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L141)

**List all modules** Retrieve a list of all registered modules and their current status. Requires Wings node token authentication.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `data` | object\[\] |  |

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/modules" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Modules listed successfully

### GET `/api/wings/admin/node/{id}/modules/{module}/config`

- Auth: Admin
- Permission: `admin.nodes.view`
- Route name: `wings-node-module-config-get`
- Controller: [`WingsAdminController::getModuleConfig`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L158)

**Get module configuration** Retrieve the current configuration for a specific module. Requires Wings node token authentication.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |
| `module` | path | string | yes | Module name |

```bash
curl -X GET "$PANEL_URL/api/wings/admin/node/$ID/modules/$MODULE/config" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Module configuration retrieved successfully

### PUT `/api/wings/admin/node/{id}/modules/{module}/config`

- Auth: Admin
- Permission: `admin.nodes.edit`
- Route name: `wings-node-module-config-update`
- Controller: [`WingsAdminController::updateModuleConfig`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L179)

**Update module configuration** Update the configuration for a specific module. The module must be disabled before configuration changes can be applied. Requires Wings node token authentication.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |
| `module` | path | string | yes | Module name |

```bash
curl -X PUT "$PANEL_URL/api/wings/admin/node/$ID/modules/$MODULE/config" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Module configuration updated successfully

### POST `/api/wings/admin/node/{id}/modules/{module}/enable`

- Auth: Admin
- Permission: `admin.nodes.edit`
- Route name: `wings-node-module-enable`
- Controller: [`WingsAdminController::enableModule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L200)

**Enable module** Enable a module. This will start the module and make it active. Requires Wings node token authentication.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |
| `module` | path | string | yes | Module name |

```bash
curl -X POST "$PANEL_URL/api/wings/admin/node/$ID/modules/$MODULE/enable" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Module enabled successfully

### POST `/api/wings/admin/node/{id}/modules/{module}/disable`

- Auth: Admin
- Permission: `admin.nodes.edit`
- Route name: `wings-node-module-disable`
- Controller: [`WingsAdminController::disableModule`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsAdminController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/nodes.php#L221)

**Disable module** Disable a module. This will stop the module and make it inactive. Requires Wings node token authentication.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Node ID |
| `module` | path | string | yes | Module name |

```bash
curl -X POST "$PANEL_URL/api/wings/admin/node/$ID/modules/$MODULE/disable" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Module disabled successfully
