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
Get server files Retrieve directory contents for a specific server path. Lists files and directories with their properties.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | no | Directory path to list |
search | query | string | no | Case-insensitive filename substring filter applied before the list item limit |
Response data field | Type | Description |
|---|---|---|
contents | ServerFileItem[] | |
limited | boolean | True when more matching items exist beyond the returned limit |
limit | integer | Maximum number of items returned |
total | integer | Number 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
List directory inside an archive Browse supported archives (zip, tar, …) on the server without extracting them.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | |
path | query | string | no | |
file | query | string | yes | |
archive_path | query | string | no |
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
Search files with advanced filters Search server files by path patterns, content text and size constraints.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | |
directory | query | string | no | |
pattern | query | string | no | |
include | query | string | no | |
exclude | query | string | no | |
case_insensitive | query | boolean | no | |
content | query | string | no | |
content_case_insensitive | query | boolean | no | |
min_size | query | integer | no | |
max_size | query | integer | no | |
max_content_size | query | integer | no | |
include_oversized | query | boolean | no |
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
Get file content Retrieve the raw content of a specific file with appropriate MIME type headers.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | yes | File 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
Get file hashes Calculate and return hashes for a file on the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | yes | File 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
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.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | yes | File path to write to |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Rename files or folders Rename multiple files or folders on the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: RenameRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
files | object[] | yes | Array of rename operations |
root | string | yes | Root directory path |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Delete files Delete multiple files or folders from the server. This action cannot be undone.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: FileOperationRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
files | string[] | yes | Array of file paths |
root | string | yes | Root directory path |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | - | 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
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | - | 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
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | - | 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
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | - | 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
Wipe all server files Delete all files and folders in the server root directory. This action cannot be undone.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
deleted_count | integer | Number 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
Copy files Copy multiple files or folders to a new location on the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: CopyRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
files | string[] | yes | Array of file paths to copy |
location | string | yes | Destination location |
name | string | no | Optional destination name (Calagopus) |
overwrite | boolean | no | Overwrite existing destination (Calagopus) |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Create directory Create a new directory on the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: CreateDirectoryRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Directory name |
path | string | yes | Parent directory path |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Compress files Compress multiple files or folders into an archive.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: CompressRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
files | string[] | yes | Array of file paths |
root | string | yes | Root directory path |
name | string | no | Archive name (optional, auto-generated if not provided) |
extension | string | no | Archive type: zip, tar.gz, tgz, tar.bz2, tbz2, tar.xz, txz |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Decompress archive Decompress an archive file on the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: DecompressRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
file | string | yes | Archive file path |
root | string | yes | Root directory path |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
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.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
| Body field | Type | Required | Description |
|---|---|---|---|
root | string | yes | Directory on the server that contains the archive |
file | string | yes | Archive file name relative to root |
destination | string | yes | Destination directory relative to server root (use empty string for /) |
entries | string[] | yes | Paths 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
Change file permissions Change permissions for multiple files or folders on the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: FileOperationRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
files | string[] | yes | Array of file paths |
root | string | yes | Root directory path |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Pull file from URL Download a file from a URL to the server. Can run in foreground or background.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Request body: PullFileRequest (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
url | string (uri) | yes | URL to download from |
root | string | yes | Destination directory path |
fileName | string | no | Custom filename |
foreground | boolean | no | Run in foreground |
useHeader | boolean | no | Use headers |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
Get downloads list Retrieve the list of active download processes for the server.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server 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}
Delete pull process Cancel and delete an active download process.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
pullId | path | string | yes | Pull process ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
GET/api/user/servers/{uuidShort}/upload-file
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.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
Response data field | Type | Description |
|---|---|---|
upload_url | string | Signed Wings file upload URL |
expires_in | integer | Token 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
Upload file Upload a file to the server. Content-Type must not be application/json.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | yes | Destination directory path |
filename | query | string | no | Filename for the uploaded file |
Response data field | Type | Description |
|---|---|---|
message | string | Success 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
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).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | yes | File path to download |
Response data field | Type | Description |
|---|---|---|
download_url | string | Signed Wings file download URL |
expires_in | integer | Token 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
Get directory download URL Generate a secure Wings download URL that archives and streams a directory (Calagopus).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | string | yes | Server short UUID |
path | query | string | yes | Directory path to download |
Response data field | Type | Description |
|---|---|---|
download_url | string | Signed Wings directory download URL |
expires_in | integer | Token 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
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuidShort | path | - | yes |
curl -X GET "$PANEL_URL/api/user/servers/$UUID_SHORT/file-fingerprints" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"