View .md

FeatherQuilld API

All 113 FeatherQuilld HTTP endpoints for WebSpaces, files, mail, DNS and the system, with authentication, generated from the Quilld controllers.

Last synced from FeatherQuilld 72bc34d on .

On this page

FeatherQuilld exposes this API for the panel. Users should go through the panel API. Whenapi.docs.enabled is true, a node serves interactive docs at /scalar and the OpenAPI document at/openapi/v1.json.

Authentication

  • Node token: Authorization: Bearer <token_id>.<token> using the values in /etc/featherquilld/config.yml, compared in constant time.
  • Only the console websocket (…/ws) also accepts the node token as ?token=, because browsers cannot set headers on a websocket upgrade. Browser clients instead send {"event":"auth","args":["<jwt>"]} as the first message.
  • Signed uploads (upload-signed) carry their own upload token.

Endpoints

Deauthorize

MethodPathAuthDescription
POST/api/deauthorize-userNode token
POST/api/webspaces/{uuid:guid}/ws/permissionsNode token

Dns

MethodPathAuthDescription
GET/api/dns/probeNode token
GET/api/dns/zonesNode token
POST/api/dns/zonesNode token
GET/api/dns/zones/{zone}/recordsNode token
POST/api/dns/zones/{zone}/recordsNode token
PATCH/api/dns/zones/{zone}/records/{recordId}Node token
DELETE/api/dns/zones/{zone}/records/{recordId}Node token
POST/api/dns/zones/{zone}/txtNode token
DELETE/api/dns/zones/{zone}/txtNode token

Home

MethodPathAuthDescription
GET/None / own checkServes the main page at /.

Mail

MethodPathAuthDescription
GET/api/mail/probeNode token
GET/api/mail/domainsNode token
POST/api/mail/domainsNode token
DELETE/api/mail/domains/{name}Node token
POST/api/mail/provisionNode token
GET/api/mail/dns-hints/{domain}Node token
GET/api/mail/mailboxes/{email}/spamNode token
GET/api/mail/listsNode token
GET/api/mail/deliverabilityNode token
GET/api/mail/webmailNode token
POST/api/mail/webmail/configureNode token

System

MethodPathAuthDescription
GET/api/systemNode tokenDaemon identity (Calagopus Wings-compatible shape).
GET/api/system/healthNode tokenHealth probe used by FeatherPanel admin.
GET/api/system/utilizationNode tokenHost utilization in panel-friendly flat shape.
GET/api/system/statsNode tokenCalagopus-style nested stats.
GET/api/system/diagnosticsNode tokenDiagnostics / self-test snapshot.
GET/api/system/infoNode tokenBasic daemon identity (non-secret).
GET/api/system/pluginsNode tokenLoaded plugins (non-secret metadata).
DELETE/api/system/plugins/{pluginId}Node tokenSoft-unload a plugin (subscriptions + routes). MVC application parts require a process restart.
GET/api/system/packages/wsNode tokenLive package install/remove output (bearer via Authorization header or ?token=).
GET/api/system/packagesNode tokenList installable host packages (reverse proxy, Docker).
POST/api/system/packages/{packageId}/installNode tokenInstall a supported host package.
POST/api/system/packages/{packageId}/removeNode tokenRemove a supported host package.
GET/api/system/version-statusNode tokenCompare installed version with upstream (GitHub latest).
POST/api/system/self-updateNode tokenDownload and replace the running FeatherQuilld binary.
GET/api/system/logsNode tokenList daemon log files (latest.log and archived *.log.gz).
GET/api/system/logs/{fileName}Node tokenTail lines from a daemon log file.

Transfers

MethodPathAuthDescription
GET/api/transfers/{uuid:guid}/statusNode tokenTransfer progress for a WebSpace UUID (outgoing or incoming).
POST/api/transfersNode tokenAccept a gzipped tar archive (raw body or multipart field archive). Headers: X-WebSpace-Uuid, optional X-Start-On-Completion=1.

WebSpace Files

MethodPathAuthDescription
GET/api/webspaces/{uuid:guid}/files/capabilitiesNode tokenList files and directories under a path.
GET/api/webspaces/{uuid:guid}/files/listNode tokenList files and directories under a path.
GET/api/webspaces/{uuid:guid}/files/contentsNode token
POST/api/webspaces/{uuid:guid}/files/writeNode token
POST/api/webspaces/{uuid:guid}/files/create-directoryNode token
PUT/api/webspaces/{uuid:guid}/files/renameNode token
POST/api/webspaces/{uuid:guid}/files/copyNode token
POST/api/webspaces/{uuid:guid}/files/copy-manyNode tokenCopy multiple files into a destination directory.
POST/api/webspaces/{uuid:guid}/files/create-symlinkNode tokenCreate a symbolic link within the WebSpace filesystem.
GET/api/webspaces/{uuid:guid}/files/fingerprintsNode tokenCompute content fingerprints (hashes) for selected files.
POST/api/webspaces/{uuid:guid}/files/deleteNode token
GET/api/webspaces/{uuid:guid}/files/trashNode token
POST/api/webspaces/{uuid:guid}/files/trash/restoreNode token
POST/api/webspaces/{uuid:guid}/files/trash/deleteNode token
POST/api/webspaces/{uuid:guid}/files/trash/emptyNode token
GET/api/webspaces/{uuid:guid}/files/downloadNode token
POST/api/webspaces/{uuid:guid}/files/uploadNode token
POST/api/webspaces/{uuid:guid}/files/compressNode tokenCompress selected paths into an archive.
POST/api/webspaces/{uuid:guid}/files/decompressNode token
POST/api/webspaces/{uuid:guid}/files/chmodNode token
POST/api/webspaces/{uuid:guid}/files/pullNode token
GET/api/webspaces/{uuid:guid}/files/pull-jobsNode token
DELETE/api/webspaces/{uuid:guid}/files/pull-jobs/{identifier}Node token
GET/api/webspaces/{uuid:guid}/files/download-directoryNode token
GET/api/webspaces/{uuid:guid}/files/archive-listNode token
POST/api/webspaces/{uuid:guid}/files/extract-archive-selectionNode token
GET/api/webspaces/{uuid:guid}/files/search-advancedNode token
POST/api/webspaces/{uuid:guid}/files/wipeNode token
POST/api/webspaces/{uuid:guid}/files/upload-signedNone / own check

WebSpace Schedules

MethodPathAuthDescription
POST/api/webspaces/{uuid}/schedules/syncNode tokenPull schedule definitions from the panel and apply them locally.
POST/api/webspaces/{uuid}/schedules/{scheduleId:int}/triggerNode tokenTrigger a schedule task immediately.
POST/api/webspaces/{uuid}/schedules/abortNode tokenAbort a running scheduled task for this WebSpace.

WebSpaces

MethodPathAuthDescription
GET/api/webspacesNode token
GET/api/webspaces/{uuid:guid}Node token
GET/api/webspaces/{uuid:guid}/statusNode token
GET/api/webspaces/{uuid:guid}/logsNode token
GET/api/webspaces/{uuid:guid}/proxy-logsNode token
POST/api/webspaces/{uuid:guid}/proxy-logs/rotateNode token
POST/api/webspaces/{uuid:guid}/execNode token
GET/api/webspaces/{uuid:guid}/logs/installNode token
GET/api/webspaces/{uuid:guid}/sslNode token
POST/api/webspaces/{uuid:guid}/ssl/renewNode token
GET/api/webspaces/{uuid:guid}/redisNode token
PUT/api/webspaces/{uuid:guid}/redisNode token
GET/api/webspaces/{uuid:guid}/ssl/customNode token
PUT/api/webspaces/{uuid:guid}/ssl/customNode token
DELETE/api/webspaces/{uuid:guid}/ssl/customNode token
GET/api/webspaces/{uuid:guid}/wsNone / own checkInteractive console WebSocket. Browser clients auth via first message {"event":"auth","args":["<jwt>"]}; panel proxies may pass node bearer via Authorization / ?token= and skip the JWT event. After auth, clients may send {"event":"send command","args":["<line>"]}.
POST/api/webspacesNode tokenPanel create body: { "uuid": "...", "start_on_completion": false, "skip_scripts": false }.
POST/api/webspaces/{uuid:guid}/powerNode token
POST/api/webspaces/{uuid:guid}/reinstallNode token
POST/api/webspaces/{uuid:guid}/install/abortNode token
POST/api/webspaces/{uuid:guid}/syncNode token
POST/api/webspaces/{uuid:guid}/recreate-runtimeNode token
GET/api/webspaces/{uuid:guid}/backupsNode tokenList backups for a WebSpace.
POST/api/webspaces/{uuid:guid}/backupNode tokenCreate a backup (sync or async job).
GET/api/webspaces/{uuid:guid}/backups/jobs/{jobId:guid}Node tokenGet status of an async backup/restore job.
GET/api/webspaces/{uuid:guid}/utilizationNode token
POST/api/webspaces/{uuid:guid}/bandwidth/resetNode token
DELETE/api/webspaces/{uuid:guid}/backups/{backupUuid:guid}Node tokenDelete a backup archive.
GET/api/webspaces/{uuid:guid}/backups/{backupUuid:guid}/downloadNode tokenDownload a backup archive as gzip.
GET/api/webspaces/{uuid:guid}/backups/{backupUuid:guid}/filesNode tokenList files inside a backup archive (immediate children of directory).
POST/api/webspaces/{uuid:guid}/backups/{backupUuid:guid}/restoreNode tokenRestore a backup into the WebSpace filesystem.
POST/api/webspaces/{uuid:guid}/backups/importNode tokenImport an uploaded tar.gz archive as a new backup.
POST/api/webspaces/{uuid:guid}/backups/reconcileNode tokenRebuild local sidecar backup index from the remote provider (restic/PBS).
GET/api/webspaces/malware-scan/probeNode tokenClamAV availability on this node.
GET/api/webspaces/{uuid:guid}/malware-scan/lastNode tokenLast malware scan result for a WebSpace.
POST/api/webspaces/{uuid:guid}/malware-scanNode tokenRun a filesystem malware scan (async job).
GET/api/webspaces/{uuid:guid}/malware-scan/jobs/{jobId:guid}Node tokenGet status of an async malware scan job.
POST/api/webspaces/{uuid:guid}/transferNode tokenOutgoing transfer to another Quilld node.
DELETE/api/webspaces/{uuid:guid}Node token