Servers endpoints (Admin API)
31 FeatherPanel Admin API endpoints from admin/servers.php: methods, paths, auth, permissions, rate limits, parameters and responses.
Last synced from FeatherPanel 15b94e9 on .
On this page
Defined in backend/app/routes/admin/servers.php. Authentication used here: Admin. Read Authentication for how to send credentials and Rate limits and errors for the response envelope.
Paths, methods, permissions and rate limits come from the route file. Summaries, parameters and response codes come from the OpenAPI annotations on the controllers; endpoints without annotations show only what the route file declares.
Endpoints
GET/api/admin/servers
Get all servers Retrieve a paginated list of all servers with optional filtering by owner, node, realm, spell, 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 |
owner_id | query | integer | no | Filter servers by owner ID |
node_id | query | integer | no | Filter servers by node ID |
realm_id | query | integer | no | Filter servers by realm ID |
spell_id | query | integer | no | Filter servers by spell ID |
location_id | query | integer | no | Filter servers by location ID (through their node) |
server_id | query | integer | no | Filter servers by server ID |
uuid | query | string (uuid) | no | Filter servers by UUID |
uuid_short | query | string | no | Filter servers by short UUID |
external_id | query | string | no | Filter servers by external ID |
sort_by | query | string | no | Field to sort servers by (id, name, created_at, updated_at) |
sort_order | query | string | no | Sort order (ASC or DESC) |
Response data field | Type | Description |
|---|---|---|
servers | Server[] | |
pagination | ServerPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/servers" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Servers retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/{id}/mounts/assignable
Mounts that can be toggled for this server
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/mounts/assignable" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"GET/api/admin/servers/{id}
Get server by ID Retrieve a specific server by its ID with complete details including related data, variables, SFTP information, and recent activity.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
id | integer | Server ID |
uuid | string | Server UUID |
uuidShort | string | Short server UUID |
name | string | Server name |
description | string | Server description |
startup | string | Server startup command |
image | string | Server Docker image |
status | string | Server status |
owner | object | Server owner information |
node | object | Node information |
realm | object | Realm information |
spell | object | Spell information |
allocation | object | Allocation information |
variables | ServerVariable[] | Server variables |
mounts | object[] | Full mount rows attached to this server |
mount_ids | integer[] | IDs of mounts attached to this server |
sftp | ServerSFTP | |
activity | object[] | Recent server activity |
curl -X GET "$PANEL_URL/api/admin/servers/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server retrieved successfully · 400 Bad request - Invalid server ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found
GET/api/admin/servers/external/{externalId}
Get server by external ID Retrieve a specific server by its external ID with complete details including related data, variables, SFTP information, and recent activity.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
externalId | path | string | yes | Server external ID |
Response data field | Type | Description |
|---|---|---|
id | integer | Server ID |
uuid | string | Server UUID |
uuidShort | string | Short server UUID |
name | string | Server name |
description | string | Server description |
startup | string | Server startup command |
image | string | Server Docker image |
status | string | Server status |
owner | object | Server owner information |
node | object | Node information |
realm | object | Realm information |
spell | object | Spell information |
allocation | object | Allocation information |
variables | ServerVariable[] | Server variables |
mounts | object[] | Full mount rows attached to this server |
mount_ids | integer[] | IDs of mounts attached to this server |
sftp | ServerSFTP | |
activity | object[] | Recent server activity |
curl -X GET "$PANEL_URL/api/admin/servers/external/$EXTERNAL_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server retrieved successfully · 400 Bad request - Invalid external ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found
PATCH/api/admin/servers/{id}
Update server Update an existing server with comprehensive validation, Wings synchronization, variable handling, and allocation management.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Request body: ServerUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
node_id | integer | no | Node ID |
name | string | no | Server name |
description | string | no | Server description |
owner_id | integer | no | Owner user ID |
memory | integer | no | Memory limit in MB |
swap | integer | no | Swap limit in MB (-1 = unlimited, 0 = disabled) |
disk | integer | no | Disk limit in MB |
io | integer | no | IO limit |
cpu | integer | no | CPU limit percentage |
allocation_id | integer | no | Allocation ID |
realms_id | integer | no | Realm ID |
spell_id | integer | no | Spell ID |
startup | string | no | Server startup command |
image | string | no | Server Docker image |
status | string | no | Server status |
allocation_limit | integer | no | Allocation limit |
database_limit | integer | no | Database limit |
backup_limit | integer | no | Backup limit |
external_id | string | no | External ID |
threads | string | no | Specific CPU threads this process can run on. Single number, comma list, or ranges like 0,1,3 or 0-1,3 |
skip_scripts | boolean | no | Skip scripts flag |
show_on_status | boolean | no | Whether this server appears on the public status page |
auto_start | boolean | no | Automatically start this server after the node reconnects (default off) |
auto_start_delay | integer | no | Extra seconds to wait before auto-starting this server after reconnect |
oom_disabled | boolean | no | OOM disabled flag |
variables | object | no | Server variables as key-value pairs |
mount_ids | integer[] | no | Optional: replace Wings bind mounts for this server |
Response data field | Type | Description |
|---|---|---|
server | object |
curl -X PATCH "$PANEL_URL/api/admin/servers/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"node_id":0,"name":"","description":"","owner_id":0,"memory":0,"swap":0,"disk":0,"io":0,"cpu":0,"allocation_id":0,"realms_id":0,"spell_id":0,"startup":"","image":"","status":"","allocation_limit":0,"database_limit":0,"backup_limit":0,"external_id":"","threads":"","skip_scripts":false,"show_on_status":false,"auto_start":false,"auto_start_delay":0,"oom_disabled":false,"variables":{},"mount_ids":[]}'Plugin events: featherpanel:server:reinstall, featherpanel:server:update
Responses: 200 Server updated successfully · 400 Bad request - Invalid JSON, invalid data types, validation errors, invalid foreign keys, or allocation in use · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 500 Internal server error - Failed to update server, Wings sync error, or variables update failed
DELETE/api/admin/servers/{id}
Delete server Permanently delete a server from the database and Wings daemon. Unclaims allocation and sends notification email to the server owner.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/servers/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:server:delete
Responses: 200 Server deleted successfully · 400 Bad request - Invalid server configuration · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 422 Unprocessable Entity - Invalid server data · 500 Internal server error - Failed to delete server or Wings error
DELETE/api/admin/servers/{id}/hard
Hard delete server Force delete a server from the database only, without contacting Wings. Use this only when Wings is unreachable or the node is dead. This will NOT remove server files from Wings.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/servers/$ID/hard" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:server:delete
Responses: 200 Server hard deleted successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 500 Internal server error - Failed to delete server from database
PUT/api/admin/servers
Create new server Create a new server with comprehensive validation, Wings integration, variable handling, and email notifications.
Request body: ServerCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
node_id | integer | yes | Node ID |
name | string | yes | Server name |
description | string | no | Server description (optional) |
owner_id | integer | yes | Owner user ID |
memory | integer | yes | Memory limit in MB |
swap | integer | yes | Swap limit in MB (-1 = unlimited, 0 = disabled) |
disk | integer | yes | Disk limit in MB |
io | integer | yes | IO limit |
cpu | integer | yes | CPU limit percentage |
allocation_id | integer | yes | Allocation ID |
realms_id | integer | yes | Realm ID |
spell_id | integer | yes | Spell ID |
startup | string | yes | Server startup command |
image | string | yes | Server Docker image |
status | string | no | Server status |
allocation_limit | integer | no | Allocation limit |
database_limit | integer | no | Database limit |
backup_limit | integer | no | Backup limit |
external_id | string | no | External ID |
threads | string | no | Specific CPU threads this process can run on. Single number, comma list, or ranges like 0,1,3 or 0-1,3 |
skip_scripts | boolean | no | Skip scripts flag |
show_on_status | boolean | no | Whether this server appears on the public status page |
auto_start | boolean | no | Automatically start this server after the node reconnects (default off) |
auto_start_delay | integer | no | Extra seconds to wait before auto-starting this server after reconnect |
oom_disabled | boolean | no | OOM disabled flag |
variables | object | no | Server variables as key-value pairs |
mount_ids | integer[] | no | Optional: Wings bind mounts to attach (validated against node/spell rules) |
Response data field | Type | Description |
|---|---|---|
server_id | integer | ID of the created server |
curl -X PUT "$PANEL_URL/api/admin/servers" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"node_id":0,"name":"","description":"","owner_id":0,"memory":0,"swap":0,"disk":0,"io":0,"cpu":0,"allocation_id":0,"realms_id":0,"spell_id":0,"startup":"","image":"","status":"","allocation_limit":0,"database_limit":0,"backup_limit":0,"external_id":"","threads":"","skip_scripts":false,"show_on_status":false,"auto_start":false,"auto_start_delay":0,"oom_disabled":false,"variables":{},"mount_ids":[]}'Plugin events: featherpanel:server:created
Responses: 201 Server created successfully · 400 Bad request - Invalid JSON, missing required fields, invalid data types, validation errors, invalid foreign keys, or allocation in use · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 User, node, allocation, realm, or spell not found · 422 Unprocessable Entity - Missing required spell variables or Wings validation failed · 500 Internal server error - Failed to create server, Wings error, or email sending failed
GET/api/admin/servers/owner/{ownerId}
Get servers by owner Retrieve all servers owned by a specific user.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
ownerId | path | integer | yes | Owner user ID |
Response data field | Type | Description |
|---|---|---|
servers | Server[] |
curl -X GET "$PANEL_URL/api/admin/servers/owner/$OWNER_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Servers retrieved successfully · 400 Bad request - Invalid owner ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/node/{nodeId}
Get servers by node Retrieve all servers running on a specific node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
nodeId | path | integer | yes | Node ID |
Response data field | Type | Description |
|---|---|---|
servers | Server[] |
curl -X GET "$PANEL_URL/api/admin/servers/node/$NODE_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Servers retrieved successfully · 400 Bad request - Invalid node ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/realm/{realmId}
Get servers by realm Retrieve all servers belonging to a specific realm.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
realmId | path | integer | yes | Realm ID |
Response data field | Type | Description |
|---|---|---|
servers | Server[] |
curl -X GET "$PANEL_URL/api/admin/servers/realm/$REALM_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Servers retrieved successfully · 400 Bad request - Invalid realm ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/spell/{spellId}
Get servers by spell Retrieve all servers using a specific spell.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
spellId | path | integer | yes | Spell ID |
Response data field | Type | Description |
|---|---|---|
servers | Server[] |
curl -X GET "$PANEL_URL/api/admin/servers/spell/$SPELL_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Servers retrieved successfully · 400 Bad request - Invalid spell ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/{id}/with-relations
Get server with relations Retrieve a specific server with all its related data including owner, node, realm, spell, and allocation information.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
server | Server |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/with-relations" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server with relations retrieved successfully · 400 Bad request - Invalid server ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found
GET/api/admin/servers/with-relations
Get all servers with relations Retrieve all servers with their related data including owner, node, realm, spell, and allocation information.
Response data field | Type | Description |
|---|---|---|
servers | Server[] |
curl -X GET "$PANEL_URL/api/admin/servers/with-relations" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Servers with relations retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/{id}/variables
Get server variables Retrieve all variables for a specific server with their spell variable definitions and metadata.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
variables | ServerVariable[] |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/variables" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server variables retrieved successfully · 400 Bad request - Invalid server ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found
POST/api/admin/servers/{id}/custom-variables
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/custom-variables" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"DELETE/api/admin/servers/{id}/custom-variables/{variableId}
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes | |
variableId | path | - | yes |
curl -X DELETE "$PANEL_URL/api/admin/servers/$ID/custom-variables/$VARIABLE_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"POST/api/admin/servers/{id}/suspend
Suspend server Suspend a server by killing it in Wings and updating the suspended status. Sends notification email to the server owner.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/suspend" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:server:suspended
Responses: 200 Server suspended successfully · 400 Bad request - Invalid server configuration · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 422 Unprocessable Entity - Invalid server data · 500 Internal server error - Failed to suspend server or Wings error
POST/api/admin/servers/{id}/warn
Send warning to server owner Create an in-panel warning for the server owner (optionally emailed), e.g. high CPU stop notices.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
| Body field | Type | Required | Description |
|---|---|---|---|
title | string | yes | Warning title |
message | string | yes | Warning message (markdown supported) |
type | string | no | Notification type (default: warning) |
send_email | boolean | no | Also email the server owner (default: true) |
is_dismissible | boolean | no | Whether the warning can be dismissed (default: true) |
is_sticky | boolean | no | Whether the warning stays until closed (default: false) |
Response data field | Type | Description |
|---|---|---|
notification_id | integer | |
emailed | boolean |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/warn" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"title":"","message":"","type":"","send_email":false,"is_dismissible":false,"is_sticky":false}'Responses: 201 Warning sent successfully · 400 Bad request · 401 Unauthorized · 403 Forbidden · 404 Server not found · 500 Internal server error
POST/api/admin/servers/{id}/unsuspend
Unsuspend server Unsuspend a server by updating the suspended status. Sends notification email to the server owner.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/unsuspend" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:server:unsuspended
Responses: 200 Server unsuspended successfully · 400 Bad request - Invalid server ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 500 Internal server error - Failed to unsuspend server
POST/api/admin/servers/{id}/reconcile
Force runtime reconcile Asks Wings to recover a server stuck in starting/stopping or desynchronized from Docker/containerd.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/reconcile" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Reconciliation completed · 404 Server or node not found · 409 Server is busy (install/transfer/restore) · 500 Wings reconciliation failed
GET/api/admin/servers/{id}/runtime
Get Wings runtime health Returns the live Wings process state and runtime health (Docker desync detection).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/runtime" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Runtime health · 404 Server or node not found · 500 Failed to query Wings
GET/api/admin/server-activities
Get all server activities Retrieve a paginated list of all server activities with optional filtering by server, node, user, 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 activities by description or type |
server_id | query | integer | no | Filter activities by server ID |
node_id | query | integer | no | Filter activities by node ID |
user_id | query | integer | no | Filter activities by user ID |
Response data field | Type | Description |
|---|---|---|
activities | ServerActivity[] | |
pagination | ServerActivityPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/server-activities" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server activities retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/servers/{id}/activities
Get server activities by server ID Retrieve a paginated list of activities for a specific server with optional search functionality.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
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 activities by description or type |
Response data field | Type | Description |
|---|---|---|
activities | ServerActivity[] | |
pagination | ServerActivityPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/activities" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server activities retrieved successfully · 400 Bad request - Invalid server ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found
GET/api/admin/servers/{id}/allocations
Get server allocations (Admin) Retrieve all allocations assigned to a specific server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes | |
serverId | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
success | boolean | |
data | object |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/allocations" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Server allocations retrieved successfully · 404 Server not found · 500 Internal server error
POST/api/admin/servers/{id}/allocations
Assign allocation to server (Admin) Assign a specific allocation to a server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | - | yes | |
serverId | path | integer | yes | Server ID |
| Body field | Type | Required | Description |
|---|---|---|---|
allocation_id | integer | no | Allocation ID to assign |
Response data field | Type | Description |
|---|---|---|
success | boolean | |
message | string | |
data | object |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/allocations" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"allocation_id":0}'Responses: 200 Allocation assigned successfully · 400 Bad request · 404 Server or allocation not found · 500 Internal server error
DELETE/api/admin/servers/{serverId}/allocations/{allocationId}
Delete server allocation (Admin) Remove an allocation from a server. Cannot delete the primary allocation.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
serverId | path | integer | yes | Server ID |
allocationId | path | integer | yes | Allocation ID to delete |
Response data field | Type | Description |
|---|---|---|
success | boolean | |
message | string |
curl -X DELETE "$PANEL_URL/api/admin/servers/$SERVER_ID/allocations/$ALLOCATION_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Allocation deleted successfully · 400 Cannot delete primary allocation · 404 Server or allocation not found · 500 Internal server error
POST/api/admin/servers/{serverId}/allocations/{allocationId}/primary
Set primary allocation (Admin) Set a specific allocation as the primary allocation for the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
serverId | path | integer | yes | Server ID |
allocationId | path | integer | yes | Allocation ID to set as primary |
Response data field | Type | Description |
|---|---|---|
success | boolean | |
message | string |
curl -X POST "$PANEL_URL/api/admin/servers/$SERVER_ID/allocations/$ALLOCATION_ID/primary" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Primary allocation updated successfully · 400 Bad request · 404 Server or allocation not found · 500 Internal server error
POST/api/admin/servers/{id}/transfer
Initiate server transfer Start a transfer of a server from its current node to a destination node. Generates a transfer JWT token and instructs the source node to begin the transfer process.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
| Body field | Type | Required | Description |
|---|---|---|---|
destination_node_id | integer | yes | Destination node ID |
destination_allocation_id | integer | no | Destination allocation ID (optional) |
backups | string (uuid)[] | no | Optional backup UUIDs to transfer (Calagopus) |
include_all_backups | boolean | no | Include all successful server backups when no explicit backups are supplied |
delete_backups | boolean | no | Delete transferred backups on the source node (Calagopus) |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
transfer_token | string | Transfer JWT token |
curl -X POST "$PANEL_URL/api/admin/servers/$ID/transfer" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"destination_node_id":0,"destination_allocation_id":0,"backups":[],"include_all_backups":false,"delete_backups":false}'Responses: 200 Server transfer initiated successfully · 400 Bad request - Invalid destination node, server already transferring, or same source and destination · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found or destination node not found · 500 Internal server error - Failed to initiate transfer or Wings error
GET/api/admin/servers/{id}/transfer
Get server transfer status Retrieve the current status of a server transfer including progress, start time, and any error messages.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
status | string | Transfer status |
progress | number (float) | Transfer progress percentage |
started_at | string | Transfer start time |
completed_at | string | Transfer completion time |
error | string | Error message if transfer failed |
curl -X GET "$PANEL_URL/api/admin/servers/$ID/transfer" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Transfer status retrieved successfully · 400 Bad request - Server is not being transferred · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 500 Internal server error - Failed to get transfer status
DELETE/api/admin/servers/{id}/transfer
Cancel server transfer Cancel an in-progress server transfer. This will revert the server to its original node and release any allocated resources on the destination node.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Server ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/servers/$ID/transfer" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:server:transfer:cancelled
Responses: 200 Transfer cancelled successfully · 400 Bad request - Server is not being transferred · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Server not found · 500 Internal server error - Failed to cancel transfer