# Remote endpoints (Daemon-facing)

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

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

Defined in [`backend/app/routes/wings/remote.php`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php). Authentication used here: **Wings node token**. 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/remote/config`

- Auth: Wings node token
- Route name: `wings-remote-config`
- Controller: [`WingsConfigController::getConfig`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsConfigController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L38)

```bash
curl -X GET "$PANEL_URL/api/remote/config" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

### GET `/api/remote/health`

- Auth: Wings node token
- Route name: `wings-remote-health`
- Controller: [`WingsHealthController::getHealth`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/WingsHealthController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L48)

```bash
curl -X GET "$PANEL_URL/api/remote/health" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:wings:node:connection:status`](https://featherpanel.com/docs/plugins/events/wings/#wings-node-connection-status), [`featherpanel:wings:node:error`](https://featherpanel.com/docs/plugins/events/wings/#wings-node-error)

### GET `/api/remote/servers`

- Auth: Wings node token
- Route name: `wings-remote-servers`
- Controller: [`WingsServerListController::getRemoteServers`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerListController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L58)

**Get remote servers** Retrieve paginated list of all servers for the authenticated Wings node with complete configuration data. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `page` | query | integer | no | Page number for pagination |
| `per_page` | query | integer | no | Number of records per page |
| `search` | query | string | no | Search term to filter servers |

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `data` | WingsServerConfig\[\] | Array of server configurations |
| `links` | object |  |
| `meta` | object |  |

```bash
curl -X GET "$PANEL_URL/api/remote/servers" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

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

Responses: `200` Remote servers retrieved successfully · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `500` Internal server error

### POST `/api/remote/servers/reset`

- Auth: Wings node token
- Route name: `wings-remote-serveres-reset`
- Controller: [`WingsServersResetController::resetServers`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServersResetController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L68)

**Reset servers** Reset all server statuses for the authenticated Wings node. Requires Wings node token authentication (token ID and secret).

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `success` | boolean | Whether the reset was successful |
| `message` | string | Success message |

```bash
curl -X POST "$PANEL_URL/api/remote/servers/reset" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

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

Responses: `200` Servers reset successfully · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `500` Internal server error

### GET `/api/remote/servers/{uuid}`

- Auth: Wings node token
- Route name: `wings-server-config`
- Controller: [`WingsServerInfoController::getServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInfoController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L78)

**Get server configuration** Retrieve complete server configuration for Wings daemon including settings, environment variables, allocations, and process configuration. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuid` | path | string (uuid) | yes | Server UUID |

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `settings` | object |  |
| `process_configuration` | object |  |

```bash
curl -X GET "$PANEL_URL/api/remote/servers/$UUID" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

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

Responses: `200` Server configuration retrieved successfully · `400` Bad request - Missing server UUID · `401` Unauthorized - Invalid Wings node token (token ID and secret) · `403` Forbidden - Invalid Wings node token (token ID and secret) · `404` Not found - Server, node, allocation, spell, or realm not found · `500` Internal server error - Configuration generation failed

### GET `/api/remote/servers/{uuid}/install`

- Auth: Wings node token
- Route name: `wings-server-install`
- Controller: [`WingsServerInstallController::getServerInstall`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInstallController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L93)

**Get server installation configuration** Retrieve server installation configuration including container image, entrypoint, and installation script. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuid` | path | string (uuid) | yes | Server UUID |

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `container_image` | string | Docker container image |
| `entrypoint` | string | Container entrypoint |
| `script` | string | Installation script |

```bash
curl -X GET "$PANEL_URL/api/remote/servers/$UUID/install" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

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

Responses: `200` Server installation configuration retrieved successfully · `400` Bad request - Missing server UUID · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `404` Not found - Server, node, or spell not found · `500` Internal server error

### POST `/api/remote/servers/{uuid}/install`

- Auth: Wings node token
- Route name: `wings-server-install-done`
- Controller: [`WingsServerInstallController::postServerInstall`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerInstallController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L108)

**Report server installation completion** Report server installation completion status to update server installation state. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuid` | path | string (uuid) | yes | Server UUID |

Request body: [`ServerInstallCompletion`](https://featherpanel.com/docs/api/schemas/#schema-serverinstallcompletion) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `successful` | boolean | yes | Whether installation was successful |
| `reinstall` | boolean | no | Whether this was a reinstall |

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/install" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"successful":false,"reinstall":false}'
```

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

Responses: `204` Installation completion reported successfully · `400` Bad request - Missing server UUID, invalid JSON, or missing required field · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `404` Not found - Server, node, or spell not found · `500` Internal server error - Failed to update installation status

### POST `/api/remote/servers/{uuid}/container/status`

- Auth: Wings node token
- Route name: `wings-server-status`
- Controller: [`WingsServerStatusController::updateContainerStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Server/WingsServerStatusController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L126)

**Update server container status** Update server container status from Wings daemon. Accepts various server states including running, stopped, crashed, etc. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuid` | path | string (uuid) | yes | Server UUID |

Request body: [`ServerStatusUpdate`](https://featherpanel.com/docs/api/schemas/#schema-serverstatusupdate) (application/json) · Response data: [`ServerStatusUpdateResponse`](https://featherpanel.com/docs/api/schemas/#schema-serverstatusupdateresponse)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | object | no |  |
| `state` | string | no | Server state (fallback format) |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `message` | string | Success message |
| `state` | string | Updated server state |
| `server_uuid` | string | Server UUID |

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/container/status" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"data":{},"state":""}'
```

Plugin events: [`featherpanel:wings:server:connection:status`](https://featherpanel.com/docs/plugins/events/wings/#wings-server-connection-status), [`featherpanel:wings:server:status:updated`](https://featherpanel.com/docs/plugins/events/wings/#wings-server-status-updated)

Responses: `200` Server status updated successfully · `400` Bad request - Missing server UUID, invalid JSON, missing state field, or invalid state value · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `404` Not found - Server not found · `500` Internal server error - Failed to update server status

### POST `/api/remote/activity`

- Auth: Wings node token
- Route name: `wings-server-activity`
- Controller: [`WingsActivityController::logActivity`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Activity/WingsActivityController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L141)

**Log server activities** Log server activities from Wings daemon. Processes multiple activity logs in a single request with validation and error handling. Requires Wings node token authentication (token ID and secret).

Request body: [`WingsActivityRequest`](https://featherpanel.com/docs/api/schemas/#schema-wingsactivityrequest) (application/json) · Response data: [`WingsActivityResponse`](https://featherpanel.com/docs/api/schemas/#schema-wingsactivityresponse)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | WingsActivityLog\[\] | yes | Array of activity logs |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `message` | string | Success message |
| `processed_count` | integer | Number of activities processed successfully |

```bash
curl -X POST "$PANEL_URL/api/remote/activity" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"data":[]}'
```

Plugin events: [`featherpanel:wings:activity:logged`](https://featherpanel.com/docs/plugins/events/wings/#wings-activity-logged)

Responses: `200` All activities logged successfully · `207` Multi-status - Some activities processed with errors · `400` Bad request - Invalid JSON, missing activity data, invalid server UUID format, or invalid user UUID format · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `500` Internal server error

### POST `/api/remote/sftp/auth`

- Auth: Wings node token
- Route name: `wings-sftp-auth`
- Controller: [`SftpAuthController::authenticate`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Sftp/SftpAuthController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L151)

**SFTP authentication** Handle SFTP authentication requests from Wings daemon. Supports both password and public key authentication. Requires Wings node token authentication.

Request body: [`SftpAuthRequest`](https://featherpanel.com/docs/api/schemas/#schema-sftpauthrequest) (application/json) · Response data: [`SftpAuthSuccessResponse`](https://featherpanel.com/docs/api/schemas/#schema-sftpauthsuccessresponse)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | yes | Authentication type |
| `username` | string | yes | Username in format username.serverid |
| `password` | string | yes | Password or public key content |
| `ip` | string | yes | Client IP address |
| `session_id` | string | no | Session ID |
| `client_version` | string | no | SFTP client version |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `server` | string | Server UUID |
| `user` | string | User UUID |
| `permissions` | string\[\] | File permissions |

```bash
curl -X POST "$PANEL_URL/api/remote/sftp/auth" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"type":"","username":"","password":"","ip":"","session_id":"","client_version":""}'
```

Plugin events: [`featherpanel:wings:sftp:authentication`](https://featherpanel.com/docs/plugins/events/wings/#wings-sftp-authentication)

Responses: `200` SFTP authentication successful · `400` Bad request - Invalid request data or username format · `401` Unauthorized - Invalid Wings node token or credentials · `403` Forbidden - Invalid Wings node token or access denied · `404` Not found - Server not found · `500` Internal server error

### GET `/api/remote/backups/{backupUuid}`

- Auth: Wings node token
- Route name: `wings-backup-upload-info`
- Controller: [`WingsBackupController::getBackupUploadInfo`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Backup/WingsBackupController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L162)

**Get backup upload information** Get presigned upload URLs for S3/remote backup storage. Returns multipart upload URLs for large backup files. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `backupUuid` | path | string (uuid) | yes | Backup UUID |
| `size` | query | integer | yes | Backup file size in bytes |

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `parts` | string\[\] | Array of upload URLs for each part |
| `part_size` | integer | Size of each part in bytes |

```bash
curl -X GET "$PANEL_URL/api/remote/backups/$BACKUP_UUID?size=$SIZE" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

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

Responses: `200` Backup upload information retrieved successfully · `400` Bad request - Missing backup UUID or invalid size parameter · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `404` Not found - Backup, server, or node not found · `500` Internal server error

### POST `/api/remote/backups/{backupUuid}`

- Auth: Wings node token
- Route name: `wings-backup-completion`
- Controller: [`WingsBackupController::reportBackupCompletion`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Backup/WingsBackupController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L177)

**Report backup completion** Report backup completion and metadata to update backup record with checksum, size, and success status. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `backupUuid` | path | string (uuid) | yes | Backup UUID |

Request body: [`BackupCompletion`](https://featherpanel.com/docs/api/schemas/#schema-backupcompletion) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `checksum` | string | no | Backup file checksum, required on success |
| `checksum_type` | string | no | Type of checksum algorithm, required on success |
| `size` | integer | no | Backup file size in bytes, required on success |
| `successful` | boolean | yes | Whether backup was successful |
| `upload_id` | string | no | Upload ID for multipart uploads |

```bash
curl -X POST "$PANEL_URL/api/remote/backups/$BACKUP_UUID" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"checksum":"","checksum_type":"","size":0,"successful":false,"upload_id":""}'
```

Plugin events: [`featherpanel:wings:backup:completion:reported`](https://featherpanel.com/docs/plugins/events/wings/#wings-backup-completion-reported)

Responses: `204` Backup completion reported successfully · `400` Bad request - Missing backup UUID, invalid request body, or missing required fields · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `404` Not found - Backup, server, or node not found · `500` Internal server error - Failed to update backup

### POST `/api/remote/backups/{backupUuid}/restore`

- Auth: Wings node token
- Route name: `wings-backup-restoration`
- Controller: [`WingsBackupController::reportBackupRestoration`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Backup/WingsBackupController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L195)

**Report backup restoration completion** Report backup restoration completion status to log restoration activities. Requires Wings node token authentication (token ID and secret).

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `backupUuid` | path | string (uuid) | yes | Backup UUID |

Request body: [`BackupRestoration`](https://featherpanel.com/docs/api/schemas/#schema-backuprestoration) (application/json)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `successful` | boolean | yes | Whether restoration was successful |

```bash
curl -X POST "$PANEL_URL/api/remote/backups/$BACKUP_UUID/restore" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"successful":false}'
```

Plugin events: [`featherpanel:wings:backup:restoration:reported`](https://featherpanel.com/docs/plugins/events/wings/#wings-backup-restoration-reported)

Responses: `204` Backup restoration completion reported successfully · `400` Bad request - Missing backup UUID, invalid request body, or missing required field · `401` Unauthorized - Invalid Wings authentication · `403` Forbidden - Invalid Wings authentication · `404` Not found - Backup, server, or node not found · `500` Internal server error

### POST `/api/remote/servers/{uuid}/transfer`

- Auth: Wings node token
- Route name: `wings-transfer-status`
- Controller: [`WingsTransferStatusController::setTransferStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L214)

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

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/transfer" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:server:transfer:completed`](https://featherpanel.com/docs/plugins/events/server/#server-transfer-completed), [`featherpanel:server:transfer:failed`](https://featherpanel.com/docs/plugins/events/server/#server-transfer-failed)

### POST `/api/remote/servers/{uuid}/transfer/archive`

- Auth: Wings node token
- Route name: `wings-transfer-archive`
- Controller: [`WingsTransferStatusController::archiveReceived`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L232)

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

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/transfer/archive" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

### POST `/api/remote/servers/{uuid}/transfer/failure`

- Auth: Wings node token
- Route name: `wings-transfer-failure`
- Controller: [`WingsTransferStatusController::transferFailure`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L247)

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

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/transfer/failure" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:server:transfer:failed`](https://featherpanel.com/docs/plugins/events/server/#server-transfer-failed)

### POST `/api/remote/servers/{uuid}/transfer/success`

- Auth: Wings node token
- Route name: `wings-transfer-success`
- Controller: [`WingsTransferStatusController::transferSuccess`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/Wings/Transfer/WingsTransferStatusController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L266)

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

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/transfer/success" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:server:transfer:completed`](https://featherpanel.com/docs/plugins/events/server/#server-transfer-completed)

### GET `/api/remote/servers/{uuid}/import`

- Auth: Wings node token
- Route name: `wings-import-status`
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L287)

**Report import status** Called by Wings to report the final status of a server import operation.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuid` | path | string | yes | Server UUID |

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `successful` | boolean | yes | Whether the import completed successfully |
| `error` | string | no | Error message if import failed |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `success` | boolean |  |

```bash
curl -X GET "$PANEL_URL/api/remote/servers/$UUID/import" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"successful":false,"error":""}'
```

Responses: `200` Import status recorded successfully · `400` Bad request · `403` Invalid Wings authentication · `404` Server not found

### POST `/api/remote/servers/{uuid}/import`

- Auth: Wings node token
- Route name: `wings-import-status`
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/wings/remote.php#L287)

**Report import status** Called by Wings to report the final status of a server import operation.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuid` | path | string | yes | Server UUID |

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `successful` | boolean | yes | Whether the import completed successfully |
| `error` | string | no | Error message if import failed |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `success` | boolean |  |

```bash
curl -X POST "$PANEL_URL/api/remote/servers/$UUID/import" \
  -H "Authorization: Bearer $NODE_TOKEN_ID.$NODE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"successful":false,"error":""}'
```

Responses: `200` Import status recorded successfully · `400` Bad request · `403` Invalid Wings authentication · `404` Server not found
