VPS API
Virtual Private Servers
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/{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
List VPS
Get all VPS instances with hostname, IP addresses, power state, and resource allocation.
Response:
| Field | Type | Description |
|---|---|---|
total | integer | |
vps_instances | array |
Example:
curl https://api.wayscloud.services/v1/vps \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"total": 1,
"vps_instances": [
{
"id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"provider_vm_id": "1042",
"hostname": "web01.example.com",
"display_name": "Production Web Server",
"plan_code": "NO-Start-Linux-2cpu-4096mb-30gb",
"plan_name": "Start Linux 2 vCPU / 4 GB",
"region": "NO",
"os_template": "ubuntu-22.04",
"vcpu": 2,
"ram_mb": 4096,
"disk_gb": 30,
"ipv4_address": "185.35.202.45",
"ipv6_address": "2a01:4f9:c010:1234::1",
"status": "active",
"power_state": "on",
"monthly_price": 199.0,
"currency": "NOK",
"tags": [
"web",
"prod"
],
"labels": {
"env": "prod"
},
"disk_format": "qcow2",
"snapshot_supported": true,
"created_at": "2024-02-15T14:30:00Z",
"provisioned_at": "2024-02-15T14:32:10Z",
"metrics": null
}
]
}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 GET /v1/vps/plans/) |
region | string | Required. Location as an ISO 3166-1 country code, any letter case: no for Norway, or se, de, nl and other VPS locations. oslo, norway and no-oslo-1 are also accepted. Responses return the code in upper case (NO). |
os_template | string | Required. Operating system template (name from GET /v1/vps/os-templates/) |
display_name | string | User-friendly name for dashboard display |
ssh_keys | array | SSH public keys for server access (recommended) |
tags | array | Tags for grouping: at most 20, lowercase letters, digits and hyphens, up to 50 characters each |
labels | object | Key-value labels: at most 20, keys up to 50 and values up to 200 characters |
Response:
| Field | Type | Description |
|---|---|---|
id | string | |
provider_vm_id | string | Identifier of the virtual machine on its host platform; empty until provisioned |
hostname | string | |
display_name | string | |
plan_code | string | |
plan_name | string | |
region | string | Country code of the location, upper case (NO). Requests accept any letter case. |
os_template | string | |
vcpu | integer | |
ram_mb | integer | |
disk_gb | integer | |
ipv4_address | string | |
ipv6_address | string | |
status | string | Lifecycle state, for example provisioning, active, stopped or error |
power_state | string | on or off (unknown before the first status check) |
monthly_price | number | |
currency | string | |
tags | array | User-defined tags for grouping |
labels | object | Key-value labels |
disk_format | string | Disk image format: qcow2 or raw |
snapshot_supported | boolean | Whether snapshots and backups are available for this VPS |
created_at | string | |
provisioned_at | string | |
metrics | object | Live usage, filled in by GET /v1/vps/{vps_id} for an active VPS when the host answers; null otherwise |
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": "NO-Start-Linux-2cpu-4096mb-30gb",
"region": "no",
"os_template": "ubuntu-22.04",
"display_name": "Production Web Server",
"ssh_keys": [
"ssh-ed25519 AAAA... user@laptop"
],
"tags": [
"web",
"prod"
],
"labels": {
"env": "prod"
}
}'Response:
{
"id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"provider_vm_id": "1042",
"hostname": "web01.example.com",
"display_name": "Production Web Server",
"plan_code": "NO-Start-Linux-2cpu-4096mb-30gb",
"plan_name": "Start Linux 2 vCPU / 4 GB",
"region": "NO",
"os_template": "ubuntu-22.04",
"vcpu": 2,
"ram_mb": 4096,
"disk_gb": 30,
"ipv4_address": "185.35.202.45",
"ipv6_address": "2a01:4f9:c010:1234::1",
"status": "active",
"power_state": "on",
"monthly_price": 199.0,
"currency": "NOK",
"tags": [
"web",
"prod"
],
"labels": {
"env": "prod"
},
"disk_format": "qcow2",
"snapshot_supported": true,
"created_at": "2024-02-15T14:30:00Z",
"provisioned_at": "2024-02-15T14:32:10Z",
"metrics": null
}GET /v1/vps/plans/
List plans
Get available VPS configurations with vCPU, RAM, storage, bandwidth, and pricing.
Response example:
[
{
"sku": "VPS-LITE-LIN-SSD",
"plan_code": "NO-Lite-Linux-1cpu-1024mb-20gb",
"name": "Lite Linux",
"provider": "wayscloud",
"cpu_cores": 1,
"ram_mb": 1024,
"disk_gb": 20,
"bandwidth_tb": null,
"monthly_price": 99.0,
"currency": "NOK",
"is_active": true
}
]Example:
curl https://api.wayscloud.services/v1/vps/plans/ \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
[
{
"sku": "VPS-LITE-LIN-SSD",
"plan_code": "NO-Lite-Linux-1cpu-1024mb-20gb",
"name": "Lite Linux",
"provider": "wayscloud",
"cpu_cores": 1,
"ram_mb": 1024,
"disk_gb": 20,
"bandwidth_tb": null,
"monthly_price": 99.0,
"currency": "NOK",
"is_active": true
}
]GET /v1/vps/os-templates/
List OS templates
Get available operating systems for VPS provisioning: Ubuntu, Debian, Rocky, AlmaLinux, and Windows Server.
Response example:
[
{
"name": "ubuntu-24.04",
"family": "Ubuntu",
"platform": "linux",
"is_windows": false,
"min_ram_mb": 0,
"min_disk_gb": 0
},
{
"name": "debian-12",
"family": "Debian",
"platform": "linux",
"is_windows": false,
"min_ram_mb": 0,
"min_disk_gb": 0
},
{
"name": "windows-server-2025",
"family": "Windows",
"platform": "windows",
"is_windows": true,
"min_ram_mb": 4096,
"min_disk_gb": 64
}
]Example:
curl https://api.wayscloud.services/v1/vps/os-templates/ \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
[
{
"name": "ubuntu-24.04",
"family": "Ubuntu",
"platform": "linux",
"is_windows": false,
"min_ram_mb": 0,
"min_disk_gb": 0
},
{
"name": "debian-12",
"family": "Debian",
"platform": "linux",
"is_windows": false,
"min_ram_mb": 0,
"min_disk_gb": 0
},
{
"name": "windows-server-2025",
"family": "Windows",
"platform": "windows",
"is_windows": true,
"min_ram_mb": 4096,
"min_disk_gb": 64
}
]GET /v1/vps/
Get VPS
Get complete VPS details: hostname, IP addresses, OS, plan, and configuration.
Response:
| Field | Type | Description |
|---|---|---|
id | string | |
provider_vm_id | string | Identifier of the virtual machine on its host platform; empty until provisioned |
hostname | string | |
display_name | string | |
plan_code | string | |
plan_name | string | |
region | string | Country code of the location, upper case (NO). Requests accept any letter case. |
os_template | string | |
vcpu | integer | |
ram_mb | integer | |
disk_gb | integer | |
ipv4_address | string | |
ipv6_address | string | |
status | string | Lifecycle state, for example provisioning, active, stopped or error |
power_state | string | on or off (unknown before the first status check) |
monthly_price | number | |
currency | string | |
tags | array | User-defined tags for grouping |
labels | object | Key-value labels |
disk_format | string | Disk image format: qcow2 or raw |
snapshot_supported | boolean | Whether snapshots and backups are available for this VPS |
created_at | string | |
provisioned_at | string | |
metrics | object | Live usage, filled in by GET /v1/vps/{vps_id} for an active VPS when the host answers; null otherwise |
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",
"provider_vm_id": "1042",
"hostname": "web01.example.com",
"display_name": "Production Web Server",
"plan_code": "NO-Start-Linux-2cpu-4096mb-30gb",
"plan_name": "Start Linux 2 vCPU / 4 GB",
"region": "NO",
"os_template": "ubuntu-22.04",
"vcpu": 2,
"ram_mb": 4096,
"disk_gb": 30,
"ipv4_address": "185.35.202.45",
"ipv6_address": "2a01:4f9:c010:1234::1",
"status": "active",
"power_state": "on",
"monthly_price": 199.0,
"currency": "NOK",
"tags": [
"web",
"prod"
],
"labels": {
"env": "prod"
},
"disk_format": "qcow2",
"snapshot_supported": true,
"created_at": "2024-02-15T14:30:00Z",
"provisioned_at": "2024-02-15T14:32:10Z",
"metrics": null
}GET /v1/vps/{vps_id}/status
Get status
Check power state (running/stopped), uptime, and health indicators.
Response:
| Field | Type | Description |
|---|---|---|
vps_id | string | |
status | string | |
power_state | string | on or off |
uptime | string | |
cpu_usage | string | |
ram_usage | string | |
disk_usage | string | |
traffic_in | string | Not reported yet: always null |
traffic_out | string | Not reported yet: always null |
traffic_total | string | Not reported yet: always null |
Example:
curl https://api.wayscloud.services/v1/vps/{vps_id}/status \
-H "X-API-Key: wayscloud_vps_abc12_YOUR_SECRET"Response:
{
"vps_id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"status": "running",
"power_state": "on",
"uptime": "2592000s",
"cpu_usage": "12.5%",
"ram_usage": "2796/4096 MB",
"disk_usage": "34/80 GB",
"traffic_in": null,
"traffic_out": null,
"traffic_total": null
}POST /v1/vps/{vps_id}/start
Start VPS
Power on a stopped VPS. Accessible within 30-60 seconds.
Response:
| Field | Type | Description |
|---|---|---|
ok | boolean | |
action | string | |
vps_id | 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:
{
"ok": true,
"action": "start",
"vps_id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"message": "VPS started successfully"
}POST /v1/vps/{vps_id}/stop
Stop VPS
Gracefully shut down a running VPS. Stopped VPS still incurs storage costs.
Response:
| Field | Type | Description |
|---|---|---|
ok | boolean | |
action | string | |
vps_id | 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:
{
"ok": true,
"action": "start",
"vps_id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"message": "VPS started successfully"
}POST /v1/vps/{vps_id}/reboot
Reboot VPS
Graceful reboot. Back online within 1-2 minutes.
Response:
| Field | Type | Description |
|---|---|---|
ok | boolean | |
action | string | |
vps_id | 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:
{
"ok": true,
"action": "start",
"vps_id": "b5c6d7e8-f9a0-1234-5678-90abcdef1234",
"message": "VPS started successfully"
}