View .md

Files endpoints (Client API: game servers)

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

Last synced from FeatherPanel 15b94e9 on .

On this page

Defined in backend/app/routes/user/server/files.php. Authentication used here: Server access. 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/user/servers/{uuidShort}/files

Auth: Server accessDefault rate limit: 60 / minute (user-server-files)Route name: session-server-filesController: ServerFilesController::getFilesroute source

Get server files Retrieve directory contents for a specific server path. Lists files and directories with their properties.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringnoDirectory path to list
searchquerystringnoCase-insensitive filename substring filter applied before the list item limit
Response data fieldTypeDescription
contentsServerFileItem[]
limitedbooleanTrue when more matching items exist beyond the returned limit
limitintegerMaximum number of items returned
totalintegerNumber of matching items before applying the limit
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/files" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Files 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 or node not found · 500 Internal server error - Failed to fetch files

GET/api/user/servers/{uuidShort}/archive-list

Auth: Server accessDefault rate limit: 60 / minute (user-server-files)Route name: session-server-archive-listController: ServerFilesController::listArchiveDirectoryroute source

List directory inside an archive Browse supported archives (zip, tar, …) on the server without extracting them.

ParameterInTypeRequiredDescription
uuidShortpathstringyes
pathquerystringno
filequerystringyes
archive_pathquerystringno
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/archive-list?file=$FILE" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Archive listing retrieved · 400 Bad request · 403 Forbidden · 500 Internal server error

GET/api/user/servers/{uuidShort}/search-files

Auth: Server accessDefault rate limit: 30 / minute (user-server-files)Route name: session-server-search-filesController: ServerFilesController::searchFilesroute source

Search files with advanced filters Search server files by path patterns, content text and size constraints.

ParameterInTypeRequiredDescription
uuidShortpathstringyes
directoryquerystringno
patternquerystringno
includequerystringno
excludequerystringno
case_insensitivequerybooleanno
contentquerystringno
content_case_insensitivequerybooleanno
min_sizequeryintegerno
max_sizequeryintegerno
max_content_sizequeryintegerno
include_oversizedquerybooleanno
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/search-files" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Search completed successfully · 400 Bad request · 401 Unauthorized · 403 Forbidden · 500 Internal server error

GET/api/user/servers/{uuidShort}/file

Auth: Server accessDefault rate limit: 60 / minute (user-server-files)Route name: session-server-fileController: ServerFilesController::getFileroute source

Get file content Retrieve the raw content of a specific file with appropriate MIME type headers.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringyesFile path to read
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/file?path=$PATH" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 File content 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, node, or file not found · 500 Internal server error - Failed to fetch file

GET/api/user/servers/{uuidShort}/file-hash

Auth: Server accessDefault rate limit: 30 / minute (user-server-files)Route name: session-server-file-hashController: ServerFilesController::getFileHashesroute source

Get file hashes Calculate and return hashes for a file on the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringyesFile path to hash
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/file-hash?path=$PATH" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 File hashes calculated successfully · 400 Bad request - Missing file path · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server, node, or file not found · 500 Internal server error - Failed to hash file

POST/api/user/servers/{uuidShort}/write-file

Auth: Server accessRoute name: session-server-write-fileController: ServerFilesController::writeFileroute source

Write file content Write raw content to a file on the server. Content-Type must not be application/json. Send empty body to clear file contents.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringyesFile path to write to
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/write-file?path=$PATH" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:user:server:file:saved

Responses: 200 File written successfully · 400 Bad request - Missing UUID or invalid content type · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or node not found · 415 Unsupported media type - JSON content type not allowed · 500 Internal server error - Failed to write file

PUT/api/user/servers/{uuidShort}/rename

Auth: Server accessRoute name: session-server-renameController: ServerFilesController::renameFileOrFolderroute source

Rename files or folders Rename multiple files or folders on the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: RenameRequest (application/json)

Body fieldTypeRequiredDescription
filesobject[]yesArray of rename operations
rootstringyesRoot directory path
Response data fieldTypeDescription
messagestringSuccess message
curl -X PUT "$PANEL_URL/api/user/servers/$UUID_SHORT/rename" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"files":[],"root":""}'

Plugin events: featherpanel:user:server:file:renamed

Responses: 200 Files renamed successfully · 400 Bad request - Missing UUID or invalid request body · 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 rename files

DELETE/api/user/servers/{uuidShort}/delete-files

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-delete-filesController: ServerFilesController::deleteFilesroute source

Delete files Delete multiple files or folders from the server. This action cannot be undone.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: FileOperationRequest (application/json)

Body fieldTypeRequiredDescription
filesstring[]yesArray of file paths
rootstringyesRoot directory path
Response data fieldTypeDescription
messagestringSuccess message
curl -X DELETE "$PANEL_URL/api/user/servers/$UUID_SHORT/delete-files" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"files":[],"root":""}'

Plugin events: featherpanel:user:server:files:deleted

Responses: 200 Files deleted successfully · 400 Bad request - Missing UUID or invalid request body · 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 delete files

GET/api/user/servers/{uuidShort}/trash

Auth: Server accessDefault rate limit: 60 / minute (user-server-files)Route name: session-server-trash-listController: ServerFilesController::listTrashroute source
ParameterInTypeRequiredDescription
uuidShortpath-yes
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/trash" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

POST/api/user/servers/{uuidShort}/trash/restore

Auth: Server accessDefault rate limit: 20 / minute (user-server-files)Route name: session-server-trash-restoreController: ServerFilesController::restoreTrashroute source
ParameterInTypeRequiredDescription
uuidShortpath-yes
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/trash/restore" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

POST/api/user/servers/{uuidShort}/trash/delete

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-trash-deleteController: ServerFilesController::deleteTrashEntriesroute source
ParameterInTypeRequiredDescription
uuidShortpath-yes
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/trash/delete" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

POST/api/user/servers/{uuidShort}/trash/empty

Auth: Server accessDefault rate limit: 5 / minute (user-server-files)Route name: session-server-trash-emptyController: ServerFilesController::emptyTrashroute source
ParameterInTypeRequiredDescription
uuidShortpath-yes
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/trash/empty" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

POST/api/user/servers/{uuidShort}/wipe-all-files

Auth: Server accessDefault rate limit: 2 / minute (user-server-files)Route name: session-server-wipe-all-filesController: ServerFilesController::wipeAllFilesroute source

Wipe all server files Delete all files and folders in the server root directory. This action cannot be undone.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Response data fieldTypeDescription
messagestringSuccess message
deleted_countintegerNumber of files/folders deleted
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/wipe-all-files" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:user:server:files:deleted

Responses: 200 All files wiped successfully · 400 Bad request - Missing UUID · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server or missing file.delete permission · 404 Not found - Server or node not found · 500 Internal server error - Failed to wipe files

POST/api/user/servers/{uuidShort}/copy-files

Auth: Server accessRoute name: session-server-copy-filesController: ServerFilesController::copyFilesroute source

Copy files Copy multiple files or folders to a new location on the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: CopyRequest (application/json)

Body fieldTypeRequiredDescription
filesstring[]yesArray of file paths to copy
locationstringyesDestination location
namestringnoOptional destination name (Calagopus)
overwritebooleannoOverwrite existing destination (Calagopus)
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/copy-files" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"files":[],"location":"","name":"","overwrite":false}'

Plugin events: featherpanel:server:files:copy

Responses: 200 Files copied successfully · 400 Bad request - Missing UUID or invalid request body · 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 copy files

POST/api/user/servers/{uuidShort}/create-directory

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-create-directoryController: ServerFilesController::createDirectoryroute source

Create directory Create a new directory on the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: CreateDirectoryRequest (application/json)

Body fieldTypeRequiredDescription
namestringyesDirectory name
pathstringyesParent directory path
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/create-directory" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"","path":""}'

Plugin events: featherpanel:user:server:directory:created

Responses: 200 Directory created successfully · 400 Bad request - Missing UUID or invalid request body · 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 create directory

POST/api/user/servers/{uuidShort}/compress-files

Auth: Server accessDefault rate limit: 5 / minute (user-server-files)Route name: session-server-compress-filesController: ServerFilesController::compressFilesroute source

Compress files Compress multiple files or folders into an archive.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: CompressRequest (application/json)

Body fieldTypeRequiredDescription
filesstring[]yesArray of file paths
rootstringyesRoot directory path
namestringnoArchive name (optional, auto-generated if not provided)
extensionstringnoArchive type: zip, tar.gz, tgz, tar.bz2, tbz2, tar.xz, txz
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/compress-files" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"files":[],"root":"","name":"","extension":""}'

Plugin events: featherpanel:server:file:compress

Responses: 200 Files compressed successfully · 400 Bad request - Missing UUID or invalid request body · 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 compress files

POST/api/user/servers/{uuidShort}/decompress-archive

Auth: Server accessDefault rate limit: 20 / minute (user-server-files)Route name: session-server-decompress-archiveController: ServerFilesController::decompressArchiveroute source

Decompress archive Decompress an archive file on the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: DecompressRequest (application/json)

Body fieldTypeRequiredDescription
filestringyesArchive file path
rootstringyesRoot directory path
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/decompress-archive" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"file":"","root":""}'

Plugin events: featherpanel:server:file:decompress

Responses: 200 Archive decompressed successfully · 400 Bad request - Missing UUID or invalid request body · 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 decompress archive

POST/api/user/servers/{uuidShort}/extract-archive-selection

Auth: Server accessDefault rate limit: 20 / minute (user-server-files)Route name: session-server-extract-archive-selectionController: ServerFilesController::extractArchiveSelectionroute source

Extract selected paths from an archive Extract specific files or directories from an on-disk archive into a destination folder without unpacking the whole archive.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Body fieldTypeRequiredDescription
rootstringyesDirectory on the server that contains the archive
filestringyesArchive file name relative to root
destinationstringyesDestination directory relative to server root (use empty string for /)
entriesstring[]yesPaths inside the archive to extract
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/extract-archive-selection" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"root":"","file":"","destination":"","entries":[]}'

Responses: 200 Extraction started or completed successfully · 400 Bad request · 403 Forbidden · 500 Internal server error

POST/api/user/servers/{uuidShort}/change-permissions

Auth: Server accessDefault rate limit: 5 / minute (user-server-files)Route name: session-server-change-permissionsController: ServerFilesController::changeFilePermissionsroute source

Change file permissions Change permissions for multiple files or folders on the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: FileOperationRequest (application/json)

Body fieldTypeRequiredDescription
filesstring[]yesArray of file paths
rootstringyesRoot directory path
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/change-permissions" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"files":[],"root":""}'

Plugin events: featherpanel:server:file:permissions

Responses: 200 File permissions changed successfully · 400 Bad request - Missing UUID or invalid request body · 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 change permissions

POST/api/user/servers/{uuidShort}/pull-file

Auth: Server accessRoute name: session-server-pull-fileController: ServerFilesController::pullFileroute source

Pull file from URL Download a file from a URL to the server. Can run in foreground or background.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID

Request body: PullFileRequest (application/json)

Body fieldTypeRequiredDescription
urlstring (uri)yesURL to download from
rootstringyesDestination directory path
fileNamestringnoCustom filename
foregroundbooleannoRun in foreground
useHeaderbooleannoUse headers
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/pull-file" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"url":"","root":"","fileName":"","foreground":false,"useHeader":false}'

Responses: 200 File pull initiated successfully · 400 Bad request - Missing UUID or invalid request body · 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 pull file

GET/api/user/servers/{uuidShort}/downloads-list

Auth: Server accessDefault rate limit: 30 / minute (user-server-files)Route name: session-server-downloads-listController: ServerFilesController::getDownloadsListroute source

Get downloads list Retrieve the list of active download processes for the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/downloads-list" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Downloads list 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 or node not found · 500 Internal server error - Failed to get downloads list

DELETE/api/user/servers/{uuidShort}/delete-pull-process/{pullId}

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-delete-pull-processController: ServerFilesController::deletePullProcessroute source

Delete pull process Cancel and delete an active download process.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pullIdpathstringyesPull process ID
Response data fieldTypeDescription
messagestringSuccess message
curl -X DELETE "$PANEL_URL/api/user/servers/$UUID_SHORT/delete-pull-process/$PULL_ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:user:server:pull:deleted

Responses: 200 Pull process deleted successfully · 400 Bad request - Missing parameters · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server, node, or pull process not found · 500 Internal server error - Failed to delete pull process

POST/api/user/servers/{uuidShort}/share-file

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-share-fileController: ServerFilesController::shareFileroute source

Share a server file via temp uploads Uploads a server file from Wings as a temp upload (multipart) and returns a public share URL and delete key. Large files may return a background job identifier; poll share-jobs until complete.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Body fieldTypeRequiredDescription
filestringyesPath to the file on the server
ttl_daysintegeryesHow long the share remains available
passwordstringnoOptional download password (min 4 chars)
delete_keystringnoOptional custom delete key (min 8 chars)
backgroundbooleannoForce background upload even for small files
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/share-file" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"file":"","ttl_days":0,"password":"","delete_key":"","background":false}'

Responses: 200 File shared successfully · 202 Background share started · 400 Bad request · 401 Unauthorized · 403 Forbidden · 404 Not found · 500 Internal server error

GET/api/user/servers/{uuidShort}/share-jobs

Auth: Server accessDefault rate limit: 30 / minute (user-server-files)Route name: session-server-share-jobsController: ServerFilesController::getShareJobsroute source

List temp upload share jobs Retrieve active temp upload share jobs for the server.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/share-jobs" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Share jobs retrieved successfully · 401 Unauthorized · 403 Forbidden · 500 Internal server error

DELETE/api/user/servers/{uuidShort}/share-jobs/{shareId}

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-delete-share-jobController: ServerFilesController::deleteShareJobroute source

Cancel a temp upload share job Cancels an in-progress temp upload share job.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
shareIdpathstringyesShare job identifier
curl -X DELETE "$PANEL_URL/api/user/servers/$UUID_SHORT/share-jobs/$SHARE_ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Share job cancelled · 401 Unauthorized · 403 Forbidden · 500 Internal server error

GET/api/user/servers/{uuidShort}/upload-file

Auth: Server accessDefault rate limit: 300 / minute (user-server-files)Route name: session-server-upload-file-urlController: ServerFilesController::getUploadUrlroute source

Get file upload URL Generate a secure one-time Wings upload URL with JWT token authentication. The browser uploads directly to Wings (multipart), avoiding PHP body/memory limits and panel proxy timeouts.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
Response data fieldTypeDescription
upload_urlstringSigned Wings file upload URL
expires_inintegerToken lifetime in seconds
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/upload-file" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Upload URL generated successfully · 400 Bad request - Missing UUID · 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 upload URL

POST/api/user/servers/{uuidShort}/upload-file

Auth: Server accessDefault rate limit: 30 / minute (user-server-files)Route name: session-server-upload-fileController: ServerFilesController::uploadFileroute source

Upload file Upload a file to the server. Content-Type must not be application/json.

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringyesDestination directory path
filenamequerystringnoFilename for the uploaded file
Response data fieldTypeDescription
messagestringSuccess message
curl -X POST "$PANEL_URL/api/user/servers/$UUID_SHORT/upload-file?path=$PATH" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Plugin events: featherpanel:user:server:file:uploaded

Responses: 200 File uploaded successfully · 400 Bad request - Missing UUID, empty content, or invalid content type · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server or node not found · 415 Unsupported media type - JSON content type not allowed · 500 Internal server error - Failed to upload file

GET/api/user/servers/{uuidShort}/download-file

Auth: Server accessDefault rate limit: 20 / minute (user-server-files)Route name: session-server-download-fileController: ServerFilesController::downloadFileroute source

Get file download URL Generate a secure one-time Wings download URL for a server file with JWT token authentication (same pattern as backup downloads).

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringyesFile path to download
Response data fieldTypeDescription
download_urlstringSigned Wings file download URL
expires_inintegerToken lifetime in seconds
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/download-file?path=$PATH" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Download URL generated successfully · 400 Bad request - Missing UUID or file path · 401 Unauthorized - User not authenticated · 403 Forbidden - Access denied to server · 404 Not found - Server, node, or file not found · 500 Internal server error - Failed to generate download URL

GET/api/user/servers/{uuidShort}/download-directory

Auth: Server accessDefault rate limit: 10 / minute (user-server-files)Route name: session-server-download-directoryController: ServerFilesController::downloadDirectoryroute source

Get directory download URL Generate a secure Wings download URL that archives and streams a directory (Calagopus).

ParameterInTypeRequiredDescription
uuidShortpathstringyesServer short UUID
pathquerystringyesDirectory path to download
Response data fieldTypeDescription
download_urlstringSigned Wings directory download URL
expires_inintegerToken lifetime in seconds
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/download-directory?path=$PATH" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"

Responses: 200 Download URL generated successfully · 400 Bad request - Missing UUID or directory path · 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 download URL · 501 Daemon feature unsupported

GET/api/user/servers/{uuidShort}/file-fingerprints

Auth: Server accessDefault rate limit: 20 / minute (user-server-files)Route name: session-server-file-fingerprintsController: ServerFilesController::getFileFingerprintsroute source
ParameterInTypeRequiredDescription
uuidShortpath-yes
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/file-fingerprints" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"