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
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /api/deauthorize-user | Node token | |
| POST | /api/webspaces/{uuid:guid}/ws/permissions | Node token |
Dns
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /api/dns/probe | Node token | |
| GET | /api/dns/zones | Node token | |
| POST | /api/dns/zones | Node token | |
| GET | /api/dns/zones/{zone}/records | Node token | |
| POST | /api/dns/zones/{zone}/records | Node token | |
| PATCH | /api/dns/zones/{zone}/records/{recordId} | Node token | |
| DELETE | /api/dns/zones/{zone}/records/{recordId} | Node token | |
| POST | /api/dns/zones/{zone}/txt | Node token | |
| DELETE | /api/dns/zones/{zone}/txt | Node token |
Home
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | / | None / own check | Serves the main page at /. |
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /api/mail/probe | Node token | |
| GET | /api/mail/domains | Node token | |
| POST | /api/mail/domains | Node token | |
| DELETE | /api/mail/domains/{name} | Node token | |
| POST | /api/mail/provision | Node token | |
| GET | /api/mail/dns-hints/{domain} | Node token | |
| GET | /api/mail/mailboxes/{email}/spam | Node token | |
| GET | /api/mail/lists | Node token | |
| GET | /api/mail/deliverability | Node token | |
| GET | /api/mail/webmail | Node token | |
| POST | /api/mail/webmail/configure | Node token |
System
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /api/system | Node token | Daemon identity (Calagopus Wings-compatible shape). |
| GET | /api/system/health | Node token | Health probe used by FeatherPanel admin. |
| GET | /api/system/utilization | Node token | Host utilization in panel-friendly flat shape. |
| GET | /api/system/stats | Node token | Calagopus-style nested stats. |
| GET | /api/system/diagnostics | Node token | Diagnostics / self-test snapshot. |
| GET | /api/system/info | Node token | Basic daemon identity (non-secret). |
| GET | /api/system/plugins | Node token | Loaded plugins (non-secret metadata). |
| DELETE | /api/system/plugins/{pluginId} | Node token | Soft-unload a plugin (subscriptions + routes). MVC application parts require a process restart. |
| GET | /api/system/packages/ws | Node token | Live package install/remove output (bearer via Authorization header or ?token=). |
| GET | /api/system/packages | Node token | List installable host packages (reverse proxy, Docker). |
| POST | /api/system/packages/{packageId}/install | Node token | Install a supported host package. |
| POST | /api/system/packages/{packageId}/remove | Node token | Remove a supported host package. |
| GET | /api/system/version-status | Node token | Compare installed version with upstream (GitHub latest). |
| POST | /api/system/self-update | Node token | Download and replace the running FeatherQuilld binary. |
| GET | /api/system/logs | Node token | List daemon log files (latest.log and archived *.log.gz). |
| GET | /api/system/logs/{fileName} | Node token | Tail lines from a daemon log file. |
Transfers
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /api/transfers/{uuid:guid}/status | Node token | Transfer progress for a WebSpace UUID (outgoing or incoming). |
| POST | /api/transfers | Node token | Accept a gzipped tar archive (raw body or multipart field archive). Headers: X-WebSpace-Uuid, optional X-Start-On-Completion=1. |
WebSpace Files
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /api/webspaces/{uuid:guid}/files/capabilities | Node token | List files and directories under a path. |
| GET | /api/webspaces/{uuid:guid}/files/list | Node token | List files and directories under a path. |
| GET | /api/webspaces/{uuid:guid}/files/contents | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/write | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/create-directory | Node token | |
| PUT | /api/webspaces/{uuid:guid}/files/rename | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/copy | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/copy-many | Node token | Copy multiple files into a destination directory. |
| POST | /api/webspaces/{uuid:guid}/files/create-symlink | Node token | Create a symbolic link within the WebSpace filesystem. |
| GET | /api/webspaces/{uuid:guid}/files/fingerprints | Node token | Compute content fingerprints (hashes) for selected files. |
| POST | /api/webspaces/{uuid:guid}/files/delete | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/trash | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/trash/restore | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/trash/delete | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/trash/empty | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/download | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/upload | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/compress | Node token | Compress selected paths into an archive. |
| POST | /api/webspaces/{uuid:guid}/files/decompress | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/chmod | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/search | Node token | Search file names under a directory. |
| POST | /api/webspaces/{uuid:guid}/files/pull | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/pull-jobs | Node token | |
| DELETE | /api/webspaces/{uuid:guid}/files/pull-jobs/{identifier} | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/download-directory | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/archive-list | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/extract-archive-selection | Node token | |
| GET | /api/webspaces/{uuid:guid}/files/search-advanced | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/wipe | Node token | |
| POST | /api/webspaces/{uuid:guid}/files/upload-signed | None / own check |
WebSpace Schedules
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /api/webspaces/{uuid}/schedules/sync | Node token | Pull schedule definitions from the panel and apply them locally. |
| POST | /api/webspaces/{uuid}/schedules/{scheduleId:int}/trigger | Node token | Trigger a schedule task immediately. |
| POST | /api/webspaces/{uuid}/schedules/abort | Node token | Abort a running scheduled task for this WebSpace. |
WebSpaces
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /api/webspaces | Node token | |
| GET | /api/webspaces/{uuid:guid} | Node token | |
| GET | /api/webspaces/{uuid:guid}/status | Node token | |
| GET | /api/webspaces/{uuid:guid}/logs | Node token | |
| GET | /api/webspaces/{uuid:guid}/proxy-logs | Node token | |
| POST | /api/webspaces/{uuid:guid}/proxy-logs/rotate | Node token | |
| POST | /api/webspaces/{uuid:guid}/exec | Node token | |
| GET | /api/webspaces/{uuid:guid}/logs/install | Node token | |
| GET | /api/webspaces/{uuid:guid}/ssl | Node token | |
| POST | /api/webspaces/{uuid:guid}/ssl/renew | Node token | |
| GET | /api/webspaces/{uuid:guid}/redis | Node token | |
| PUT | /api/webspaces/{uuid:guid}/redis | Node token | |
| GET | /api/webspaces/{uuid:guid}/ssl/custom | Node token | |
| PUT | /api/webspaces/{uuid:guid}/ssl/custom | Node token | |
| DELETE | /api/webspaces/{uuid:guid}/ssl/custom | Node token | |
| GET | /api/webspaces/{uuid:guid}/ws | None / own check | Interactive 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/webspaces | Node token | Panel create body: { "uuid": "...", "start_on_completion": false, "skip_scripts": false }. |
| POST | /api/webspaces/{uuid:guid}/power | Node token | |
| POST | /api/webspaces/{uuid:guid}/reinstall | Node token | |
| POST | /api/webspaces/{uuid:guid}/install/abort | Node token | |
| POST | /api/webspaces/{uuid:guid}/sync | Node token | |
| POST | /api/webspaces/{uuid:guid}/recreate-runtime | Node token | |
| GET | /api/webspaces/{uuid:guid}/backups | Node token | List backups for a WebSpace. |
| POST | /api/webspaces/{uuid:guid}/backup | Node token | Create a backup (sync or async job). |
| GET | /api/webspaces/{uuid:guid}/backups/jobs/{jobId:guid} | Node token | Get status of an async backup/restore job. |
| GET | /api/webspaces/{uuid:guid}/utilization | Node token | |
| POST | /api/webspaces/{uuid:guid}/bandwidth/reset | Node token | |
| DELETE | /api/webspaces/{uuid:guid}/backups/{backupUuid:guid} | Node token | Delete a backup archive. |
| GET | /api/webspaces/{uuid:guid}/backups/{backupUuid:guid}/download | Node token | Download a backup archive as gzip. |
| GET | /api/webspaces/{uuid:guid}/backups/{backupUuid:guid}/files | Node token | List files inside a backup archive (immediate children of directory). |
| POST | /api/webspaces/{uuid:guid}/backups/{backupUuid:guid}/restore | Node token | Restore a backup into the WebSpace filesystem. |
| POST | /api/webspaces/{uuid:guid}/backups/import | Node token | Import an uploaded tar.gz archive as a new backup. |
| POST | /api/webspaces/{uuid:guid}/backups/reconcile | Node token | Rebuild local sidecar backup index from the remote provider (restic/PBS). |
| GET | /api/webspaces/malware-scan/probe | Node token | ClamAV availability on this node. |
| GET | /api/webspaces/{uuid:guid}/malware-scan/last | Node token | Last malware scan result for a WebSpace. |
| POST | /api/webspaces/{uuid:guid}/malware-scan | Node token | Run a filesystem malware scan (async job). |
| GET | /api/webspaces/{uuid:guid}/malware-scan/jobs/{jobId:guid} | Node token | Get status of an async malware scan job. |
| POST | /api/webspaces/{uuid:guid}/transfer | Node token | Outgoing transfer to another Quilld node. |
| DELETE | /api/webspaces/{uuid:guid} | Node token |