# Core endpoints (Client API: game servers)

> 15 FeatherPanel Client API: game servers endpoints from user/server/core.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Source: https://featherpanel.com/docs/api/reference/user/server/core/

Defined in [`backend/app/routes/user/server/core.php`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php). Authentication used here: **Signed-in user**, **Server access**. 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/user/servers`

- Auth: Signed-in user
- Default rate limit: 2 / second (`user-servers`)
- Route name: `session-servers`
- Controller: [`ServerUserController::getUserServers`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L28)

**Get user servers** Retrieve all servers owned by the user or where the user is a subuser, with pagination and search functionality.

| 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 servers by name or description |
| `view_all` | query | boolean | no | View all servers (admin only - requires ADMIN\_SERVERS\_VIEW permission) |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `servers` | UserServer\[\] |  |
| `pagination` | UserServerPagination |  |
| `search` | ServerSearch |  |

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

Responses: `200` User servers retrieved successfully · `401` Unauthorized - User not authenticated · `500` Internal server error - Failed to retrieve servers

### GET `/api/user/servers/all-others`

- Auth: Signed-in user
- Default rate limit: 2 / second (`user-servers-all-others`)
- Route name: `session-servers-all-others`
- Controller: [`ServerUserController::getAdminAllOtherServers`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L41)

```bash
curl -X GET "$PANEL_URL/api/user/servers/all-others" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### GET `/api/user/servers/{uuidShort}`

- Auth: Server access
- Default rate limit: 30 / minute
- Route name: `session-server-get`
- Controller: [`ServerUserController::getServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L54)

**Get server details** Retrieve detailed information about a specific server including node, realm, spell, allocation, location, SFTP details, and variables.

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

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `id` | integer | Server ID |
| `uuid` | string | Server UUID |
| `uuidShort` | string | Server short UUID |
| `name` | string | Server name |
| `description` | string | Server description |
| `status` | string | Server status |
| `memory` | integer | Memory limit in MB |
| `disk` | integer | Disk limit in MB |
| `cpu` | integer | CPU limit percentage |
| `swap` | integer | Swap limit in MB |
| `io` | integer | IO limit |
| `node` | object | Node information |
| `realm` | object | Realm information |
| `spell` | object | Spell information |
| `allocation` | object | Allocation information |
| `location` | object | Location information |
| `sftp` | object |  |
| `variables` | object\[\] | Server variables |

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

Responses: `200` Server details retrieved successfully · `400` Bad request - Missing or invalid UUID short · `401` Unauthorized - User not authenticated · `403` Forbidden - Access denied to server · `404` Not found - Server not found · `500` Internal server error - Failed to retrieve server

### GET `/api/user/servers/{uuidShort}/resources`

- Auth: Server access
- Default rate limit: 30 / minute (`user-server-resources`)
- Route name: `session-server-resources`
- Controller: [`ServerUserController::getServerResources`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L72)

**Get current resource usage** Returns the daemon-reported utilization (disk, memory, CPU) for a server, including while it is offline, together with the configured limits from the panel.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuidShort` | path | string | yes |  |

```bash
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/resources" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Resource usage · `404` Server or node not found · `502` Daemon unreachable

### POST `/api/user/servers/{uuidShort}/jwt`

- Auth: Server access
- Route name: `session-server-jwt`
- Controller: [`ServerUserController::generateServerJwt`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L91)

**Generate server JWT token** Generate a JWT token for Wings API access with user permissions and WebSocket connection details.

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

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

| Response `data` field | Type | Description |
| --- | --- | --- |
| `token` | string | JWT token |
| `expires_at` | integer | Token expiration timestamp |
| `server_uuid` | string | Server UUID |
| `user_uuid` | string | User UUID |
| `permissions` | string\[\] | User permissions |
| `connection_string` | string | WebSocket connection string |

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/jwt" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` JWT token generated successfully · `400` Bad request - Missing or invalid UUID short · `401` Unauthorized - User not authenticated · `403` Forbidden - Access denied to server · `404` Not found - Server or node not found · `500` Internal server error - Failed to generate JWT token

### PUT `/api/user/servers/{uuidShort}`

- Auth: Server access
- Default rate limit: 2 / minute (`user-server-update`)
- Route name: `session-server-update`
- Controller: [`ServerUserController::updateServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L108)

**Update server** Update server information including name, description, startup command, Docker image, and variables. Syncs changes with Wings daemon.

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

Request body: [`ServerUpdateRequest`](https://featherpanel.com/docs/api/schemas/#schema-serverupdaterequest) (application/json) · Response data: [`ServerUpdateResponse`](https://featherpanel.com/docs/api/schemas/#schema-serverupdateresponse)

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no | Server name |
| `description` | string | no | Server description |
| `startup` | string | no | Startup command |
| `image` | string | no | Docker image |
| `spell_id` | integer | no | Spell ID to change server spell |
| `wipe_files` | boolean | no | Whether to delete all server files before reinstalling (only applies when changing spell\_id) |
| `auto_start` | boolean | no | Start automatically after node reboot/reconnect |
| `auto_start_delay` | integer | no | Extra delay in seconds before auto-start |
| `variables` | object\[\] | no | Server variables |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `server` | object |  |

```bash
curl -X PUT "$PANEL_URL/api/user/servers/$UUID_SHORT" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","description":"","startup":"","image":"","spell_id":0,"wipe_files":false,"auto_start":false,"auto_start_delay":0,"variables":[]}'
```

Plugin events: [`featherpanel:server:reinstall`](https://featherpanel.com/docs/plugins/events/server/#server-reinstalled), [`featherpanel:user:server:updated`](https://featherpanel.com/docs/plugins/events/server-user/#server-user-updated)

Responses: `200` Server updated successfully · `400` Bad request - Missing UUID, invalid data, or validation errors · `401` Unauthorized - User not authenticated · `403` Forbidden - Access denied to server or variable not editable · `404` Not found - Server or node not found · `422` Unprocessable entity - Invalid variable values or unknown variables · `500` Internal server error - Failed to update server

### POST `/api/user/servers/{uuidShort}/custom-variables`

- Auth: Server access
- Default rate limit: 10 / minute (`user-server-custom-variable-create`)
- Route name: `session-server-custom-variable-create`
- Controller: [`ServerUserController::createCustomVariable`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L126)

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

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/custom-variables" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### DELETE `/api/user/servers/{uuidShort}/custom-variables/{variableId}`

- Auth: Server access
- Default rate limit: 10 / minute (`user-server-custom-variable-delete`)
- Route name: `session-server-custom-variable-delete`
- Controller: [`ServerUserController::deleteCustomVariable`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L144)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uuidShort` | path | \- | yes |  |
| `variableId` | path | \- | yes |  |

```bash
curl -X DELETE "$PANEL_URL/api/user/servers/$UUID_SHORT/custom-variables/$VARIABLE_ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### DELETE `/api/user/servers/{uuidShort}`

- Auth: Server access
- Default rate limit: 1 / hour (`user-server-delete`)
- Route name: `session-server-delete`
- Controller: [`ServerUserController::deleteServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L167)

**Delete server** Permanently delete a server. Only server owners can delete their servers. This action cannot be undone and will delete all server data, files, databases, and configurations.

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

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

```bash
curl -X DELETE "$PANEL_URL/api/user/servers/$UUID_SHORT" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

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

Responses: `200` Server deleted successfully · `400` Bad request - Invalid server configuration · `401` Unauthorized - User not authenticated · `403` Forbidden - Access denied to server or user is not the server owner · `404` Not found - Server or node not found · `422` Unprocessable Entity - Invalid server data · `500` Internal server error - Failed to delete server

### POST `/api/user/servers/{uuidShort}/reinstall`

- Auth: Server access
- Default rate limit: 1 / minute
- Route name: `session-server-reinstall`
- Controller: [`ServerUserController::reinstallServer`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L186)

**Reinstall server** Reinstall a server using Wings daemon. This will reset the server to its initial state. Optionally wipe all files before reinstalling.

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

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `wipe_files` | boolean | no | Whether to delete all server files before reinstalling |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `server` | object |  |

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/reinstall" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"wipe_files":false}'
```

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

Responses: `200` Server reinstalled successfully · `400` Bad request - Missing or invalid UUID short · `401` Unauthorized - User not authenticated · `403` Forbidden - Access denied to server · `404` Not found - Server or node not found · `500` Internal server error - Failed to reinstall server

### POST `/api/user/servers/{uuidShort}/install/abort`

- Auth: Server access
- Default rate limit: 2 / minute
- Route name: `session-server-install-abort`
- Controller: [`ServerUserController::abortInstall`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L201)

**Abort server install** Abort an in-progress install or reinstall on a Calagopus (wings\_rs) node.

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

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/install/abort" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Responses: `200` Install abort requested · `401` Unauthorized · `403` Forbidden · `404` Server or node not found · `500` Internal server error · `501` Daemon feature unsupported

### POST `/api/user/servers/{uuidShort}/script`

- Auth: Server access
- Default rate limit: 2 / minute
- Route name: `session-server-script`
- Controller: [`ServerUserController::runScript`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L218)

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

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/script" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### GET `/api/user/servers/{uuidShort}/daemon-version`

- Auth: Server access
- Default rate limit: 30 / minute
- Route name: `session-server-daemon-version`
- Controller: [`ServerUserController::getDaemonServerVersion`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L235)

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

```bash
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/daemon-version" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### POST `/api/user/servers/{uuidShort}/ws/broadcast`

- Auth: Server access
- Default rate limit: 10 / minute
- Route name: `session-server-ws-broadcast`
- Controller: [`ServerUserController::broadcastWs`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L252)

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

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/ws/broadcast" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### POST `/api/user/servers/{uuidShort}/command`

- Auth: Server access
- Default rate limit: 30 / minute
- Route name: `session-server-command`
- Controller: [`ServerUserController::sendCommand`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Server/ServerUserController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/server/core.php#L270)

**Send console command** Send a console command to the server via Wings daemon WebSocket connection.

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

| Body field | Type | Required | Description |
| --- | --- | --- | --- |
| `command` | string | yes | Console command to execute |

| Response `data` field | Type | Description |
| --- | --- | --- |
| `message` | string | Success message |
| `command` | string | Command that was sent |

```bash
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/command" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"command":""}'
```

Responses: `200` Command sent successfully · `400` Bad request - Missing command or server offline · `401` Unauthorized - User not authenticated · `403` Forbidden - Access denied or insufficient permissions · `404` Not found - Server or node not found · `500` Internal server error - Failed to send command
