Authentication
Three authentication methods are supported. All requests must include one of these:
API Key Enterprise
Send your API key in the X-API-Key header or as a Bearer token in the Authorization header. Keys are prefixed with wsk_ and support scoped permissions.
Session Cookie
After logging in via the web UI or POST /api/login, the browser sends the wolfstack_session cookie automatically with every request. Works in all editions.
Cluster Secret
Inter-node communication uses the X-WolfStack-Secret header with the shared cluster secret. Used internally for node-to-node API calls.
API Key Authentication (Enterprise)
Create API keys from Settings → API Keys in the web UI. Use them in requests:
# Using X-API-Key header (recommended)
curl -s -H "X-API-Key: wsk_a1b2c3d4e5f6..." \
https://your-server:8553/api/metrics
# Using Authorization: Bearer header
curl -s -H "Authorization: Bearer wsk_a1b2c3d4e5f6..." \
https://your-server:8553/api/metrics
Session Cookie Authentication
Log in first to obtain a session cookie, then use it for subsequent requests:
# Log in and save the session cookie
curl -c cookies.txt -X POST -H "Content-Type: application/json" \
-d '{"username":"admin","password":"yourpassword"}' \
https://your-server:8553/api/login
# Use the cookie for API calls
curl -b cookies.txt https://your-server:8553/api/metrics
Cluster Secret Authentication
Used for inter-node communication within a cluster:
# Node-to-node request with cluster secret
curl -s -H "X-WolfStack-Secret: your-cluster-secret" \
https://node-02:8553/api/metrics
API Key Scopes
Each API key can be restricted to specific scopes. Assign only the permissions your integration needs:
| Scope | Access |
* | Full access — all endpoints, all methods |
read | Read-only — all GET endpoints |
containers | Docker & LXC container management |
vms | Virtual machine management |
storage | Storage mounts, disks, ZFS, and Ceph |
networking | Network interfaces, DNS, VLANs, WolfNet |
backup | Backup schedules, targets, and restore operations |
appstore | App store browsing, install, and management |
statuspage | Status page monitors, pages, and incidents |
cluster | Cluster nodes, join, and settings |
wolfrun | WolfRun container orchestration services |
Dashboard & Metrics
| Method | Endpoint | Description |
GET | /api/metrics | Current system metrics: CPU usage, memory, swap, load averages, disk I/O, network throughput, and uptime |
GET | /api/metrics/history | Rolling historical metrics (10-minute window) for graphing CPU, memory, and network trends |
# Get current system metrics
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/metrics | jq .
{
"hostname": "node-01",
"cpu_usage_percent": 12.5,
"memory_total": 16777216,
"memory_used": 7589324,
"memory_percent": 45.2,
"load_avg": [0.85, 1.02, 0.97],
"uptime_seconds": 864000,
...
}
# Get metrics history for charts
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/metrics/history | jq '.[0]'
Cluster & Nodes
| Method | Endpoint | Description |
GET | /api/nodes | List all cluster nodes with hostname, IP, status, CPU/memory usage, and role |
POST | /api/nodes | Join a new node to the cluster using its address and join token |
GET | /api/nodes/{id} | Get detailed information for a specific node including all metrics and capabilities |
DELETE | /api/nodes/{id} | Remove a node from the cluster (does not shut down the remote node) |
PATCH | /api/nodes/{id}/settings | Update node-specific settings such as display name, role, or direct login access |
# List all nodes in the cluster
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/nodes | jq .
# Join a new node
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"address":"192.168.1.20:8553","token":"join_token_here"}' \
https://server:8553/api/nodes
Docker Containers
| Method | Endpoint | Description |
GET | /api/containers/docker | List all Docker containers with name, image, state, ports, and resource usage |
POST | /api/containers/docker/create | Create and start a new Docker container from an image with full configuration (ports, volumes, env vars, restart policy) |
POST | /api/containers/docker/pull | Pull a Docker image from a registry (Docker Hub, GHCR, or custom registry) |
GET | /api/containers/docker/search | Search Docker Hub for available images by keyword |
GET | /api/containers/docker/{id}/logs | Retrieve container logs with optional tail limit and timestamp filters |
POST | /api/containers/docker/{id}/action | Perform an action on a container: start, stop, restart, pause, unpause, or remove |
POST | /api/containers/docker/{id}/clone | Clone a container with a new name, preserving its configuration and volumes |
POST | /api/containers/docker/{id}/migrate | Migrate a container to another node in the cluster via image export/import |
GET | /api/containers/docker/{id}/inspect | Full Docker inspect output including networking, mounts, config, and state details |
POST | /api/containers/docker/{id}/config | Update container configuration (restart policy, resource limits, labels) |
POST | /api/containers/docker/{id}/env | Update environment variables on a container (recreates the container with new env) |
GET | /api/containers/docker/images | List all locally available Docker images with size, tags, and creation date |
DELETE | /api/containers/docker/images/{id} | Remove a Docker image from the local image store |
POST | /api/containers/docker/import | Import a Docker container from an exported tar archive |
# List all Docker containers
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/containers/docker | jq .
# Create a new container
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"name": "my-nginx",
"image": "nginx:latest",
"ports": ["80:80","443:443"],
"volumes": ["/data/nginx:/etc/nginx/conf.d"],
"env": ["NGINX_HOST=example.com"],
"restart_policy": "unless-stopped"
}' \
https://server:8553/api/containers/docker/create
# Stop a container
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"action":"stop"}' \
https://server:8553/api/containers/docker/abc123def/action
LXC Containers
| Method | Endpoint | Description |
GET | /api/containers/lxc | List all LXC containers with name, state, distribution, IP addresses, and resource usage |
POST | /api/containers/lxc/create | Create a new LXC container from a distribution template with resource limits |
GET | /api/containers/lxc/templates | List available LXC distribution templates (Ubuntu, Debian, Alpine, etc.) |
POST | /api/containers/lxc/{name}/action | Perform an action on an LXC container: start, stop, restart, freeze, unfreeze, or delete |
POST | /api/containers/lxc/{name}/clone | Clone an LXC container with a new name, including its filesystem snapshot |
GET | /api/containers/lxc/{name}/config | Get the full LXC configuration for a container (resource limits, networking, mounts) |
PUT | /api/containers/lxc/{name}/config | Update LXC container configuration (CPU, memory, network, autostart settings) |
POST | /api/containers/lxc/{name}/export | Export an LXC container as a tar archive for backup or migration |
POST | /api/containers/lxc/{name}/migrate | Migrate an LXC container to another node in the cluster |
GET | /api/containers/lxc/{name}/mounts | List bind mounts attached to an LXC container |
POST | /api/containers/lxc/{name}/mounts | Add a new bind mount to an LXC container (host path mapped into container) |
DELETE | /api/containers/lxc/{name}/mounts | Remove a bind mount from an LXC container |
# List all LXC containers
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/containers/lxc | jq .
# Create a new LXC container
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"name": "web-server",
"template": "ubuntu",
"release": "24.04",
"memory_limit": "2G",
"cpu_limit": "2"
}' \
https://server:8553/api/containers/lxc/create
Docker Compose
| Method | Endpoint | Description |
GET | /api/compose/stacks | List all Compose stacks with their status, service count, and project directory |
POST | /api/compose/stacks | Create a new Compose stack by providing a name and docker-compose.yml content |
DELETE | /api/compose/stacks/{name} | Delete a Compose stack, stopping all services and removing the project directory |
GET | /api/compose/stacks/{name}/compose | Get the docker-compose.yml file contents for a stack |
POST | /api/compose/stacks/{name}/compose | Update the docker-compose.yml file contents for a stack |
POST | /api/compose/stacks/{name}/up | Bring up a Compose stack (equivalent to docker compose up -d) |
POST | /api/compose/stacks/{name}/down | Bring down a Compose stack, stopping and removing all services |
POST | /api/compose/stacks/{name}/pull | Pull the latest images for all services in a Compose stack |
GET | /api/compose/stacks/{name}/logs | Retrieve combined logs from all services in a Compose stack |
# List all Compose stacks
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/compose/stacks | jq .
# Create a new stack
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"name": "monitoring",
"compose": "version: \"3.8\"\nservices:\n prometheus:\n image: prom/prometheus\n ports:\n - 9090:9090"
}' \
https://server:8553/api/compose/stacks
# Bring a stack up
curl -X POST -H "X-API-Key: wsk_..." \
https://server:8553/api/compose/stacks/monitoring/up
Storage & Disks
| Method | Endpoint | Description |
GET | /api/storage/list | List all block devices and their partitions with size, filesystem type, and mount point |
GET | /api/storage/mounts | List all configured storage mounts (S3, NFS, SSHFS, WolfDisk, local) with status |
POST | /api/storage/mounts | Create a new storage mount configuration (specify type, credentials, mount point) |
PUT | /api/storage/mounts/{id} | Update an existing storage mount configuration |
DELETE | /api/storage/mounts/{id} | Delete a storage mount configuration (unmounts first if currently mounted) |
POST | /api/storage/mounts/{id}/mount | Mount a configured storage location to its mount point |
POST | /api/storage/mounts/{id}/unmount | Unmount a currently mounted storage location |
GET | /api/storage/disk-info | Detailed disk information including SMART data, temperature, and health status |
POST | /api/storage/disk/partition | Create a new partition on a block device |
POST | /api/storage/disk/format | Format a partition with a specified filesystem (ext4, xfs, btrfs, etc.) |
# List all storage mounts
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/storage/mounts | jq .
# Create an S3 mount
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"name": "backup-bucket",
"mount_type": "s3",
"bucket": "my-backups",
"endpoint": "https://s3.amazonaws.com",
"access_key": "AKIA...",
"secret_key": "...",
"mount_point": "/mnt/s3-backups"
}' \
https://server:8553/api/storage/mounts
ZFS
| Method | Endpoint | Description |
GET | /api/storage/zfs/pools | List all ZFS pools with health status, size, used/free space, and properties |
GET | /api/storage/zfs/datasets | List all ZFS datasets and volumes with mount point, compression, and quota info |
GET | /api/storage/zfs/snapshots | List all ZFS snapshots with creation time, referenced size, and parent dataset |
POST | /api/storage/zfs/snapshot | Create a new ZFS snapshot of a dataset or volume |
DELETE | /api/storage/zfs/snapshot | Delete a ZFS snapshot by name |
POST | /api/storage/zfs/pool/scrub | Start a scrub operation on a ZFS pool to verify data integrity |
# List ZFS pools
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/storage/zfs/pools | jq .
# Create a snapshot
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"dataset":"tank/data","snapshot_name":"daily-2026-04-04"}' \
https://server:8553/api/storage/zfs/snapshot
Ceph
| Method | Endpoint | Description |
GET | /api/ceph/status | Ceph cluster health status, IOPS, throughput, OSD count, and PG distribution |
POST | /api/ceph/bootstrap | Bootstrap a new Ceph cluster on the current node (initializes monitors and managers) |
POST | /api/ceph/pools | Create a new Ceph pool with specified replication factor and PG count |
DELETE | /api/ceph/pools/{name} | Delete a Ceph pool (requires confirmation, destroys all data in the pool) |
POST | /api/ceph/osds | Add a new OSD (Object Storage Daemon) to the Ceph cluster using a specified disk |
DELETE | /api/ceph/osds/{id} | Remove an OSD from the Ceph cluster (marks out, stops, and purges) |
# Get Ceph cluster status
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/ceph/status | jq .
# Create a new pool
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"name":"rbd-pool","size":3,"pg_num":128}' \
https://server:8553/api/ceph/pools
Networking
| Method | Endpoint | Description |
GET | /api/networking/interfaces | List all network interfaces with IP addresses, MAC, speed, state, and traffic counters |
GET | /api/networking/dns | Get current DNS resolver configuration (/etc/resolv.conf entries) |
POST | /api/networking/dns | Update DNS resolver configuration with new nameservers and search domains |
POST | /api/networking/interfaces/{name}/ip | Add an IP address to a network interface |
DELETE | /api/networking/interfaces/{name}/ip | Remove an IP address from a network interface |
POST | /api/networking/vlans | Create a VLAN interface on a parent network interface |
DELETE | /api/networking/vlans/{name} | Delete a VLAN interface |
GET | /api/networking/listening-ports | List all listening TCP/UDP ports with associated process name and PID |
# List network interfaces
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/networking/interfaces | jq .
# Create a VLAN
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"parent":"eth0","vlan_id":100}' \
https://server:8553/api/networking/vlans
WolfNet
WolfNet is the encrypted overlay network that connects cluster nodes. Uses X25519 key exchange with ChaCha20-Poly1305 encryption.
| Method | Endpoint | Description |
GET | /api/networking/wolfnet | Get WolfNet configuration including local IP, subnet, and peer list |
GET | /api/wolfnet/status | WolfNet daemon status: running/stopped, interface state, connected peers, and traffic stats |
GET | /api/wolfnet/next-ip | Get the next available IP address in the WolfNet subnet for a new peer |
POST | /api/networking/wolfnet/peers | Add a peer to the WolfNet overlay network with its public key and endpoint |
DELETE | /api/networking/wolfnet/peers | Remove a peer from the WolfNet overlay network |
# Check WolfNet status
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/wolfnet/status | jq .
# Add a WolfNet peer
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"public_key":"base64key...","endpoint":"203.0.113.10:51820","allowed_ip":"10.99.0.5/32"}' \
https://server:8553/api/networking/wolfnet/peers
WireGuard Bridge
Create WireGuard VPN tunnels for remote access to cluster networks. Each cluster can have its own WireGuard interface with client configurations.
| Method | Endpoint | Description |
GET | /api/networking/wireguard | List all WireGuard interfaces with their status, peer count, and traffic stats |
POST | /api/networking/wireguard/{cluster}/init | Initialize a new WireGuard interface for a cluster with server keypair and listen port |
POST | /api/networking/wireguard/{cluster}/clients | Generate a new client configuration with keypair and assigned IP from the tunnel subnet |
GET | /api/networking/wireguard/{cluster}/clients/{id}/config | Download the WireGuard client configuration file (.conf) for import into a WireGuard client app |
# Initialize WireGuard for a cluster
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"listen_port":51821,"address":"10.100.0.1/24"}' \
https://server:8553/api/networking/wireguard/production/init
# Generate a client config
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"name":"laptop-paul"}' \
https://server:8553/api/networking/wireguard/production/clients
Backups
| Method | Endpoint | Description |
GET | /api/backups | List all backup jobs with status, last run time, size, and destination |
POST | /api/backups | Create a new backup job specifying source paths, destination target, and retention policy |
DELETE | /api/backups/{id} | Delete a backup job and optionally its stored backup data |
POST | /api/backups/{id}/restore | Restore a backup to its original or a specified destination path |
GET | /api/backups/targets | List available backup targets (local paths, S3 buckets, NFS mounts, remote servers) |
GET | /api/backups/schedules | List all backup schedules with cron expressions, next run time, and assigned jobs |
POST | /api/backups/schedules | Create or update a backup schedule with cron timing and backup job assignment |
DELETE | /api/backups/schedules/{id} | Delete a backup schedule (does not delete the backup jobs or data) |
# List all backups
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/backups | jq .
# Create a backup job
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"name": "etc-config-backup",
"source_paths": ["/etc/wolfstack", "/etc/nginx"],
"target_id": "s3-backup-target",
"retention_days": 30
}' \
https://server:8553/api/backups
File Manager
| Method | Endpoint | Description |
GET | /api/files/browse | Browse a directory listing with file names, sizes, permissions, modification times, and types |
POST | /api/files/mkdir | Create a new directory at the specified path |
POST | /api/files/delete | Delete a file or directory (recursive for directories) |
POST | /api/files/rename | Rename or move a file or directory to a new path |
POST | /api/files/upload | Upload a file to the specified directory (multipart form data) |
GET | /api/files/download | Download a file from the server as a binary stream |
GET | /api/files/search | Search for files by name pattern within a directory tree |
GET | /api/files/read | Read the contents of a text file for viewing or editing |
POST | /api/files/write | Write content to a text file (creates or overwrites) |
# Browse /etc directory
curl -s -H "X-API-Key: wsk_..." \
"https://server:8553/api/files/browse?path=/etc" | jq .
# Read a config file
curl -s -H "X-API-Key: wsk_..." \
"https://server:8553/api/files/read?path=/etc/hostname" | jq .
# Upload a file
curl -X POST -H "X-API-Key: wsk_..." \
-F "file=@backup.tar.gz" -F "path=/tmp" \
https://server:8553/api/files/upload
Security
| Method | Endpoint | Description |
GET | /api/security/status | Security overview: UFW status, Fail2ban jails, banned IPs, iptables rules, and listening ports |
POST | /api/security/ufw/rule | Add a UFW firewall rule (allow/deny by port, protocol, and source IP) |
DELETE | /api/security/ufw/rule | Remove a UFW firewall rule by rule number or specification |
POST | /api/security/ufw/toggle | Enable or disable the UFW firewall |
POST | /api/security/fail2ban/unban | Unban an IP address from all Fail2ban jails |
POST | /api/security/updates/check | Check for available system package updates (apt/dnf/pacman) |
POST | /api/security/updates/apply | Apply all available system package updates |
# Get security status
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/security/status | jq .
# Add a UFW rule to allow HTTPS
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"action":"allow","port":"443","protocol":"tcp"}' \
https://server:8553/api/security/ufw/rule
Certificates
| Method | Endpoint | Description |
POST | /api/certificates | Request a new TLS certificate via Let’s Encrypt (ACME) for the specified domain |
GET | /api/certificates/list | List all managed TLS certificates with domain, expiry date, issuer, and renewal status |
# List certificates
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/certificates/list | jq .
# Request a new certificate
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"domain":"dashboard.example.com","email":"admin@example.com"}' \
https://server:8553/api/certificates
Alerting
| Method | Endpoint | Description |
GET | /api/alerts/config | Get alerting configuration: thresholds, notification channels (email/webhook), and recipient list |
POST | /api/alerts/config | Update alerting configuration with new thresholds, email settings, or webhook URLs |
POST | /api/alerts/test | Send a test alert notification to verify email/webhook delivery |
# Get alert configuration
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/alerts/config | jq .
# Update alert thresholds
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"cpu_threshold": 90,
"memory_threshold": 85,
"disk_threshold": 95,
"email_recipients": ["ops@example.com"],
"webhook_url": "https://hooks.slack.com/services/..."
}' \
https://server:8553/api/alerts/config
Status Pages
Uptime monitoring with public-facing status pages. All entities are cluster-scoped — pass the cluster query parameter.
| Method | Endpoint | Description |
GET | /api/statuspage/monitors | List all uptime monitors with check type (HTTP, TCP, ping), interval, and current status |
POST | /api/statuspage/monitors | Create a new uptime monitor with URL/host, check type, interval, and expected response |
DELETE | /api/statuspage/monitors/{id} | Delete an uptime monitor and its historical check data |
GET | /api/statuspage/pages | List all public status pages with their slug, title, assigned monitors, and theme |
POST | /api/statuspage/pages | Create a new public status page with a URL slug, title, and list of monitors to display |
DELETE | /api/statuspage/pages/{id} | Delete a public status page (monitors continue running) |
GET | /api/statuspage/incidents | List all incidents with status (investigating, identified, monitoring, resolved) and updates |
POST | /api/statuspage/incidents | Create a new incident with title, description, severity, and affected monitors |
DELETE | /api/statuspage/incidents/{id} | Delete an incident record |
# List monitors for a cluster
curl -s -H "X-API-Key: wsk_..." \
"https://server:8553/api/statuspage/monitors?cluster=production" | jq .
# Create an HTTP monitor
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"cluster": "production",
"name": "Main Website",
"url": "https://example.com",
"check_type": "http",
"interval_seconds": 30,
"expected_status": 200
}' \
https://server:8553/api/statuspage/monitors
App Store
| Method | Endpoint | Description |
GET | /api/appstore/apps | List all available applications in the app store with categories, descriptions, and install types |
GET | /api/appstore/apps/{id} | Get detailed information about a specific application including configuration options |
POST | /api/appstore/apps/{id}/prepare-install | Prepare an app for installation and return the configuration form (ports, volumes, env vars) |
GET | /api/appstore/installed | List all installed applications with their status, version, and resource usage |
DELETE | /api/appstore/installed/{id} | Uninstall an application and remove its containers, volumes, and configuration |
# Browse available apps
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/appstore/apps | jq '.[0:3]'
# Prepare to install an app
curl -X POST -H "X-API-Key: wsk_..." \
https://server:8553/api/appstore/apps/nextcloud/prepare-install | jq .
WolfRun Orchestration
Manage multi-container services across cluster nodes with automatic scaling, health checks, and rolling updates.
| Method | Endpoint | Description |
GET | /api/wolfrun/services | List all orchestrated services with replica count, status, health, and assigned nodes |
POST | /api/wolfrun/services | Create a new orchestrated service with image, replicas, placement, and health check config |
POST | /api/wolfrun/services/adopt | Adopt an existing running container as a WolfRun-managed service |
GET | /api/wolfrun/services/{id} | Get detailed service information including per-replica status and deployment history |
DELETE | /api/wolfrun/services/{id} | Delete an orchestrated service and stop all its replicas across the cluster |
POST | /api/wolfrun/services/{id}/scale | Scale a service to a target replica count across available nodes |
POST | /api/wolfrun/services/{id}/action | Perform a service action: restart all replicas, rolling update, or force redeploy |
# List orchestrated services
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/wolfrun/services | jq .
# Scale a service to 5 replicas
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"replicas":5}' \
https://server:8553/api/wolfrun/services/svc_abc123/scale
Kubernetes (WolfKube)
Manage lightweight Kubernetes clusters provisioned by WolfStack. Deploy apps, manage pods, and scale deployments.
| Method | Endpoint | Description |
GET | /api/kubernetes/clusters | List all Kubernetes clusters with version, node count, status, and resource usage |
POST | /api/kubernetes/clusters | Create a new Kubernetes cluster (provisions control plane and worker nodes) |
DELETE | /api/kubernetes/clusters/{id} | Delete a Kubernetes cluster and tear down all its nodes |
GET | /api/kubernetes/clusters/{id}/pods | List all pods in the cluster with namespace, status, restarts, and resource usage |
DELETE | /api/kubernetes/clusters/{id}/pods/{name} | Delete a pod (the controller will recreate it if managed by a deployment) |
GET | /api/kubernetes/clusters/{id}/deployments | List all deployments with replica count, available/unavailable pods, and image versions |
DELETE | /api/kubernetes/clusters/{id}/deployments/{name} | Delete a deployment and all its managed pods |
PATCH | /api/kubernetes/clusters/{id}/deployments/{name}/scale | Scale a deployment to a specified number of replicas |
POST | /api/kubernetes/clusters/{id}/deploy-app | Deploy an application to the cluster from an image with port, replicas, and env config |
# List Kubernetes clusters
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/kubernetes/clusters | jq .
# Scale a deployment
curl -X PATCH -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"replicas":3}' \
https://server:8553/api/kubernetes/clusters/k8s_01/deployments/web-app/scale
WolfFlow Automation
Visual workflow automation engine. Create workflows with triggers, conditions, and actions to automate server management tasks.
| Method | Endpoint | Description |
GET | /api/wolfflow/workflows | List all workflows with name, trigger type, enabled status, and last run time |
POST | /api/wolfflow/workflows | Create a new workflow with nodes (triggers, conditions, actions) and edge connections |
GET | /api/wolfflow/workflows/{id} | Get a workflow definition including all nodes, edges, and configuration |
PUT | /api/wolfflow/workflows/{id} | Update a workflow definition (replaces all nodes and edges) |
DELETE | /api/wolfflow/workflows/{id} | Delete a workflow and its run history |
POST | /api/wolfflow/workflows/{id}/run | Manually trigger a workflow run regardless of its configured trigger |
GET | /api/wolfflow/runs | List workflow run history with status (success, failed, running), duration, and output logs |
# List all workflows
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/wolfflow/workflows | jq .
# Manually trigger a workflow
curl -X POST -H "X-API-Key: wsk_..." \
https://server:8553/api/wolfflow/workflows/wf_abc123/run
Cron Jobs
| Method | Endpoint | Description |
GET | /api/cron | List all cron jobs on the system with schedule expression, command, and user |
POST | /api/cron | Create a new cron job with schedule expression, command, and optional user |
DELETE | /api/cron/{index} | Delete a cron job by its index in the crontab |
# List all cron jobs
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/cron | jq .
# Create a cron job to run backups daily at 2 AM
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"schedule":"0 2 * * *","command":"/usr/local/bin/backup.sh","user":"root"}' \
https://server:8553/api/cron
MySQL/MariaDB Editor
| Method | Endpoint | Description |
GET | /api/mysql/detect | Detect if MySQL or MariaDB is installed and return version and socket path |
POST | /api/mysql/connect | Test a database connection with provided credentials and return connection status |
POST | /api/mysql/databases | List all databases accessible with the provided credentials |
POST | /api/mysql/tables | List all tables in a specific database with row count and size |
POST | /api/mysql/query | Execute a SQL query and return results as JSON (SELECT) or affected row count (INSERT/UPDATE/DELETE) |
POST | /api/mysql/dump | Generate a SQL dump of a database or specific tables for backup/export |
# Detect MySQL installation
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/mysql/detect | jq .
# Execute a query
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"host": "localhost",
"user": "root",
"password": "dbpassword",
"database": "myapp",
"query": "SELECT id, name FROM users LIMIT 10"
}' \
https://server:8553/api/mysql/query
AI Agent
Built-in AI assistant for server management. Supports Claude and Gemini models with context-aware health monitoring.
| Method | Endpoint | Description |
GET | /api/ai/config | Get AI agent configuration: enabled models, API key status, and system prompt settings |
POST | /api/ai/config | Update AI agent configuration with API keys, preferred model, and custom system prompts |
POST | /api/ai/chat | Send a message to the AI agent and receive a response with server-aware context |
GET | /api/ai/status | Get AI agent health status and recent activity summary |
# Chat with the AI agent
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"message":"What is the current disk usage and are any disks close to full?"}' \
https://server:8553/api/ai/chat
# Check AI agent status
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/ai/status | jq .
Secrets Manager
Encrypted key-value store for sensitive data such as API tokens, database passwords, and private keys.
| Method | Endpoint | Description |
GET | /api/secrets | List all stored secret keys (names only, values are not returned in listings) |
POST | /api/secrets | Store a new secret with a key name and encrypted value |
GET | /api/secrets/{key} | Retrieve a secret value by key name (returns the decrypted value) |
DELETE | /api/secrets/{key} | Delete a secret by key name |
# List secret keys
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/secrets | jq .
# Store a new secret
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"key":"db_password","value":"s3cur3_p@ssw0rd"}' \
https://server:8553/api/secrets
Components & Services
Manage system components (Docker, LXC, WolfNet, etc.) and systemd services directly from the API.
| Method | Endpoint | Description |
GET | /api/components | List all WolfStack components with installed status, version, and service state |
POST | /api/components/{name}/install | Install a component (Docker, LXC, WolfNet, Ceph, etc.) on the current node |
POST | /api/services/{name}/action | Perform a systemd service action: start, stop, restart, enable, or disable |
# List components
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/components | jq .
# Restart the nginx service
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{"action":"restart"}' \
https://server:8553/api/services/nginx/action
System
| Method | Endpoint | Description |
GET | /api/config/export | Export the complete WolfStack configuration as a JSON archive for backup or migration |
POST | /api/config/import | Import a WolfStack configuration archive to restore settings, mounts, and schedules |
POST | /api/upgrade | Upgrade WolfStack to the latest version (downloads and replaces the binary, then restarts) |
GET | /api/issues/scan | Scan for system issues: outdated packages, misconfigured services, security warnings, and resource problems |
# Export configuration
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/config/export -o wolfstack-config.json
# Scan for issues
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/issues/scan | jq .
Enterprise API Keys
| Method | Endpoint | Description |
GET | /api/platform/status | Check enterprise license status: valid/expired, customer name, expiry date, and features |
GET | /api/tokens | List all API keys with name, scopes, creation date, last used, and expiry (key values are masked) |
POST | /api/tokens | Create a new API key with name, scopes, and optional expiry date (returns the raw key once) |
DELETE | /api/tokens/{id} | Revoke an API key immediately (all requests using this key will be rejected) |
GET | /api/tokens/scopes | List all available API key scopes with descriptions |
GET | /api/tokens/events | API key usage audit log: recent requests with key name, endpoint, method, IP, and timestamp |
# Create a new API key
curl -X POST -H "X-API-Key: wsk_admin_key..." -H "Content-Type: application/json" \
-d '{
"name": "ci-deploy-bot",
"scopes": ["containers", "appstore"],
"expires": "2027-01-01"
}' \
https://server:8553/api/tokens
{
"key": { "id": "key_...", "name": "ci-deploy-bot", "scopes": ["containers","appstore"] },
"raw_key": "wsk_a1b2c3d4e5f6...",
"message": "Save this key now -- it will not be shown again"
}
# View audit log
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/tokens/events | jq '.[0:5]'
Nginx (WolfProxy) Configurator
Manage Nginx reverse proxy configurations. Create, edit, enable, and disable site configurations with automatic syntax validation.
| Method | Endpoint | Description |
GET | /api/configurator/nginx/sites | List all Nginx site configurations with enabled/disabled status and domain names |
POST | /api/configurator/nginx/sites | Create a new Nginx site configuration with server name, upstream, SSL, and proxy settings |
GET | /api/configurator/nginx/sites/{name} | Get the full Nginx configuration file contents for a site |
PUT | /api/configurator/nginx/sites/{name} | Update an Nginx site configuration (replaces the entire config file) |
DELETE | /api/configurator/nginx/sites/{name} | Delete an Nginx site configuration file |
POST | /api/configurator/nginx/sites/{name}/enable | Enable a site by creating a symlink in sites-enabled |
POST | /api/configurator/nginx/sites/{name}/disable | Disable a site by removing its symlink from sites-enabled |
POST | /api/configurator/nginx/test | Test the Nginx configuration for syntax errors (equivalent to nginx -t) |
POST | /api/configurator/nginx/reload | Reload Nginx to apply configuration changes (graceful reload, no downtime) |
# List all Nginx sites
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/configurator/nginx/sites | jq .
# Create a reverse proxy site
curl -X POST -H "X-API-Key: wsk_..." -H "Content-Type: application/json" \
-d '{
"name": "app-proxy",
"server_name": "app.example.com",
"upstream": "http://127.0.0.1:3000",
"ssl": true,
"ssl_certificate": "/etc/letsencrypt/live/app.example.com/fullchain.pem",
"ssl_certificate_key": "/etc/letsencrypt/live/app.example.com/privkey.pem"
}' \
https://server:8553/api/configurator/nginx/sites
# Test and reload
curl -X POST -H "X-API-Key: wsk_..." https://server:8553/api/configurator/nginx/test
curl -X POST -H "X-API-Key: wsk_..." https://server:8553/api/configurator/nginx/reload
Error Handling
All API errors return JSON with an error field and an appropriate HTTP status code:
// 400 Bad Request — invalid parameters
{ "error": "Missing required field: name" }
// 401 Unauthorized — no valid credentials
{ "error": "Invalid or expired API key" }
// 403 Forbidden — wrong scope or missing license
{ "error": "API key does not have permission for this endpoint" }
{ "error": "Enterprise license required" }
// 404 Not Found — resource does not exist
{ "error": "Container not found: abc123" }
// 409 Conflict — resource state conflict
{ "error": "Container is already running" }
// 500 Internal Server Error — unexpected failure
{ "error": "Failed to connect to Docker socket" }
Successful responses return 200 OK with a JSON body. Mutations (POST, PUT, DELETE) typically include a message field confirming the action:
{ "message": "Container started successfully" }
{ "message": "Backup schedule created", "id": "sched_abc123" }
Rate Limiting
WolfStack applies rate limiting to protect against abuse:
- Login endpoint — Maximum 10 attempts per 5 minutes per IP address. Lockouts clear automatically after the window expires.
- API endpoints — No hard rate limit on authenticated API requests. However, resource-intensive operations (backups, migrations, updates) are serialized to prevent overloading the system.
- Session lifetime — Session cookies expire after 8 hours. Expired sessions are cleaned up every 5 minutes.
- API key expiry — Enterprise API keys can have an optional expiry date. Expired keys are rejected immediately.
Installing an Enterprise License
Enterprise licenses are issued as a signed JSON file. To activate API key management:
- Obtain your license key file from Wolf Software Systems
- Save it to
/etc/wolfstack/license.key on your server
- Restart WolfStack:
sudo systemctl restart wolfstack
- Go to Settings → API Keys to create your first key
# Save the license file
sudo tee /etc/wolfstack/license.key << 'EOF'
{
"payload": "eyJjdXN0b21lci...",
"signature": "dGhpcyBpcyBh..."
}
EOF
# Restart to activate
sudo systemctl restart wolfstack
# Verify the license
curl -s -H "X-API-Key: wsk_..." https://server:8553/api/platform/status | jq .