Compute
Base path: /api/cloud/compute
Protected endpoints (Keycloak), unless otherwise noted.
GET /api/cloud/compute/overview
- Auth: Bearer (Keycloak)
- Description: Returns resource quotas/overview for the authenticated project.
- Params/Query/Body: none
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/overviewGET /api/cloud/compute/instances/flavors
- Auth: Bearer (Keycloak)
- Description: Lists available instance flavors.
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/instances/flavorsInstances
GET /api/cloud/compute/instances/list
- Auth: Bearer (Keycloak)
- Description: Lists compute instances for the authenticated project.
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/instances/listPOST /api/cloud/compute/instances/create
- Auth: Bearer (Keycloak)
- Description: Starts workflow to create a new compute instance.
- Body (JSON):
name(string, required)image(string, OpenStack image ID, required)imageName(string, required)flavor(string | number ID, required)securityGroups(array of{ value: string, label: string }, optional)key_name(string, keypair name, optional but required ifenable_sshis true)network(string, network ID, optional)is_public(string | boolean, whether to make instance public; UI sends string likeshouldbetrue/false)dname(string, domain name for public routing, optional)enable_ssh(boolean, optional)user_data(string, cloud-init user data, optional)volume(object | null):name(string)size(number, GiB)
- Responses:
200 OK{ message: "Instance creation started" },500on failure - Example:
curl -X POST https://your-host/api/cloud/compute/instances/create \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{
"name": "web-01",
"image": "8f0e-...-imgid",
"imageName": "Ubuntu 22.04",
"flavor": "3",
"securityGroups": [{"value":"default","label":"default"}],
"key_name": "my-keypair",
"network": "net-uuid",
"is_public": "shouldbetrue",
"dname": "app.example.com",
"enable_ssh": true,
"user_data": "#cloud-config\nhostname: web-01\n",
"volume": { "name": "web-01-volume", "size": 20 }
}'POST /api/cloud/compute/instances/console
- Auth: Bearer (Keycloak)
- Description: Creates/returns console access for an instance.
- Body:
{ instanceId: string } - Responses:
201 Createdwith console data;400/401/500on error - Example:
curl -X POST https://your-host/api/cloud/compute/instances/console \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"instanceId":"INSTANCE_ID"}'DELETE /api/cloud/compute/instances/delete/:instanceId
- Auth: Bearer (Keycloak)
- Params:
instanceId(string)
- Responses:
200 OK{ message: "Instance deletion started" };400/401/500 - Example:
curl -X DELETE https://your-host/api/cloud/compute/instances/delete/INSTANCE_ID \
-H "Authorization: Bearer $TOKEN"Logs
GET /api/cloud/compute/instances/:id/logs
- Auth: Bearer (Keycloak)
- Params:
id(string, instance ID)
- Responses:
200 OK{ output: string };400/401/500 - Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/instances/INSTANCE_ID/logsGET /api/cloud/compute/instances/:id/actionlog
- Auth: Bearer (Keycloak)
- Params:
id(string, instance ID)
- Responses:
200 OKaction log array/object;400/401/500 - Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/instances/INSTANCE_ID/actionlogKeypairs
GET /api/cloud/compute/keypairs
- Auth: Bearer (Keycloak)
- Description: Lists all keypairs for the authenticated user/project.
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/keypairsPOST /api/cloud/compute/keypairs
- Auth: Bearer (Keycloak)
- Description: Creates a new keypair.
- Body (JSON):
name(string, required)publicKey(string, required; OpenSSH public key)
- Responses:
201 Createdwith keypair object;400/401/500 - Example:
curl -X POST https://your-host/api/cloud/compute/keypairs \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"name":"my-keypair","publicKey":"ssh-ed25519 AAAAC3... user@host"}'DELETE /api/cloud/compute/keypairs/:name
- Auth: Bearer (Keycloak)
- Params:
name(string, keypair name)
- Responses:
204 No Contenton success;401/500on error - Example:
curl -X DELETE https://your-host/api/cloud/compute/keypairs/my-keypair \
-H "Authorization: Bearer $TOKEN"Networking Actions
POST /api/cloud/compute/instance/make-public
- Auth: Bearer (Keycloak)
- Body:
{ instanceId: string } - Responses:
200 OKwith result;400/401/500 - Example:
curl -X POST https://your-host/api/cloud/compute/instance/make-public \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"instanceId":"INSTANCE_ID"}'POST /api/cloud/compute/instance/make-private
- Auth: Bearer (Keycloak)
- Body:
{ instanceId: string } - Responses:
200 OKwith result;400/401/500 - Example:
curl -X POST https://your-host/api/cloud/compute/instance/make-private \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"instanceId":"INSTANCE_ID"}'Snapshots
GET /api/cloud/compute/snapshots
- Auth: Bearer (Keycloak)
- Description: Lists snapshots for the project.
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/snapshotsPOST /api/cloud/compute/snapshot
- Auth: Bearer (Keycloak)
- Body:
{ instanceId: string, snapshotName: string } - Responses:
200 OKwith workflow result;500on error - Example:
curl -X POST https://your-host/api/cloud/compute/snapshot \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"instanceId":"INSTANCE_ID","snapshotName":"snap-2025-12-03"}'DELETE /api/cloud/compute/snapshot/:snapshotId
- Auth: Bearer (Keycloak)
- Params:
snapshotId(string)
- Responses:
204 No Contenton success;401/500 - Example:
curl -X DELETE https://your-host/api/cloud/compute/snapshot/SNAPSHOT_ID \
-H "Authorization: Bearer $TOKEN"Backups
GET /api/cloud/compute/backups
- Auth: Bearer (Keycloak)
- Description: Lists backups for the project.
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/backupsPOST /api/cloud/compute/backup
- Auth: Bearer (Keycloak)
- Body:
{ volumeId: string, backupName: string } - Responses:
200 OKwith result;500on error - Example:
curl -X POST https://your-host/api/cloud/compute/backup \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"volumeId":"VOLUME_ID","backupName":"nightly-2025-12-03"}'DELETE /api/cloud/compute/backup/:backupId
- Auth: Bearer (Keycloak)
- Params:
backupId(string)
- Responses:
204 No Contenton success;401/500 - Example:
curl -X DELETE https://your-host/api/cloud/compute/backup/BACKUP_ID \
-H "Authorization: Bearer $TOKEN"Billing
GET /api/cloud/compute/billing/forecast
- Auth: Bearer (Keycloak)
- Description: Returns a billing forecast estimation.
- Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/billing/forecastVolume Attachments
Public compute endpoints (router is open, controller still requires Keycloak):
POST /api/cloud/compute/instance/attach-volume
- Auth: Bearer (Keycloak)
- Body:
{ instanceId: string, volumeId: string } - Responses:
200 OK{ message: "Volume attached successfully" };400/401/500 - Example:
curl -X POST https://your-host/api/cloud/compute/instance/attach-volume \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"instanceId":"INSTANCE_ID","volumeId":"VOLUME_ID"}'GET /api/cloud/compute/instances/:instanceId/volumes
- Auth: Bearer (Keycloak)
- Params:
instanceId(string)
- Responses:
200 OKwith attachment list;400/401/500 - Example:
curl -H "Authorization: Bearer $TOKEN" \
https://your-host/api/cloud/compute/instances/INSTANCE_ID/volumes