Homelab & up REST API keys are included from the Homelab tier (£12/mo) and above. See pricing.

REST API Reference

WolfStack REST API key management
🔑 Homelab+ feature — scoped REST API keys are available on the Homelab tier and above (Homelab, Team, MSP, Enterprise). All endpoints listed below also work with standard session-cookie authentication in every edition.

WolfStack exposes a comprehensive REST API covering every feature available in the web UI. Subscribers on Homelab and above can create scoped API keys (`wsk_*` tokens) for programmatic access from CI/CD pipelines, monitoring tools, custom scripts, and third-party integrations. All endpoints return JSON and use the base URL https://your-server:8553.

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:

ScopeAccess
*Full access — all endpoints, all methods
readRead-only — all GET endpoints
containersDocker & LXC container management
vmsVirtual machine management
storageStorage mounts, disks, ZFS, and Ceph
networkingNetwork interfaces, DNS, VLANs, WolfNet
backupBackup schedules, targets, and restore operations
appstoreApp store browsing, install, and management
statuspageStatus page monitors, pages, and incidents
clusterCluster nodes, join, and settings
wolfrunWolfRun container orchestration services

Dashboard & Metrics

MethodEndpointDescription
GET/api/metricsCurrent system metrics: CPU usage, memory, swap, load averages, disk I/O, network throughput, and uptime
GET/api/metrics/historyRolling 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

MethodEndpointDescription
GET/api/nodesList all cluster nodes with hostname, IP, status, CPU/memory usage, and role
POST/api/nodesJoin 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}/settingsUpdate 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

MethodEndpointDescription
GET/api/containers/dockerList all Docker containers with name, image, state, ports, and resource usage
POST/api/containers/docker/createCreate and start a new Docker container from an image with full configuration (ports, volumes, env vars, restart policy)
POST/api/containers/docker/pullPull a Docker image from a registry (Docker Hub, GHCR, or custom registry)
GET/api/containers/docker/searchSearch Docker Hub for available images by keyword
GET/api/containers/docker/{id}/logsRetrieve container logs with optional tail limit and timestamp filters
POST/api/containers/docker/{id}/actionPerform an action on a container: start, stop, restart, pause, unpause, or remove
POST/api/containers/docker/{id}/cloneClone a container with a new name, preserving its configuration and volumes
POST/api/containers/docker/{id}/migrateMigrate a container to another node in the cluster via image export/import
GET/api/containers/docker/{id}/inspectFull Docker inspect output including networking, mounts, config, and state details
POST/api/containers/docker/{id}/configUpdate container configuration (restart policy, resource limits, labels)
POST/api/containers/docker/{id}/envUpdate environment variables on a container (recreates the container with new env)
GET/api/containers/docker/imagesList 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/importImport 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

MethodEndpointDescription
GET/api/containers/lxcList all LXC containers with name, state, distribution, IP addresses, and resource usage
POST/api/containers/lxc/createCreate a new LXC container from a distribution template with resource limits
GET/api/containers/lxc/templatesList available LXC distribution templates (Ubuntu, Debian, Alpine, etc.)
POST/api/containers/lxc/{name}/actionPerform an action on an LXC container: start, stop, restart, freeze, unfreeze, or delete
POST/api/containers/lxc/{name}/cloneClone an LXC container with a new name, including its filesystem snapshot
GET/api/containers/lxc/{name}/configGet the full LXC configuration for a container (resource limits, networking, mounts)
PUT/api/containers/lxc/{name}/configUpdate LXC container configuration (CPU, memory, network, autostart settings)
POST/api/containers/lxc/{name}/exportExport an LXC container as a tar archive for backup or migration
POST/api/containers/lxc/{name}/migrateMigrate an LXC container to another node in the cluster
GET/api/containers/lxc/{name}/mountsList bind mounts attached to an LXC container
POST/api/containers/lxc/{name}/mountsAdd a new bind mount to an LXC container (host path mapped into container)
DELETE/api/containers/lxc/{name}/mountsRemove 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

MethodEndpointDescription
GET/api/compose/stacksList all Compose stacks with their status, service count, and project directory
POST/api/compose/stacksCreate 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}/composeGet the docker-compose.yml file contents for a stack
POST/api/compose/stacks/{name}/composeUpdate the docker-compose.yml file contents for a stack
POST/api/compose/stacks/{name}/upBring up a Compose stack (equivalent to docker compose up -d)
POST/api/compose/stacks/{name}/downBring down a Compose stack, stopping and removing all services
POST/api/compose/stacks/{name}/pullPull the latest images for all services in a Compose stack
GET/api/compose/stacks/{name}/logsRetrieve 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

MethodEndpointDescription
GET/api/storage/listList all block devices and their partitions with size, filesystem type, and mount point
GET/api/storage/mountsList all configured storage mounts (S3, NFS, SSHFS, WolfDisk, local) with status
POST/api/storage/mountsCreate 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}/mountMount a configured storage location to its mount point
POST/api/storage/mounts/{id}/unmountUnmount a currently mounted storage location
GET/api/storage/disk-infoDetailed disk information including SMART data, temperature, and health status
POST/api/storage/disk/partitionCreate a new partition on a block device
POST/api/storage/disk/formatFormat 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

MethodEndpointDescription
GET/api/storage/zfs/poolsList all ZFS pools with health status, size, used/free space, and properties
GET/api/storage/zfs/datasetsList all ZFS datasets and volumes with mount point, compression, and quota info
GET/api/storage/zfs/snapshotsList all ZFS snapshots with creation time, referenced size, and parent dataset
POST/api/storage/zfs/snapshotCreate a new ZFS snapshot of a dataset or volume
DELETE/api/storage/zfs/snapshotDelete a ZFS snapshot by name
POST/api/storage/zfs/pool/scrubStart 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

MethodEndpointDescription
GET/api/ceph/statusCeph cluster health status, IOPS, throughput, OSD count, and PG distribution
POST/api/ceph/bootstrapBootstrap a new Ceph cluster on the current node (initializes monitors and managers)
POST/api/ceph/poolsCreate 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/osdsAdd 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

MethodEndpointDescription
GET/api/networking/interfacesList all network interfaces with IP addresses, MAC, speed, state, and traffic counters
GET/api/networking/dnsGet current DNS resolver configuration (/etc/resolv.conf entries)
POST/api/networking/dnsUpdate DNS resolver configuration with new nameservers and search domains
POST/api/networking/interfaces/{name}/ipAdd an IP address to a network interface
DELETE/api/networking/interfaces/{name}/ipRemove an IP address from a network interface
POST/api/networking/vlansCreate a VLAN interface on a parent network interface
DELETE/api/networking/vlans/{name}Delete a VLAN interface
GET/api/networking/listening-portsList 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.

MethodEndpointDescription
GET/api/networking/wolfnetGet WolfNet configuration including local IP, subnet, and peer list
GET/api/wolfnet/statusWolfNet daemon status: running/stopped, interface state, connected peers, and traffic stats
GET/api/wolfnet/next-ipGet the next available IP address in the WolfNet subnet for a new peer
POST/api/networking/wolfnet/peersAdd a peer to the WolfNet overlay network with its public key and endpoint
DELETE/api/networking/wolfnet/peersRemove 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.

MethodEndpointDescription
GET/api/networking/wireguardList all WireGuard interfaces with their status, peer count, and traffic stats
POST/api/networking/wireguard/{cluster}/initInitialize a new WireGuard interface for a cluster with server keypair and listen port
POST/api/networking/wireguard/{cluster}/clientsGenerate a new client configuration with keypair and assigned IP from the tunnel subnet
GET/api/networking/wireguard/{cluster}/clients/{id}/configDownload 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

MethodEndpointDescription
GET/api/backupsList all backup jobs with status, last run time, size, and destination
POST/api/backupsCreate 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}/restoreRestore a backup to its original or a specified destination path
GET/api/backups/targetsList available backup targets (local paths, S3 buckets, NFS mounts, remote servers)
GET/api/backups/schedulesList all backup schedules with cron expressions, next run time, and assigned jobs
POST/api/backups/schedulesCreate 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

MethodEndpointDescription
GET/api/files/browseBrowse a directory listing with file names, sizes, permissions, modification times, and types
POST/api/files/mkdirCreate a new directory at the specified path
POST/api/files/deleteDelete a file or directory (recursive for directories)
POST/api/files/renameRename or move a file or directory to a new path
POST/api/files/uploadUpload a file to the specified directory (multipart form data)
GET/api/files/downloadDownload a file from the server as a binary stream
GET/api/files/searchSearch for files by name pattern within a directory tree
GET/api/files/readRead the contents of a text file for viewing or editing
POST/api/files/writeWrite 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

MethodEndpointDescription
GET/api/security/statusSecurity overview: UFW status, Fail2ban jails, banned IPs, iptables rules, and listening ports
POST/api/security/ufw/ruleAdd a UFW firewall rule (allow/deny by port, protocol, and source IP)
DELETE/api/security/ufw/ruleRemove a UFW firewall rule by rule number or specification
POST/api/security/ufw/toggleEnable or disable the UFW firewall
POST/api/security/fail2ban/unbanUnban an IP address from all Fail2ban jails
POST/api/security/updates/checkCheck for available system package updates (apt/dnf/pacman)
POST/api/security/updates/applyApply 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

MethodEndpointDescription
POST/api/certificatesRequest a new TLS certificate via Let’s Encrypt (ACME) for the specified domain
GET/api/certificates/listList 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

MethodEndpointDescription
GET/api/alerts/configGet alerting configuration: thresholds, notification channels (email/webhook), and recipient list
POST/api/alerts/configUpdate alerting configuration with new thresholds, email settings, or webhook URLs
POST/api/alerts/testSend 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.

MethodEndpointDescription
GET/api/statuspage/monitorsList all uptime monitors with check type (HTTP, TCP, ping), interval, and current status
POST/api/statuspage/monitorsCreate 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/pagesList all public status pages with their slug, title, assigned monitors, and theme
POST/api/statuspage/pagesCreate 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/incidentsList all incidents with status (investigating, identified, monitoring, resolved) and updates
POST/api/statuspage/incidentsCreate 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

MethodEndpointDescription
GET/api/appstore/appsList 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-installPrepare an app for installation and return the configuration form (ports, volumes, env vars)
GET/api/appstore/installedList 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.

MethodEndpointDescription
GET/api/wolfrun/servicesList all orchestrated services with replica count, status, health, and assigned nodes
POST/api/wolfrun/servicesCreate a new orchestrated service with image, replicas, placement, and health check config
POST/api/wolfrun/services/adoptAdopt 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}/scaleScale a service to a target replica count across available nodes
POST/api/wolfrun/services/{id}/actionPerform 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.

MethodEndpointDescription
GET/api/kubernetes/clustersList all Kubernetes clusters with version, node count, status, and resource usage
POST/api/kubernetes/clustersCreate 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}/podsList 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}/deploymentsList 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}/scaleScale a deployment to a specified number of replicas
POST/api/kubernetes/clusters/{id}/deploy-appDeploy 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.

MethodEndpointDescription
GET/api/wolfflow/workflowsList all workflows with name, trigger type, enabled status, and last run time
POST/api/wolfflow/workflowsCreate 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}/runManually trigger a workflow run regardless of its configured trigger
GET/api/wolfflow/runsList 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

MethodEndpointDescription
GET/api/cronList all cron jobs on the system with schedule expression, command, and user
POST/api/cronCreate 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

MethodEndpointDescription
GET/api/mysql/detectDetect if MySQL or MariaDB is installed and return version and socket path
POST/api/mysql/connectTest a database connection with provided credentials and return connection status
POST/api/mysql/databasesList all databases accessible with the provided credentials
POST/api/mysql/tablesList all tables in a specific database with row count and size
POST/api/mysql/queryExecute a SQL query and return results as JSON (SELECT) or affected row count (INSERT/UPDATE/DELETE)
POST/api/mysql/dumpGenerate 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.

MethodEndpointDescription
GET/api/ai/configGet AI agent configuration: enabled models, API key status, and system prompt settings
POST/api/ai/configUpdate AI agent configuration with API keys, preferred model, and custom system prompts
POST/api/ai/chatSend a message to the AI agent and receive a response with server-aware context
GET/api/ai/statusGet 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.

MethodEndpointDescription
GET/api/secretsList all stored secret keys (names only, values are not returned in listings)
POST/api/secretsStore 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.

MethodEndpointDescription
GET/api/componentsList all WolfStack components with installed status, version, and service state
POST/api/components/{name}/installInstall a component (Docker, LXC, WolfNet, Ceph, etc.) on the current node
POST/api/services/{name}/actionPerform 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

MethodEndpointDescription
GET/api/config/exportExport the complete WolfStack configuration as a JSON archive for backup or migration
POST/api/config/importImport a WolfStack configuration archive to restore settings, mounts, and schedules
POST/api/upgradeUpgrade WolfStack to the latest version (downloads and replaces the binary, then restarts)
GET/api/issues/scanScan 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

🔑 Enterprise Feature — These endpoints require an active Enterprise license.
MethodEndpointDescription
GET/api/platform/statusCheck enterprise license status: valid/expired, customer name, expiry date, and features
GET/api/tokensList all API keys with name, scopes, creation date, last used, and expiry (key values are masked)
POST/api/tokensCreate 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/scopesList all available API key scopes with descriptions
GET/api/tokens/eventsAPI 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.

MethodEndpointDescription
GET/api/configurator/nginx/sitesList all Nginx site configurations with enabled/disabled status and domain names
POST/api/configurator/nginx/sitesCreate 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}/enableEnable a site by creating a symlink in sites-enabled
POST/api/configurator/nginx/sites/{name}/disableDisable a site by removing its symlink from sites-enabled
POST/api/configurator/nginx/testTest the Nginx configuration for syntax errors (equivalent to nginx -t)
POST/api/configurator/nginx/reloadReload 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:

  1. Obtain your license key file from Wolf Software Systems
  2. Save it to /etc/wolfstack/license.key on your server
  3. Restart WolfStack: sudo systemctl restart wolfstack
  4. 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 .
Esc