View .md

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

Auth: AdminPermission: admin.servers.viewRoute name: admin-serversController: ServersController::indexroute source

Get all servers Retrieve a paginated list of all servers with optional filtering by owner, node, realm, spell, and search functionality.

ParameterInTypeRequiredDescription
pagequeryintegernoPage number for pagination
limitqueryintegernoNumber of records per page
searchquerystringnoSearch term to filter servers by name or description
owner_idqueryintegernoFilter servers by owner ID
node_idqueryintegernoFilter servers by node ID
realm_idqueryintegernoFilter servers by realm ID
spell_idqueryintegernoFilter servers by spell ID
location_idqueryintegernoFilter servers by location ID (through their node)
server_idqueryintegernoFilter servers by server ID
uuidquerystring (uuid)noFilter servers by UUID
uuid_shortquerystringnoFilter servers by short UUID
external_idquerystringnoFilter servers by external ID
sort_byquerystringnoField to sort servers by (id, name, created_at, updated_at)
sort_orderquerystringnoSort order (ASC or DESC)
Response data fieldTypeDescription
serversServer[]
paginationServerPagination
searchobject
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-mounts-assignableController: MountsController::assignableForServerroute source

Mounts that can be toggled for this server

ParameterInTypeRequiredDescription
idpath-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}

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-showController: ServersController::showroute source

Get server by ID Retrieve a specific server by its ID with complete details including related data, variables, SFTP information, and recent activity.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
idintegerServer ID
uuidstringServer UUID
uuidShortstringShort server UUID
namestringServer name
descriptionstringServer description
startupstringServer startup command
imagestringServer Docker image
statusstringServer status
ownerobjectServer owner information
nodeobjectNode information
realmobjectRealm information
spellobjectSpell information
allocationobjectAllocation information
variablesServerVariable[]Server variables
mountsobject[]Full mount rows attached to this server
mount_idsinteger[]IDs of mounts attached to this server
sftpServerSFTP
activityobject[]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}

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-show-by-external-idController: ServersController::showByExternalIdroute source

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.

ParameterInTypeRequiredDescription
externalIdpathstringyesServer external ID
Response data fieldTypeDescription
idintegerServer ID
uuidstringServer UUID
uuidShortstringShort server UUID
namestringServer name
descriptionstringServer description
startupstringServer startup command
imagestringServer Docker image
statusstringServer status
ownerobjectServer owner information
nodeobjectNode information
realmobjectRealm information
spellobjectSpell information
allocationobjectAllocation information
variablesServerVariable[]Server variables
mountsobject[]Full mount rows attached to this server
mount_idsinteger[]IDs of mounts attached to this server
sftpServerSFTP
activityobject[]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}

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-updateController: ServersController::updateroute source

Update server Update an existing server with comprehensive validation, Wings synchronization, variable handling, and allocation management.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID

Request body: ServerUpdate (application/json)

Body fieldTypeRequiredDescription
node_idintegernoNode ID
namestringnoServer name
descriptionstringnoServer description
owner_idintegernoOwner user ID
memoryintegernoMemory limit in MB
swapintegernoSwap limit in MB (-1 = unlimited, 0 = disabled)
diskintegernoDisk limit in MB
iointegernoIO limit
cpuintegernoCPU limit percentage
allocation_idintegernoAllocation ID
realms_idintegernoRealm ID
spell_idintegernoSpell ID
startupstringnoServer startup command
imagestringnoServer Docker image
statusstringnoServer status
allocation_limitintegernoAllocation limit
database_limitintegernoDatabase limit
backup_limitintegernoBackup limit
external_idstringnoExternal ID
threadsstringnoSpecific CPU threads this process can run on. Single number, comma list, or ranges like 0,1,3 or 0-1,3
skip_scriptsbooleannoSkip scripts flag
show_on_statusbooleannoWhether this server appears on the public status page
auto_startbooleannoAutomatically start this server after the node reconnects (default off)
auto_start_delayintegernoExtra seconds to wait before auto-starting this server after reconnect
oom_disabledbooleannoOOM disabled flag
variablesobjectnoServer variables as key-value pairs
mount_idsinteger[]noOptional: replace Wings bind mounts for this server
Response data fieldTypeDescription
serverobject
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}

Auth: AdminPermission: admin.servers.deleteRoute name: admin-servers-deleteController: ServersController::deleteroute source

Delete server Permanently delete a server from the database and Wings daemon. Unclaims allocation and sends notification email to the server owner.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
messagestringSuccess 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

Auth: AdminPermission: admin.servers.deleteRoute name: admin-servers-hard-deleteController: ServersController::hardDeleteroute source

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.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
messagestringSuccess 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

Auth: AdminPermission: admin.servers.createRoute name: admin-servers-createController: ServersController::createroute source

Create new server Create a new server with comprehensive validation, Wings integration, variable handling, and email notifications.

Request body: ServerCreate (application/json)

Body fieldTypeRequiredDescription
node_idintegeryesNode ID
namestringyesServer name
descriptionstringnoServer description (optional)
owner_idintegeryesOwner user ID
memoryintegeryesMemory limit in MB
swapintegeryesSwap limit in MB (-1 = unlimited, 0 = disabled)
diskintegeryesDisk limit in MB
iointegeryesIO limit
cpuintegeryesCPU limit percentage
allocation_idintegeryesAllocation ID
realms_idintegeryesRealm ID
spell_idintegeryesSpell ID
startupstringyesServer startup command
imagestringyesServer Docker image
statusstringnoServer status
allocation_limitintegernoAllocation limit
database_limitintegernoDatabase limit
backup_limitintegernoBackup limit
external_idstringnoExternal ID
threadsstringnoSpecific CPU threads this process can run on. Single number, comma list, or ranges like 0,1,3 or 0-1,3
skip_scriptsbooleannoSkip scripts flag
show_on_statusbooleannoWhether this server appears on the public status page
auto_startbooleannoAutomatically start this server after the node reconnects (default off)
auto_start_delayintegernoExtra seconds to wait before auto-starting this server after reconnect
oom_disabledbooleannoOOM disabled flag
variablesobjectnoServer variables as key-value pairs
mount_idsinteger[]noOptional: Wings bind mounts to attach (validated against node/spell rules)
Response data fieldTypeDescription
server_idintegerID 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}

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-by-ownerController: ServersController::getByOwnerroute source

Get servers by owner Retrieve all servers owned by a specific user.

ParameterInTypeRequiredDescription
ownerIdpathintegeryesOwner user ID
Response data fieldTypeDescription
serversServer[]
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}

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-by-nodeController: ServersController::getByNoderoute source

Get servers by node Retrieve all servers running on a specific node.

ParameterInTypeRequiredDescription
nodeIdpathintegeryesNode ID
Response data fieldTypeDescription
serversServer[]
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}

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-by-realmController: ServersController::getByRealmroute source

Get servers by realm Retrieve all servers belonging to a specific realm.

ParameterInTypeRequiredDescription
realmIdpathintegeryesRealm ID
Response data fieldTypeDescription
serversServer[]
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}

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-by-spellController: ServersController::getBySpellroute source

Get servers by spell Retrieve all servers using a specific spell.

ParameterInTypeRequiredDescription
spellIdpathintegeryesSpell ID
Response data fieldTypeDescription
serversServer[]
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-with-relationsController: ServersController::getWithRelationsroute source

Get server with relations Retrieve a specific server with all its related data including owner, node, realm, spell, and allocation information.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
serverServer
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-all-with-relationsController: ServersController::getAllWithRelationsroute source

Get all servers with relations Retrieve all servers with their related data including owner, node, realm, spell, and allocation information.

Response data fieldTypeDescription
serversServer[]
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-variablesController: ServersController::getServerVariablesroute source

Get server variables Retrieve all variables for a specific server with their spell variable definitions and metadata.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
variablesServerVariable[]
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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-custom-variable-createController: ServersController::createCustomVariableroute source
ParameterInTypeRequiredDescription
idpath-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}

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-custom-variable-deleteController: ServersController::deleteCustomVariableroute source
ParameterInTypeRequiredDescription
idpath-yes
variableIdpath-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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-suspendController: ServersController::suspendroute source

Suspend server Suspend a server by killing it in Wings and updating the suspended status. Sends notification email to the server owner.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
messagestringSuccess 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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-warnController: ServersController::warnroute source

Send warning to server owner Create an in-panel warning for the server owner (optionally emailed), e.g. high CPU stop notices.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Body fieldTypeRequiredDescription
titlestringyesWarning title
messagestringyesWarning message (markdown supported)
typestringnoNotification type (default: warning)
send_emailbooleannoAlso email the server owner (default: true)
is_dismissiblebooleannoWhether the warning can be dismissed (default: true)
is_stickybooleannoWhether the warning stays until closed (default: false)
Response data fieldTypeDescription
notification_idinteger
emailedboolean
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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-unsuspendController: ServersController::unsuspendroute source

Unsuspend server Unsuspend a server by updating the suspended status. Sends notification email to the server owner.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
messagestringSuccess 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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-reconcileController: ServersController::reconcileroute source

Force runtime reconcile Asks Wings to recover a server stuck in starting/stopping or desynchronized from Docker/containerd.

ParameterInTypeRequiredDescription
idpathintegeryes
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-runtimeController: ServersController::runtimeroute source

Get Wings runtime health Returns the live Wings process state and runtime health (Docker desync detection).

ParameterInTypeRequiredDescription
idpathintegeryes
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-server-activitiesController: ServerActivitiesController::indexroute source

Get all server activities Retrieve a paginated list of all server activities with optional filtering by server, node, user, and search functionality.

ParameterInTypeRequiredDescription
pagequeryintegernoPage number for pagination
limitqueryintegernoNumber of records per page
searchquerystringnoSearch term to filter activities by description or type
server_idqueryintegernoFilter activities by server ID
node_idqueryintegernoFilter activities by node ID
user_idqueryintegernoFilter activities by user ID
Response data fieldTypeDescription
activitiesServerActivity[]
paginationServerActivityPagination
searchobject
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-server-activities-by-serverController: ServerActivitiesController::byServerroute source

Get server activities by server ID Retrieve a paginated list of activities for a specific server with optional search functionality.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
pagequeryintegernoPage number for pagination
limitqueryintegernoNumber of records per page
searchquerystringnoSearch term to filter activities by description or type
Response data fieldTypeDescription
activitiesServerActivity[]
paginationServerActivityPagination
searchobject
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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-allocationsController: ServerAllocationsController::getServerAllocationsroute source

Get server allocations (Admin) Retrieve all allocations assigned to a specific server.

ParameterInTypeRequiredDescription
idpath-yes
serverIdpathintegeryesServer ID
Response data fieldTypeDescription
successboolean
dataobject
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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-allocations-assignController: ServerAllocationsController::assignAllocationroute source

Assign allocation to server (Admin) Assign a specific allocation to a server.

ParameterInTypeRequiredDescription
idpath-yes
serverIdpathintegeryesServer ID
Body fieldTypeRequiredDescription
allocation_idintegernoAllocation ID to assign
Response data fieldTypeDescription
successboolean
messagestring
dataobject
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}

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-allocations-deleteController: ServerAllocationsController::deleteAllocationroute source

Delete server allocation (Admin) Remove an allocation from a server. Cannot delete the primary allocation.

ParameterInTypeRequiredDescription
serverIdpathintegeryesServer ID
allocationIdpathintegeryesAllocation ID to delete
Response data fieldTypeDescription
successboolean
messagestring
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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-allocations-set-primaryController: ServerAllocationsController::setPrimaryAllocationroute source

Set primary allocation (Admin) Set a specific allocation as the primary allocation for the server.

ParameterInTypeRequiredDescription
serverIdpathintegeryesServer ID
allocationIdpathintegeryesAllocation ID to set as primary
Response data fieldTypeDescription
successboolean
messagestring
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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-transfer-initiateController: ServersController::initiateTransferroute source

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.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Body fieldTypeRequiredDescription
destination_node_idintegeryesDestination node ID
destination_allocation_idintegernoDestination allocation ID (optional)
backupsstring (uuid)[]noOptional backup UUIDs to transfer (Calagopus)
include_all_backupsbooleannoInclude all successful server backups when no explicit backups are supplied
delete_backupsbooleannoDelete transferred backups on the source node (Calagopus)
Response data fieldTypeDescription
messagestringSuccess message
transfer_tokenstringTransfer 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

Auth: AdminPermission: admin.servers.viewRoute name: admin-servers-transfer-statusController: ServersController::getTransferStatusroute source

Get server transfer status Retrieve the current status of a server transfer including progress, start time, and any error messages.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
statusstringTransfer status
progressnumber (float)Transfer progress percentage
started_atstringTransfer start time
completed_atstringTransfer completion time
errorstringError 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

Auth: AdminPermission: admin.servers.editRoute name: admin-servers-transfer-cancelController: ServersController::cancelTransferroute source

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.

ParameterInTypeRequiredDescription
idpathintegeryesServer ID
Response data fieldTypeDescription
messagestringSuccess 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