View .md

FeatherWings API

All 98 FeatherWings HTTP endpoints, how the panel authenticates to them and how signed URLs and websocket tokens work, generated from the Wings router.

Last synced from FeatherWings dc70814 on .

On this page

FeatherWings listens on api.host:api.port (default 0.0.0.0:8080). This API is meant for the panel. Users and integrations should use the panel API, which checks permissions and then talks to Wings. A running node also serves this reference as Swagger UI at /api/docs (spec at /api/docs/openapi.json) while api.docs.enabled is true.

Authentication

TypeHow
Node tokenAuthorization: Bearer <token>, where <token> is the token value from config.yml, compared in constant time. Missing header: 401; wrong token: 403.
Signed URLShort-lived JWT in the token query string, issued by the panel for one download or upload.
Websocket JWTThe console socket at /api/servers/:server/ws takes a JWT the panel signs per user, carrying that user's server permissions.
Transfer JWTUsed node-to-node when a server is transferred: the receiving node expects Authorization: Bearer <jwt> with a transfer token issued by the panel.

In the other direction, Wings calls the panel with Authorization: Bearer <token_id>.<token>.

Endpoints

Backups

MethodPathAuthDescription
GET/api/servers/:server/backupNode tokenList server backups
server (path, string, required)
POST/api/servers/:server/backupNode tokenCreate server backup
server (path, string, required), payload (body, ServerBackupCreateRequest, required)
POST/api/servers/:server/backup/:backup/restoreNode tokenRestore server backup
server (path, string, required), backup (path, string, required), payload (body, ServerBackupRestoreRequest, required)
DELETE/api/servers/:server/backup/:backupNode tokenDelete server backup
server (path, string, required), backup (path, string, required)

Configuration

MethodPathAuthDescription
GET/api/configNode tokenGet raw configuration
Returns the complete wings configuration file as raw YAML with all comments preserved. Returns YAML format with proper Content-Type header.
PUT/api/configNode tokenReplace entire configuration
Replaces the entire wings configuration file with new YAML content. All comments and formatting are preserved. Optionally restarts wings after update.
request (body, router.ConfigPutRequest, required)
PATCH/api/config/patchNode tokenPatch configuration values
Updates specific configuration values using dot notation (e.g., "api.port", "system.root_directory"). Preserves comments and other values.
request (body, router.ConfigPatchRequest, required)
GET/api/config/schemaNode tokenGet configuration schema
Returns a schema describing all configurable fields in the wings configuration, useful for building GUIs.

Downloads

MethodPathAuthDescription
GET/download/backupSigned URLDownload server backup
token (query, string, required)
GET/download/fileSigned URLDownload server file
token (query, string, required)

Firewall

MethodPathAuthDescription
GET/api/servers/:server/firewallNode tokenList firewall rules for a server
server (path, string, required)
POST/api/servers/:server/firewallNode tokenCreate a firewall rule
server (path, string, required), rule (body, router.FirewallRuleRequest, required)
POST/api/servers/:server/firewall/syncNode tokenSync firewall rules to iptables
server (path, string, required)
GET/api/servers/:server/firewall/port/:portNode tokenList firewall rules for a server port
server (path, string, required), port (path, int, required)
GET/api/servers/:server/firewall/:ruleNode tokenGet a firewall rule
server (path, string, required), rule (path, int, required)
PUT/api/servers/:server/firewall/:ruleNode tokenUpdate a firewall rule
server (path, string, required), rule (path, int, required), rule (body, router.FirewallRuleRequest, required)
DELETE/api/servers/:server/firewall/:ruleNode tokenDelete a firewall rule
server (path, string, required), rule (path, int, required)

Modules

MethodPathAuthDescription
GET/api/modulesNode tokenList modules
GET/api/modules/:module/configNode tokenGet module configuration
module (path, string, required)
PUT/api/modules/:module/configNode tokenUpdate module configuration
module (path, string, required), config (body, router.ModuleConfigRequest, required)
POST/api/modules/:module/enableNode tokenEnable module
module (path, string, required)
POST/api/modules/:module/disableNode tokenDisable module
module (path, string, required)

Server Files

MethodPathAuthDescription
GET/api/servers/:server/files/contentsNode tokenRead file contents
server (path, string, required), file (query, string, required), download (query, bool)
GET/api/servers/:server/files/revisionsNode token
GET/api/servers/:server/files/revisions/:revisionNode token
GET/api/servers/:server/files/list-directoryNode tokenList directory contents
server (path, string, required), directory (query, string, required), directory_sizes (query, bool)
GET/api/servers/:server/files/archive/listNode tokenList directory inside an archive
server (path, string, required), directory (query, string), file (query, string, required), path (query, string)
POST/api/servers/:server/files/archive/extractNode tokenExtract selected paths from archive
server (path, string, required), payload (body, ServerArchiveExtractRequest, required)
PUT/api/servers/:server/files/renameNode tokenRename files
server (path, string, required), payload (body, ServerRenameRequest, required)
POST/api/servers/:server/files/copyNode tokenCopy file
server (path, string, required), payload (body, ServerCopyRequest, required)
POST/api/servers/:server/files/writeNode tokenWrite file contents
server (path, string, required), file (query, string, required), Content-Length (header, int, required)
POST/api/servers/:server/files/create-directoryNode tokenCreate directory
server (path, string, required), payload (body, ServerCreateDirectoryRequest, required)
POST/api/servers/:server/files/deleteNode tokenDelete files
server (path, string, required), payload (body, ServerDeleteRequest, required)
GET/api/servers/:server/files/trashNode token
POST/api/servers/:server/files/trash/restoreNode token
POST/api/servers/:server/files/trash/deleteNode token
DELETE/api/servers/:server/files/trashNode token
POST/api/servers/:server/files/compressNode tokenCompress files
server (path, string, required), payload (body, ServerArchiveRequest, required)
POST/api/servers/:server/files/decompressNode tokenDecompress archive
server (path, string, required), payload (body, ServerDecompressRequest, required)
DELETE/api/servers/:server/files/operations/:operationNode tokenCancel file operation
server (path, string, required), operation (path, string, required)
POST/api/servers/:server/files/chmodNode tokenChange file permissions
server (path, string, required), payload (body, ServerChmodRequest, required)
GET/api/servers/:server/files/pullNode tokenList remote downloads
server (path, string, required)
POST/api/servers/:server/files/pullNode tokenPull remote file
server (path, string, required), payload (body, ServerPullRemoteRequest, required)
DELETE/api/servers/:server/files/pull/:downloadNode tokenCancel remote download
server (path, string, required), download (path, string, required)
GET/api/servers/:server/files/shareNode tokenList file share jobs
server (path, string, required)
POST/api/servers/:server/files/shareNode tokenShare server file via temp uploads
server (path, string, required), payload (body, ServerShareFileRequest, required)
DELETE/api/servers/:server/files/share/:shareNode tokenCancel file share job
server (path, string, required), share (path, string, required)

Server Proxy

MethodPathAuthDescription
POST/api/servers/:server/proxy/createNode tokenCreate server proxy
server (path, string, required), payload (body, object, required)
POST/api/servers/:server/proxy/deleteNode tokenDelete server proxy
server (path, string, required), payload (body, object, required)

Servers

MethodPathAuthDescription
GET/api/servers/:server/wsWebsocket JWTConnect to server websocket
server (path, string, required), token (query, string, required)
GET/api/serversNode tokenList servers
POST/api/serversNode tokenCreate server
server (body, installer.ServerDetails, required)
GET/api/servers/:serverNode tokenGet server
server (path, string, required)
DELETE/api/servers/:serverNode tokenDelete server
server (path, string, required)
GET/api/servers/:server/logsNode tokenTail server logs
server (path, string, required), size (query, int)
GET/api/servers/:server/install-logsNode tokenRetrieve server install logs
server (path, string, required)
POST/api/servers/:server/powerNode tokenExecute server power action
server (path, string, required), payload (body, router.ServerPowerRequest, required)
POST/api/servers/:server/commandsNode tokenSend console commands
server (path, string, required), payload (body, router.ServerCommandsRequest, required)
POST/api/servers/:server/completionNode tokenConsole Tab completion
server (path, string, required), payload (body, completion.Request, required)
POST/api/servers/:server/execNode tokenExecute shell command in container
Runs a one-shot /bin/sh -c command inside the running server container and returns stdout/stderr/exit code.
server (path, string, required), payload (body, router.ServerExecRequest, required)
POST/api/servers/:server/installNode tokenTrigger server install
server (path, string, required)
POST/api/servers/:server/reinstallNode tokenReinstall server
server (path, string, required)
POST/api/servers/:server/syncNode tokenSync server state
server (path, string, required)
POST/api/servers/:server/reconcileNode tokenForce runtime reconcile
server (path, string, required)
POST/api/servers/:server/ws/denyNode tokenInvalidate websocket tokens
server (path, string, required), payload (body, router.ServerDenyTokenRequest, required)
GET/api/servers/:server/fastdlNode tokenGet server FastDL configuration
server (path, string, required)
PUT/api/servers/:server/fastdlNode tokenUpdate server FastDL configuration
server (path, string, required), config (body, FastDLConfigResponse, required)
POST/api/servers/:server/fastdl/enableNode tokenEnable FastDL for server
server (path, string, required), config (body, FastDLConfigResponse)
POST/api/servers/:server/fastdl/disableNode tokenDisable FastDL for server
server (path, string, required)
POST/api/servers/:server/importNode tokenImport server files
server (path, string, required), payload (body, object, required)
DELETE/api/servers/:server/deleteAllBackupsNode tokenDelete all server backups
server (path, string, required)

System

MethodPathAuthDescription
POST/api/updateNode tokenUpdate runtime configuration
config (body, config.Configuration, required)
GET/api/systemNode tokenGet system information
Returns hardware and software information about the node. Provide `v=2` to receive the full payload used by the panel.
v (query, string)
GET/api/system/backupsNode tokenGet backup destinations
Returns the default backup adapter and PBS configuration status for this Wings node.
POST/api/system/node-backupNode tokenCreate node backup
payload (body, nodeBackupCreateRequest, required)
GET/api/system/node-backupsNode tokenList node backups
GET/api/system/node-backups/:backupNode tokenGet node backup
backup (path, string, required)
GET/api/system/node-backups/:backup/downloadNode tokenDownload node backup
backup (path, string, required)
DELETE/api/system/node-backups/:backupNode tokenDelete node backup
backup (path, string, required)
POST/api/system/node-backup/restoreNode tokenRestore node backup
payload (body, nodeBackupRestoreRequest, required)
POST/api/system/self-updateNode tokenTrigger self-update
Triggers a Wings self-update either from GitHub or a direct URL. Requires system.updates.allow_api to be enabled.
request (body, router.SelfUpdateRequest, required)
GET/api/diagnosticsNode tokenGenerate diagnostics bundle
Returns plain-text diagnostics output by default. Use include_endpoints to append HTTP endpoint metadata and include_logs to attach recent logs. Provide format=url to upload the report and receive a shortened URL instead of the raw content.
include_endpoints (query, bool), include_logs (query, bool), log_lines (query, int), format (query, string), upload_api_url (query, string)
GET/api/system/docker/diskNode tokenGet Docker disk usage
DELETE/api/system/docker/image/pruneNode tokenPrune Docker images
GET/api/system/ipsNode tokenList system IP addresses
GET/api/system/utilizationNode tokenGet system utilization
POST/api/system/terminal/execNode tokenExecute host command
Runs a command on the host operating system using the configured shell and returns stdout/stderr.
request (body, hostCommandRequest, required)
POST/api/deauthorize-userNode token
GET/api/docs/openapi.jsonNone
Only when api.docs.enabled is true.
GET/api/docsNone
Only when api.docs.enabled is true.
GET/api/docs/uiNone
Only when api.docs.enabled is true.
GET/api/docs/ui/*anyNone
Only when api.docs.enabled is true.

Transfers

MethodPathAuthDescription
POST/api/transfersTransfer JWTReceive server transfer
Authorization (header, string, required), archive (formData, file, required), checksum (formData, string, required)
DELETE/api/transfers/:serverNode tokenCancel incoming transfer
server (path, string, required)
POST/api/servers/:server/transferNode tokenInitiate server transfer
server (path, string, required), payload (body, ServerTransferRequest, required)
DELETE/api/servers/:server/transferNode tokenCancel server transfer
server (path, string, required)

Uploads

MethodPathAuthDescription
POST/upload/fileSigned URLUpload files
token (query, string, required), directory (query, string), files (formData, file, required)