Files API

Complete file system management including browse, edit, archive, extract, bin, git, and permissions.

All endpoints are prefixed with /api/files. Authentication required for all.


Endpoints

MethodPathAuthDescription
GET/files/listYesList directory contents
GET/files/readYesRead file content
POST/files/createYesCreate file or directory
PUT/files/renameYesRename file or directory
DELETE/files/deleteYesDelete (move to bin)
POST/files/copyYesCopy files
POST/files/moveYesMove files
POST/files/copytoYesCopy to destination
POST/files/movetoYesMove to destination
POST/files/duplicateYesDuplicate file
GET/files/searchYesSearch files recursively
POST/files/archiveYesCreate archive (zip/tar/tar.gz)
POST/files/extractYesExtract archive
PUT/files/permissionsYesChange chmod
GET/files/detailsYesFile/folder details
POST/files/diffYesDiff two files
POST/files/uploadYesUpload files (multipart)
GET/files/git/statusYesGit status
POST/files/git/stageYesGit add
POST/files/git/unstageYesGit reset
POST/files/git/commitYesGit commit
POST/files/git/pushYesGit push
POST/files/git/pullYesGit pull
POST/files/check-conflictsYesConflict check (copy/move)
POST/files/check-extract-conflictsYesConflict check (extract)
GET/files/binYesList recycle bin
POST/files/bin/restoreYesRestore from bin
DELETE/files/bin/permanentYesPermanent delete
DELETE/files/bin/emptyYesEmpty bin

Key Request/Response Formats

GET /files/list

Params: path (query param)

Response:

{
  "path": "/var/www",
  "items": [
    { "name": "html", "type": "directory", "size": 4096, "modified": "2026-07-28T12:00:00Z", "permissions": "drwxr-xr-x" },
    { "name": "logs", "type": "file", "size": 12345, "modified": "2026-07-28T11:00:00Z", "permissions": "-rw-r--r--" }
  ]
}

POST /files/create

{ "path": "/var/www/html", "name": "index.html", "type": "file" }

POST /files/upload

Multipart form data: files field + path field.

POST /files/archive

{ "files": ["/var/www/file1.txt", "/var/www/file2.txt"], "format": "zip", "output": "/var/www/archive.zip" }

POST /files/extract

{ "archive": "/var/www/archive.zip", "destination": "/var/www/extracted", "strategy": "overwrite" }

Strategy options: overwrite, skip, rename

Bin Operations

  • GET /files/bin — Lists all batches in data/filebin/
  • POST /files/bin/restore{ "batchId": "batch_...", "files": ["file1.txt"] }
  • DELETE /files/bin/permanent{ "batchId": "batch_...", "files": ["file1.txt"] }
  • DELETE /files/bin/empty — Clears all bin entries

Conflict Detection

Before copy/move/extract operations, the frontend calls conflict detection:

// POST /files/check-conflicts
{ "files": ["file1.txt"], "destination": "/var/www/" }

// Response
{
  "conflicts": [
    { "name": "file1.txt", "sourceSize": 1234, "destSize": 5678, "sourceModified": "...", "destModified": "..." }
  ]
}

Event Delegation

Frontend uses data-fm-action attributes:

ActionElement
uploadUpload button
create-fileNew file button
create-folderNew folder button
archiveArchive button
extractExtract button
binOpen bin button
git-statusGit status button

Part of NexusPanel API Reference

← Back to Documentation