VPS API
Virtual Private Servers
Base URL: https://api.wayscloud.services
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /v1/vps | List VPS |
POST | /v1/vps | Create VPS |
GET | /v1/vps/plans/ | List plans |
GET | /v1/vps/os-templates | List OS templates |
GET | /v1/vps/regions | List regions |
GET | /v1/vps/{vps_id} | Get VPS |
GET | /v1/vps/{vps_id}/status | Get status |
POST | /v1/vps/{vps_id}/start | Start VPS |
POST | /v1/vps/{vps_id}/stop | Stop VPS |
POST | /v1/vps/{vps_id}/reboot | Reboot VPS |
GET | /v1/vps/{vps_id}/snapshots | List snapshots |
POST | /v1/vps/{vps_id}/snapshots | Create snapshot |
DELETE | /v1/vps/{vps_id}/snapshots/{snapshot_name} | Delete snapshot |
POST | /v1/vps/{vps_id}/snapshots/{snapshot_name}/rollback | Rollback to snapshot |
GET | /v1/vps/{vps_id}/backups | List backups |
POST | /v1/vps/{vps_id}/backups | Trigger manual backup |
DELETE | /v1/vps/{vps_id}/backups/{backup_id} | Delete backup |
POST | /v1/vps/{vps_id}/backups/{backup_id}/restore | Restore from backup |
GET | /v1/vps/{vps_id}/backups/{backup_id}/download | Download backup |
GET | /v1/vps/{vps_id}/backup-policy | Get backup policy |
PUT | /v1/vps/{vps_id}/backup-policy | Set backup policy |
GET | /v1/vps/{vps_id}/backup-usage | Backup storage usage |
GET /v1/vps
List VPS
Get all VPS instances with hostname, IP addresses, power state, and resource allocation.
Response:
| Field | Type | Description |
|---|---|---|
instances | array | |
total | integer |
Example:
curl https://api.wayscloud.services/v1/vps \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"instances": [
{
"id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"hostname": "web01.example.com",
"display_name": "Production Web Server",
"status": "running",
"ipv4_address": "185.35.202.45"
},
{
"id": "c6d7e8f9-a0b1-2345-6789-0abcdef12345",
"hostname": "db01.example.com",
"display_name": "Database Server",
"status": "running",
"ipv4_address": "185.35.202.46"
}
],
"total": 2
}POST /v1/vps
Create VPS
Provision a new VPS. Takes 1-3 minutes. Include SSH keys for passwordless access.
Request Body:
| Field | Type | Description |
|---|---|---|
hostname | string | Required. Server hostname (FQDN recommended) |
plan_code | string | Required. VPS plan code (from /v1/vps/plans) |
region | string | Required. Datacenter region (see GET /v1/vps/regions for available options) |
os_template | string | Required. Operating system template (from /v1/vps/os-templates) |
display_name | string | User-friendly name for dashboard display |
ssh_keys | array | SSH public keys for server access (recommended) |
Response:
| Field | Type | Description |
|---|---|---|
id | string | VPS instance ID |
hostname | string | |
status | string | Values: provisioning, running |
ipv4 | string | Primary IPv4 address |
ipv6 | string | Primary IPv6 address |
Example:
curl -X POST https://api.wayscloud.services/v1/vps \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{
"hostname": "web01.example.com",
"plan_code": "vps-4gb-2cpu",
"region": "oslo",
"os_template": "ubuntu-22.04",
"display_name": "Production Web Server",
"ssh_keys": [
"ssh-ed25519 AAAA... user@laptop"
]
}'Response:
{
"id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"hostname": "web01.example.com",
"status": "provisioning",
"ipv4": "185.35.202.45",
"ipv6": "2a01:4f9:c010:1234::1"
}GET /v1/vps/plans/
List plans
Get available VPS configurations with vCPU, RAM, storage, bandwidth, and pricing.
Response example:
[
{
"plan_code": "vps-2gb-1cpu",
"name": "2 GB RAM, 1 vCPU",
"vcpus": 1,
"ram_gb": 2,
"storage_gb": 40,
"bandwidth_tb": 2.0,
"price": 99.0,
"currency": "NOK"
},
{
"plan_code": "vps-4gb-2cpu",
"name": "4 GB RAM, 2 vCPU",
"vcpus": 2,
"ram_gb": 4,
"storage_gb": 80,
"bandwidth_tb": 4.0,
"price": 199.0,
"currency": "NOK"
},
{
"plan_code": "vps-8gb-4cpu",
"name": "8 GB RAM, 4 vCPU",
"vcpus": 4,
"ram_gb": 8,
"storage_gb": 160,
"bandwidth_tb": 8.0,
"price": 399.0,
"currency": "NOK"
}
]Example:
curl https://api.wayscloud.services/v1/vps/plans/ \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
[
{
"plan_code": "vps-2gb-1cpu",
"name": "2 GB RAM, 1 vCPU",
"vcpus": 1,
"ram_gb": 2,
"storage_gb": 40,
"bandwidth_tb": 2.0,
"price": 99.0,
"currency": "NOK"
},
{
"plan_code": "vps-4gb-2cpu",
"name": "4 GB RAM, 2 vCPU",
"vcpus": 2,
"ram_gb": 4,
"storage_gb": 80,
"bandwidth_tb": 4.0,
"price": 199.0,
"currency": "NOK"
},
{
"plan_code": "vps-8gb-4cpu",
"name": "8 GB RAM, 4 vCPU",
"vcpus": 4,
"ram_gb": 8,
"storage_gb": 160,
"bandwidth_tb": 8.0,
"price": 399.0,
"currency": "NOK"
}
]GET /v1/vps/os-templates
List OS templates
Get available operating systems for VPS provisioning: Ubuntu, Debian, Rocky, AlmaLinux, and Windows Server.
Response example:
[
{
"id": "ubuntu-24.04",
"name": "Ubuntu 24.04 LTS",
"family": "ubuntu",
"version": "24.04",
"is_windows": false
},
{
"id": "debian-12",
"name": "Debian 12",
"family": "debian",
"version": "12",
"is_windows": false
},
{
"id": "rocky-9",
"name": "Rocky Linux 9",
"family": "rocky",
"version": "9",
"is_windows": false
},
{
"id": "windows-server-2025",
"name": "Windows Server 2025",
"family": "windows",
"version": "2025",
"is_windows": true
}
]Example:
curl https://api.wayscloud.services/v1/vps/os-templates \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
[
{
"id": "ubuntu-24.04",
"name": "Ubuntu 24.04 LTS",
"family": "ubuntu",
"version": "24.04",
"is_windows": false
},
{
"id": "debian-12",
"name": "Debian 12",
"family": "debian",
"version": "12",
"is_windows": false
},
{
"id": "rocky-9",
"name": "Rocky Linux 9",
"family": "rocky",
"version": "9",
"is_windows": false
},
{
"id": "windows-server-2025",
"name": "Windows Server 2025",
"family": "windows",
"version": "2025",
"is_windows": true
}
]GET /v1/vps/regions
List regions
Get available datacenter regions. Choose the region closest to your users for best latency.
Response example:
[
{
"id": "oslo",
"name": "Oslo, Norway",
"country": "NO",
"available": true
},
{
"id": "stockholm",
"name": "Stockholm, Sweden",
"country": "SE",
"available": true
},
{
"id": "frankfurt",
"name": "Frankfurt, Germany",
"country": "DE",
"available": true
}
]Example:
curl https://api.wayscloud.services/v1/vps/regions \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
[
{
"id": "oslo",
"name": "Oslo, Norway",
"country": "NO",
"available": true
},
{
"id": "stockholm",
"name": "Stockholm, Sweden",
"country": "SE",
"available": true
},
{
"id": "frankfurt",
"name": "Frankfurt, Germany",
"country": "DE",
"available": true
}
]GET /v1/vps/
Get VPS
Get complete VPS details: hostname, IP addresses, OS, plan, and configuration.
Response:
| Field | Type | Description |
|---|---|---|
id | string | |
hostname | string | |
display_name | string | |
status | string | Values: running, stopped, starting, stopping, provisioning |
plan_code | string | |
region | string | |
os_template | string | |
ipv4_address | string | |
ipv6_address | string | |
vcpus | integer | |
memory_gb | integer | |
disk_gb | integer | |
created_at | string |
Example:
curl https://api.wayscloud.services/v1/vps/{vps_id} \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"hostname": "web01.example.com",
"display_name": "Production Web Server",
"status": "running",
"plan_code": "vps-4gb-2cpu",
"region": "oslo",
"os_template": "ubuntu-22.04",
"ipv4_address": "185.35.202.45",
"ipv6_address": "2a01:4f9:c010:1234::1",
"vcpus": 2,
"memory_gb": 4,
"disk_gb": 80,
"created_at": "2024-02-15T14:30:00Z"
}GET /v1/vps/{vps_id}/status
Get status
Check power state (running/stopped), uptime, and health indicators.
Response:
| Field | Type | Description |
|---|---|---|
status | string | |
uptime_seconds | integer | |
cpu_usage_percent | number | |
memory_usage_percent | number | |
disk_usage_percent | number | |
network_in_bytes | integer | |
network_out_bytes | integer |
Example:
curl https://api.wayscloud.services/v1/vps/{vps_id}/status \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"status": "running",
"uptime_seconds": 2592000,
"cpu_usage_percent": 12.5,
"memory_usage_percent": 68.3,
"disk_usage_percent": 42.1,
"network_in_bytes": 157286400,
"network_out_bytes": 52428800
}POST /v1/vps/{vps_id}/start
Start VPS
Power on a stopped VPS. Accessible within 30-60 seconds.
Response:
| Field | Type | Description |
|---|---|---|
success | boolean | |
action | string | |
message | string |
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/start \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"success": true,
"action": "start",
"message": "VPS is starting"
}POST /v1/vps/{vps_id}/stop
Stop VPS
Gracefully shut down a running VPS. Stopped VPS still incurs storage costs.
Response:
| Field | Type | Description |
|---|---|---|
success | boolean | |
action | string | |
message | string |
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/stop \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"success": true,
"action": "start",
"message": "VPS is starting"
}POST /v1/vps/{vps_id}/reboot
Reboot VPS
Graceful reboot. Back online within 1-2 minutes.
Response:
| Field | Type | Description |
|---|---|---|
success | boolean | |
action | string | |
message | string |
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/reboot \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"success": true,
"action": "start",
"message": "VPS is starting"
}Snapshots
Point-in-time snapshots of the VPS disk. Stored on the same hypervisor node. Maximum 10 snapshots per VPS. The VPS must be stopped before creating or rolling back a snapshot.
GET /v1/vps/{vps_id}/snapshots
List snapshots
Example:
curl https://api.wayscloud.services/v1/vps/{vps_id}/snapshots \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"snapshots": [
{
"name": "before-upgrade",
"description": "Snapshot before OS upgrade",
"created_at": "2026-04-01T10:30:00Z",
"size_bytes": 2147483648
}
],
"total": 1,
"max_snapshots": 10
}POST /v1/vps/{vps_id}/snapshots
Create snapshot
Create a point-in-time snapshot of the VPS disk. Names are sanitized to alphanumeric characters and underscores.
Request Body:
| Field | Type | Description |
|---|---|---|
name | string | Required. Snapshot name (alphanumeric + underscore) |
description | string | Optional description |
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/snapshots \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"name": "before-upgrade", "description": "Snapshot before OS upgrade"}'Response:
{
"status": "created",
"snapshot_name": "before-upgrade"
}DELETE /v1/vps/{vps_id}/snapshots/
Delete snapshot
Permanently delete a snapshot from the hypervisor. This action cannot be undone.
Example:
curl -X DELETE https://api.wayscloud.services/v1/vps/{vps_id}/snapshots/before-upgrade \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"status": "deleted",
"snapshot_name": "before-upgrade"
}POST /v1/vps/{vps_id}/snapshots/{snapshot_name}/rollback
Rollback to snapshot
Destructive operation. Reverts the VPS disk to a previous snapshot state. All data written after the snapshot was taken will be permanently lost.
The VPS must be stopped before rollback. Use POST /v1/vps/{vps_id}/stop first if the VPS is running.
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/snapshots/before-upgrade/rollback \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"status": "rolling_back",
"snapshot_name": "before-upgrade",
"message": "VPS disk is being reverted to snapshot state"
}Backups
Off-site backups stored in secure cloud storage, separate from the VPS server. Unlike snapshots, backups survive hardware failure.
GET /v1/vps/{vps_id}/backups
List backups
Get all off-site backups for a VPS, including automatic and manual backups. Each backup includes status, size, and expiration date.
Example:
curl https://api.wayscloud.services/v1/vps/{vps_id}/backups \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"backups": [
{
"id": "bk-a1b2c3d4",
"type": "automatic",
"status": "completed",
"size_bytes": 4294967296,
"created_at": "2026-04-03T02:00:00Z",
"expires_at": "2026-04-17T02:00:00Z"
}
],
"total": 1
}POST /v1/vps/{vps_id}/backups
Trigger manual backup
Start an immediate off-site backup. The backup runs asynchronously — poll GET /v1/vps/{vps_id}/backups to check progress. Manual backups follow the same retention policy as automatic backups.
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/backups \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"status": "started",
"backup_id": "bk-e5f6g7h8"
}DELETE /v1/vps/{vps_id}/backups/
Delete backup
Permanently delete a backup from off-site storage. This action cannot be undone.
Example:
curl -X DELETE https://api.wayscloud.services/v1/vps/{vps_id}/backups/bk-a1b2c3d4 \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"status": "deleted",
"backup_id": "bk-a1b2c3d4"
}POST /v1/vps/{vps_id}/backups/{backup_id}/restore
Restore from backup
Destructive operation. The current VPS disk will be completely replaced with backup data. All changes made after the backup was created will be permanently lost.
The VPS must be stopped before restore. Use POST /v1/vps/{vps_id}/stop first if the VPS is running.
Example:
curl -X POST https://api.wayscloud.services/v1/vps/{vps_id}/backups/bk-a1b2c3d4/restore \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"status": "restoring",
"backup_id": "bk-a1b2c3d4",
"message": "VPS disk is being restored from backup"
}GET /v1/vps/{vps_id}/backups/{backup_id}/download
Download backup
Get a time-limited presigned download URL. The URL is valid for 1 hour and can be used to download the backup image directly.
Example:
curl https://api.wayscloud.services/v1/vps/{vps_id}/backups/bk-a1b2c3d4/download \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"download_url": "https://storage.wayscloud.services/...",
"expires_at": "2026-04-03T16:30:00Z",
"size_bytes": 4294967296
}GET /v1/vps/{vps_id}/backup-policy
Get backup policy
Get the current automatic backup configuration for a VPS, including schedule, frequency, and retention period.
Response:
{
"enabled": true,
"frequency": "daily",
"time": "02:00",
"retention_days": 14
}PUT /v1/vps/{vps_id}/backup-policy
Set backup policy
Configure or update the automatic off-site backup schedule. Backups are stored in secure cloud storage, separate from the VPS host. Set enabled to false to disable automatic backups.
Request Body:
| Field | Type | Description |
|---|---|---|
enabled | boolean | Enable or disable automatic backups |
frequency | string | daily or weekly |
day_of_week | string | Day for weekly backups (e.g. monday) |
time | string | Time in UTC (e.g. 02:00) |
retention_days | integer | How long to keep backups (7, 14, or 30) |
Example:
curl -X PUT https://api.wayscloud.services/v1/vps/{vps_id}/backup-policy \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"enabled": true, "frequency": "daily", "time": "02:00", "retention_days": 14}'GET /v1/vps/{vps_id}/backup-usage
Backup storage usage
Get the total off-site backup storage consumed by this VPS, including count and total size across all retained backups.
Response:
{
"total_backups": 5,
"total_size_bytes": 21474836480,
"total_size_human": "20.0 GB"
}